pax_global_header00006660000000000000000000000064137042512410014511gustar00rootroot0000000000000052 comment=de6defa6fff08de20e36f9168f5b277e292daf46 grpc-1.30.2/000077500000000000000000000000001370425124100125275ustar00rootroot00000000000000grpc-1.30.2/.bazelci/000077500000000000000000000000001370425124100142165ustar00rootroot00000000000000grpc-1.30.2/.bazelci/presubmit.yml000066400000000000000000000012631370425124100167550ustar00rootroot00000000000000# Configuration file for Bazel CI [1]. # # Also testing on Bazel CI in addition of our normal CI workflow # ensures that gRPC is tested against Bazel@HEAD and stays compatible # with the latest release. # # See [2,3] in case you have questions. # # [1] https://github.com/bazelbuild/continuous-integration # [2] https://github.com/grpc/grpc/issues/19171 # [3] https://github.com/grpc/grpc/pull/20784 --- # TODO(yannic): Ideally, we should also enable buildifier and all platforms should test `//...`. platforms: ubuntu1604: build_targets: - //:all - //src/proto/... - //src/python/... test_targets: - //:all - //src/proto/... - //src/python/... grpc-1.30.2/.bazelrc000066400000000000000000000002161370425124100141510ustar00rootroot00000000000000# load bazelrc from the legacy location # as recommended in https://github.com/bazelbuild/bazel/issues/6319 import %workspace%/tools/bazel.rc grpc-1.30.2/.clang-format000066400000000000000000000002611370425124100151010ustar00rootroot00000000000000--- Language: Cpp BasedOnStyle: Google DerivePointerAlignment: false PointerAlignment: Left --- Language: ObjC BasedOnStyle: Google ColumnLimit: 100 ObjCBlockIndentWidth: 2 ... grpc-1.30.2/.clang-tidy000066400000000000000000000005751370425124100145720ustar00rootroot00000000000000--- Checks: 'modernize-use-nullptr,google-build-namespaces,google-build-explicit-make-pair,readability-function-size,performance-*,bugprone-*' WarningsAsErrors: 'modernize-use-nullptr,google-build-namespaces,google-build-explicit-make-pair,readability-function-size,performance-*,bugprone-*' CheckOptions: - key: readability-function-size.StatementThreshold value: '450' grpc-1.30.2/.clang_complete000066400000000000000000000007231370425124100155060ustar00rootroot00000000000000-Wall -Wc++-compat -I. -Igens -Iinclude -Isrc/core/ext/upb-generated -Ithird_party/abseil-cpp -Ithird_party/address_sorting/include -Ithird_party/benchmark/include -Ithird_party/boringssl-with-bazel/src/include -Ithird_party/cares -Ithird_party/cares/cares -Ithird_party/googletest -Ithird_party/googletest/googlemock/include -Ithird_party/googletest/googletest/include -Ithird_party/googletest/include -Ithird_party/protobuf/src -Ithird_party/upb -Ithird_party/zlib grpc-1.30.2/.editorconfig000066400000000000000000000001611370425124100152020ustar00rootroot00000000000000root = true [**] end_of_line = LF indent_style = space indent_size = 2 insert_final_newline = true tab_width = 8 grpc-1.30.2/.gitallowed000066400000000000000000000001011370425124100146530ustar00rootroot00000000000000# Security tests will contain fake secrets test/core/security/** grpc-1.30.2/.github/000077500000000000000000000000001370425124100140675ustar00rootroot00000000000000grpc-1.30.2/.github/CODEOWNERS000066400000000000000000000006501370425124100154630ustar00rootroot00000000000000# Auto-generated by the tools/mkowners/mkowners.py tool # Uses OWNERS files in different modules throughout the # repository as the source of truth for module ownership. /**/OWNERS @markdroth @nicolasnoble @a11r /bazel/** @nicolasnoble @jtattermusch @veblush @gnossen /cmake/** @jtattermusch @nicolasnoble @apolcyn /src/core/ext/filters/client_channel/** @markdroth /tools/dockerfile/** @jtattermusch @apolcyn @nicolasnoble grpc-1.30.2/.github/ISSUE_TEMPLATE/000077500000000000000000000000001370425124100162525ustar00rootroot00000000000000grpc-1.30.2/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000031511370425124100207440ustar00rootroot00000000000000--- name: Report a bug about: Create a report to help us improve labels: kind/bug, priority/P2 assignees: veblush --- ### What version of gRPC and what language are you using? ### What operating system (Linux, Windows,...) and version? ### What runtime / compiler are you using (e.g. python version or version of gcc) ### What did you do? Please provide either 1) A unit test for reproducing the bug or 2) Specific steps for us to follow to reproduce the bug. If there’s not enough information to debug the problem, gRPC team may close the issue at their discretion. You’re welcome to re-open the issue once you have a reproduction. ### What did you expect to see? ### What did you see instead? Make sure you include information that can help us debug (full error message, exception listing, stack trace, logs). See [TROUBLESHOOTING.md](https://github.com/grpc/grpc/blob/master/TROUBLESHOOTING.md) for how to diagnose problems better. ### Anything else we should know about your project / environment? grpc-1.30.2/.github/ISSUE_TEMPLATE/cleanup_request.md000066400000000000000000000013701370425124100217740ustar00rootroot00000000000000--- name: Request a cleanup about: Suggest a cleanup in our repository labels: kind/internal cleanup, priority/P2 assignees: veblush --- grpc-1.30.2/.github/ISSUE_TEMPLATE/feature_request.md000066400000000000000000000023111370425124100217740ustar00rootroot00000000000000--- name: Request a feature about: Suggest an idea for this project labels: kind/enhancement, priority/P2 assignees: veblush --- ### Is your feature request related to a problem? Please describe. A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] ### Describe the solution you'd like A clear and concise description of what you want to happen. ### Describe alternatives you've considered A clear and concise description of any alternative solutions or features you've considered. ### Additional context Add any other context about the feature request here. grpc-1.30.2/.github/ISSUE_TEMPLATE/question.md000066400000000000000000000011231370425124100204400ustar00rootroot00000000000000--- name: Ask a question about: Ask a question labels: kind/question, priority/P3 assignees: veblush --- PLEASE DO NOT POST A QUESTION HERE. This form is for bug reports and feature requests ONLY! For general questions and troubleshooting, please ask/look for answers at StackOverflow, with "grpc" tag: https://stackoverflow.com/questions/tagged/grpc For questions that specifically need to be answered by gRPC team members, please ask/look for answers at grpc.io mailing list: https://groups.google.com/forum/#!forum/grpc-io This issue will be closed down once seen by the repo managers. grpc-1.30.2/.github/lock.yml000066400000000000000000000000451370425124100155410ustar00rootroot00000000000000daysUntilLock: 90 lockComment: false grpc-1.30.2/.github/mergeable.yml000066400000000000000000000011441370425124100165350ustar00rootroot00000000000000mergeable: pull_requests: label: and: - must_exclude: regex: '^disposition/DO NOT MERGE' message: 'Pull request marked not mergeable' - or: - and: - must_include: regex: '^release notes: yes' message: 'Please add the label (release notes: yes)' - must_include: regex: '^lang\/' message: 'Please add a language label (lang/...)' - must_include: regex: '^release notes: no' message: 'Please add the label (release notes: no)' grpc-1.30.2/.github/pull_request_template.md000066400000000000000000000002771370425124100210360ustar00rootroot00000000000000 @veblush grpc-1.30.2/.github/stale.yml000066400000000000000000000040361370425124100157250ustar00rootroot00000000000000# Configuration for probot-stale - https://github.com/probot/stale # Number of days of inactivity before an Issue or Pull Request becomes stale daysUntilStale: 90 # Number of days of inactivity before an Issue or Pull Request with the stale label is closed. # Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale. daysUntilClose: 7 # Only issues or pull requests with all of these labels are check if stale. Defaults to `[]` (disabled) onlyLabels: [] # Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable exemptLabels: - "disposition/never stale" - "kind/bug" # Set to true to ignore issues in a project (defaults to false) exemptProjects: false # Set to true to ignore issues in a milestone (defaults to false) exemptMilestones: false # Set to true to ignore issues with an assignee (defaults to false) exemptAssignees: false # Label to use when marking as stale staleLabel: "disposition/stale" # Comment to post when marking as stale. Set to `false` to disable markComment: > This issue/PR has been automatically marked as stale because it has not had any update (including commits, comments, labels, milestones, etc) for 30 days. It will be closed automatically if no further update occurs in 7 day. Thank you for your contributions! # Comment to post when removing the stale label. # unmarkComment: > # Your comment here. # Comment to post when closing a stale Issue or Pull Request. # closeComment: > # Your comment here. # Limit the number of actions per hour, from 1-30. Default is 30 limitPerRun: 30 # Limit to only `issues` or `pulls` # only: issues # Optionally, specify configuration settings that are specific to just 'issues' or 'pulls': # pulls: # daysUntilStale: 30 # markComment: > # This pull request has been automatically marked as stale because it has not had # recent activity. It will be closed if no further activity occurs. Thank you # for your contributions. # issues: # exemptLabels: # - confirmed grpc-1.30.2/.gitignore000066400000000000000000000035251370425124100145240ustar00rootroot00000000000000# C/C++ build outputs .build/ bins gens libs objs # Python items cython_debug/ python_build/ yapf_virtual_environment/ python_pylint_venv/ .coverage* .eggs htmlcov/ dist/ *.egg py27_gevent/ py27_native/ py3[0-9]_gevent/ py3[0-9]_native/ a.out src/python/grpcio_*/LICENSE src/python/grpcio_status/grpc_status/google/rpc/status.proto .pytype *.egg-info # Node installation output node_modules src/node/extension_binary/ # gcov coverage data reports coverage *.gcno # profiler output *.prof # python compiled objects *.pyc # eclipse project files .cproject .project .settings # cache for run_tests.py .run_tests_cache .preprocessed_build # emacs temp files *~ # vim temp files .*.swp # Makefile's cache cache.mk # Ruby's local gem information Gemfile.lock # Temporary test reports report.xml */sponge_log.xml latency_trace.txt latency_trace.*.txt # port server log portlog.txt # gyp generated make files *-gyp.mk out # YCM config files .ycm_extra_conf.py # XCode ^build/ *.pbxuser !default.pbxuser *.mode1v3 !default.mode1v3 *.mode2v3 !default.mode2v3 *.perspectivev3 !default.perspectivev3 xcuserdata *.xccheckout *.moved-aside DerivedData *.hmap *.ipa *.xcuserstate *.DS_Store # Objective-C generated files *.pbobjc.* *.pbrpc.* src/objective-c/**/Build # Cocoapods artifacts Pods/ Podfile.lock *.xcworkspace # Artifacts directory /artifacts/ # Git generated files for conflicting *.orig # IDE specific folder for JetBrains IDEs .idea/ # Bazel files bazel-* bazel_format_virtual_environment/ tools/bazel-* # Debug output gdb.txt # ctags file tags # perf data memory_usage.csv perf.data perf.data.old # bm_diff bm_diff_new/ bm_diff_old/ bm_*.json # cmake build files **/cmake/build/ # Visual Studio Code artifacts .vscode/* .history/ # Clion artifacts cmake-build-debug/ # Benchmark outputs BenchmarkDotNet.Artifacts/ # pyenv config .python-version grpc-1.30.2/.gitmodules000066400000000000000000000034631370425124100147120ustar00rootroot00000000000000[submodule "third_party/zlib"] path = third_party/zlib url = https://github.com/madler/zlib # When using CMake to build, the zlib submodule ends up with a # generated file that makes Git consider the submodule dirty. This # state can be ignored for day-to-day development on gRPC. ignore = dirty [submodule "third_party/protobuf"] path = third_party/protobuf url = https://github.com/google/protobuf.git [submodule "third_party/gflags"] path = third_party/gflags url = https://github.com/gflags/gflags.git [submodule "third_party/googletest"] path = third_party/googletest url = https://github.com/google/googletest.git [submodule "third_party/benchmark"] path = third_party/benchmark url = https://github.com/google/benchmark [submodule "third_party/boringssl-with-bazel"] path = third_party/boringssl-with-bazel url = https://github.com/google/boringssl.git [submodule "third_party/cares/cares"] path = third_party/cares/cares url = https://github.com/c-ares/c-ares.git branch = cares-1_12_0 [submodule "third_party/bloaty"] path = third_party/bloaty url = https://github.com/google/bloaty.git [submodule "third_party/abseil-cpp"] path = third_party/abseil-cpp url = https://github.com/abseil/abseil-cpp.git branch = lts_2020_02_25 [submodule "third_party/envoy-api"] path = third_party/envoy-api url = https://github.com/envoyproxy/data-plane-api.git [submodule "third_party/googleapis"] path = third_party/googleapis url = https://github.com/googleapis/googleapis.git [submodule "third_party/protoc-gen-validate"] path = third_party/protoc-gen-validate url = https://github.com/envoyproxy/protoc-gen-validate.git [submodule "third_party/udpa"] path = third_party/udpa url = https://github.com/cncf/udpa.git [submodule "third_party/libuv"] path = third_party/libuv url = https://github.com/libuv/libuv.git grpc-1.30.2/.istanbul.yml000066400000000000000000000002071370425124100151500ustar00rootroot00000000000000reporting: watermarks: statements: [80, 95] lines: [80, 95] functions: [80, 95] branches: [80, 95] grpc-1.30.2/.pylintrc000066400000000000000000000073751370425124100144100ustar00rootroot00000000000000[MASTER] ignore= src/python/grpcio/grpc/beta, src/python/grpcio/grpc/framework, src/python/grpcio/grpc/framework/common, src/python/grpcio/grpc/framework/foundation, src/python/grpcio/grpc/framework/interfaces, extension-pkg-whitelist=grpc._cython.cygrpc [VARIABLES] # TODO(https://github.com/PyCQA/pylint/issues/1345): How does the inspection # not include "unused_" and "ignored_" by default? dummy-variables-rgx=^ignored_|^unused_|_ [DESIGN] # NOTE(nathaniel): Not particularly attached to this value; it just seems to # be what works for us at the moment (excepting the dead-code-walking Beta # API). max-args=14 max-parents=8 [MISCELLANEOUS] # NOTE(nathaniel): We are big fans of "TODO(): " and # "NOTE(): ". We do not allow "TODO:", # "TODO():", "FIXME:", or anything else. notes=FIXME,XXX [MESSAGES CONTROL] disable= # TODO(https://github.com/PyCQA/pylint/issues/59#issuecomment-283774279): # Enable cyclic-import after a 1.7-or-later pylint release that # recognizes our disable=cyclic-import suppressions. cyclic-import, # TODO(https://github.com/grpc/grpc/issues/8622): Enable this after the # Beta API is removed. duplicate-code, # TODO(https://github.com/grpc/grpc/issues/261): Doesn't seem to # understand enum and concurrent.futures; look into this later with the # latest pylint version. import-error, # TODO(https://github.com/grpc/grpc/issues/261): Enable this one. # Should take a little configuration but not much. invalid-name, # TODO(https://github.com/grpc/grpc/issues/261): This doesn't seem to # work for now? Try with a later pylint? locally-disabled, # NOTE(nathaniel): What even is this? *Enabling* an inspection results # in a warning? How does that encourage more analysis and coverage? locally-enabled, # NOTE(nathaniel): We don't write doc strings for most private code # elements. missing-docstring, # NOTE(nathaniel): In numeric comparisons it is better to have the # lesser (or lesser-or-equal-to) quantity on the left when the # expression is true than it is to worry about which is an identifier # and which a literal value. misplaced-comparison-constant, # NOTE(nathaniel): Our completely abstract interface classes don't have # constructors. no-init, # TODO(https://github.com/grpc/grpc/issues/261): Doesn't yet play # nicely with some of our code being implemented in Cython. Maybe in a # later version? no-name-in-module, # TODO(https://github.com/grpc/grpc/issues/261): Suppress these where # the odd shape of the authentication portion of the API forces them on # us and enable everywhere else. protected-access, # NOTE(nathaniel): Pylint and I will probably never agree on this. too-few-public-methods, # NOTE(nathaniel): Pylint and I wil probably never agree on this for # private classes. For public classes maybe? too-many-instance-attributes, # NOTE(nathaniel): Some of our modules have a lot of lines... of # specification and documentation. Maybe if this were # lines-of-code-based we would use it. too-many-lines, # TODO(https://github.com/grpc/grpc/issues/261): Maybe we could have # this one if we extracted just a few more helper functions... too-many-nested-blocks, # TODO(https://github.com/grpc/grpc/issues/261): Disable unnecessary # super-init requirement for abstract class implementations for now. super-init-not-called, # NOTE(nathaniel): A single statement that always returns program # control is better than two statements the first of which sometimes # returns program control and the second of which always returns # program control. Probably generally, but definitely in the cases of # if:/else: and for:/else:. useless-else-on-loop, no-else-return, # NOTE(lidiz): Python 3 make object inheritance default, but not PY2 useless-object-inheritance, grpc-1.30.2/.pylintrc-examples000066400000000000000000000075201370425124100162140ustar00rootroot00000000000000[MASTER] ignore= src/python/grpcio/grpc/beta, src/python/grpcio/grpc/framework, src/python/grpcio/grpc/framework/common, src/python/grpcio/grpc/framework/foundation, src/python/grpcio/grpc/framework/interfaces, [VARIABLES] # TODO(https://github.com/PyCQA/pylint/issues/1345): How does the inspection # not include "unused_" and "ignored_" by default? dummy-variables-rgx=^ignored_|^unused_ [DESIGN] # NOTE(nathaniel): Not particularly attached to this value; it just seems to # be what works for us at the moment (excepting the dead-code-walking Beta # API). max-args=6 [MISCELLANEOUS] # NOTE(nathaniel): We are big fans of "TODO(): " and # "NOTE(): ". We do not allow "TODO:", # "TODO():", "FIXME:", or anything else. notes=FIXME,XXX [MESSAGES CONTROL] disable= # -- START OF EXAMPLE-SPECIFIC SUPPRESSIONS -- no-self-use, unused-argument, unused-variable, # -- END OF EXAMPLE-SPECIFIC SUPPRESSIONS -- # TODO(https://github.com/PyCQA/pylint/issues/59#issuecomment-283774279): # Enable cyclic-import after a 1.7-or-later pylint release that # recognizes our disable=cyclic-import suppressions. cyclic-import, # TODO(https://github.com/grpc/grpc/issues/8622): Enable this after the # Beta API is removed. duplicate-code, # TODO(https://github.com/grpc/grpc/issues/261): Doesn't seem to # understand enum and concurrent.futures; look into this later with the # latest pylint version. import-error, # TODO(https://github.com/grpc/grpc/issues/261): Enable this one. # Should take a little configuration but not much. invalid-name, # TODO(https://github.com/grpc/grpc/issues/261): This doesn't seem to # work for now? Try with a later pylint? locally-disabled, # NOTE(nathaniel): What even is this? *Enabling* an inspection results # in a warning? How does that encourage more analysis and coverage? locally-enabled, # NOTE(nathaniel): We don't write doc strings for most private code # elements. missing-docstring, # NOTE(nathaniel): In numeric comparisons it is better to have the # lesser (or lesser-or-equal-to) quantity on the left when the # expression is true than it is to worry about which is an identifier # and which a literal value. misplaced-comparison-constant, # NOTE(nathaniel): Our completely abstract interface classes don't have # constructors. no-init, # TODO(https://github.com/grpc/grpc/issues/261): Doesn't yet play # nicely with some of our code being implemented in Cython. Maybe in a # later version? no-name-in-module, # TODO(https://github.com/grpc/grpc/issues/261): Suppress these where # the odd shape of the authentication portion of the API forces them on # us and enable everywhere else. protected-access, # NOTE(nathaniel): Pylint and I will probably never agree on this. too-few-public-methods, # NOTE(nathaniel): Pylint and I wil probably never agree on this for # private classes. For public classes maybe? too-many-instance-attributes, # NOTE(nathaniel): Some of our modules have a lot of lines... of # specification and documentation. Maybe if this were # lines-of-code-based we would use it. too-many-lines, # TODO(https://github.com/grpc/grpc/issues/261): Maybe we could have # this one if we extracted just a few more helper functions... too-many-nested-blocks, # TODO(https://github.com/grpc/grpc/issues/261): Disable unnecessary # super-init requirement for abstract class implementations for now. super-init-not-called, # NOTE(nathaniel): A single statement that always returns program # control is better than two statements the first of which sometimes # returns program control and the second of which always returns # program control. Probably generally, but definitely in the cases of # if:/else: and for:/else:. useless-else-on-loop, no-else-return, # NOTE(lidiz): Python 3 make object inheritance default, but not PY2 useless-object-inheritance, grpc-1.30.2/.pylintrc-tests000066400000000000000000000110151370425124100155320ustar00rootroot00000000000000[MASTER] ignore= src/python/grpcio_tests/tests/unit/beta, src/python/grpcio_tests/tests/unit/framework, src/python/grpcio_tests/tests/unit/framework/common, src/python/grpcio_tests/tests/unit/framework/foundation, [VARIABLES] # TODO(https://github.com/PyCQA/pylint/issues/1345): How does the inspection # not include "unused_" and "ignored_" by default? dummy-variables-rgx=^ignored_|^unused_ [DESIGN] # NOTE(nathaniel): Not particularly attached to this value; it just seems to # be what works for us at the moment (excepting the dead-code-walking Beta # API). max-args=6 [MISCELLANEOUS] # NOTE(nathaniel): We are big fans of "TODO(): " and # "NOTE(): ". We do not allow "TODO:", # "TODO():", "FIXME:", or anything else. notes=FIXME,XXX [MESSAGES CONTROL] extension-pkg-whitelist=grpc._cython.cygrpc disable= # These suppressions are specific to tests: # # TODO(https://github.com/grpc/grpc/issues/261): investigate # each of the following one by one and consider eliminating # the suppression category. # Eventually, the hope is to eliminate the .pylintrc-tests # altogether and rely on .pylintrc for everything. pointless-statement, no-member, no-self-use, attribute-defined-outside-init, unused-argument, unused-variable, unused-import, redefined-builtin, too-many-public-methods, too-many-locals, redefined-variable-type, redefined-outer-name, ungrouped-imports, too-many-branches, too-many-arguments, too-many-format-args, too-many-return-statements, too-many-statements, line-too-long, wrong-import-position, wrong-import-order, # -- END OF TEST-SPECIFIC SUPPRESSIONS -- # TODO(https://github.com/PyCQA/pylint/issues/59#issuecomment-283774279): # Enable cyclic-import after a 1.7-or-later pylint release that # recognizes our disable=cyclic-import suppressions. cyclic-import, # TODO(https://github.com/grpc/grpc/issues/8622): Enable this after the # Beta API is removed. duplicate-code, # TODO(https://github.com/grpc/grpc/issues/261): Doesn't seem to # understand enum and concurrent.futures; look into this later with the # latest pylint version. import-error, # TODO(https://github.com/grpc/grpc/issues/261): Enable this one. # Should take a little configuration but not much. invalid-name, # TODO(https://github.com/grpc/grpc/issues/261): This doesn't seem to # work for now? Try with a later pylint? locally-disabled, # NOTE(nathaniel): What even is this? *Enabling* an inspection results # in a warning? How does that encourage more analysis and coverage? locally-enabled, # NOTE(nathaniel): We don't write doc strings for most private code # elements. missing-docstring, # NOTE(nathaniel): In numeric comparisons it is better to have the # lesser (or lesser-or-equal-to) quantity on the left when the # expression is true than it is to worry about which is an identifier # and which a literal value. misplaced-comparison-constant, # NOTE(nathaniel): Our completely abstract interface classes don't have # constructors. no-init, # TODO(https://github.com/grpc/grpc/issues/261): Doesn't yet play # nicely with some of our code being implemented in Cython. Maybe in a # later version? no-name-in-module, # TODO(https://github.com/grpc/grpc/issues/261): Suppress these where # the odd shape of the authentication portion of the API forces them on # us and enable everywhere else. protected-access, # NOTE(nathaniel): Pylint and I will probably never agree on this. too-few-public-methods, # NOTE(nathaniel): Pylint and I wil probably never agree on this for # private classes. For public classes maybe? too-many-instance-attributes, # NOTE(nathaniel): Some of our modules have a lot of lines... of # specification and documentation. Maybe if this were # lines-of-code-based we would use it. too-many-lines, # TODO(https://github.com/grpc/grpc/issues/261): Maybe we could have # this one if we extracted just a few more helper functions... too-many-nested-blocks, # TODO(https://github.com/grpc/grpc/issues/261): Disable unnecessary # super-init requirement for abstract class implementations for now. super-init-not-called, # NOTE(nathaniel): A single statement that always returns program # control is better than two statements the first of which sometimes # returns program control and the second of which always returns # program control. Probably generally, but definitely in the cases of # if:/else: and for:/else:. useless-else-on-loop, no-else-return, # NOTE(lidiz): Python 3 make object inheritance default, but not PY2 useless-object-inheritance, grpc-1.30.2/.rspec000077500000000000000000000001371370425124100136500ustar00rootroot00000000000000-Isrc/ruby -Isrc/ruby/pb --backtrace --require spec/spec_helper --format documentation --color grpc-1.30.2/.travis.yml000066400000000000000000000052061370425124100146430ustar00rootroot00000000000000git: depth: 1 language: objective-c osx_image: xcode7.3 env: global: - CONFIG=opt - TEST=objc - JOBS=1 matrix: - SCHEME="RxLibraryUnitTests" WORKSPACE="Tests.xcworkspace" TEST_PATH="src/objective-c/tests" BUILD_ONLY="false" INTEROP_SERVER="false" - SCHEME="InteropTestsLocalSSL" WORKSPACE="Tests.xcworkspace" TEST_PATH="src/objective-c/tests" BUILD_ONLY="false" INTEROP_SERVER="true" - SCHEME="InteropTestsLocalCleartext" WORKSPACE="Tests.xcworkspace" TEST_PATH="src/objective-c/tests" BUILD_ONLY="false" INTEROP_SERVER="true" # TODO(jcanizales): Make tests an app project (instead of library), so the following will work. # - SCHEME="InteropTestsRemote" # WORKSPACE="Tests.xcworkspace" TEST_PATH="src/objective-c/tests" BUILD_ONLY="false" # INTEROP_SERVER="true" - SCHEME="HelloWorld" WORKSPACE="HelloWorld.xcworkspace" TEST_PATH="examples/objective-c/helloworld" BUILD_ONLY="true" INTEROP_SERVER="false" - SCHEME="RouteGuideClient" WORKSPACE="RouteGuideClient.xcworkspace" TEST_PATH="examples/objective-c/route_guide" BUILD_ONLY="true" INTEROP_SERVER="false" - SCHEME="AuthSample" WORKSPACE="AuthSample.xcworkspace" TEST_PATH="examples/objective-c/auth_sample" BUILD_ONLY="true" INTEROP_SERVER="false" - SCHEME="Sample" WORKSPACE="Sample.xcworkspace" TEST_PATH="src/objective-c/examples/Sample" BUILD_ONLY="true" INTEROP_SERVER="false" - SCHEME="Sample" WORKSPACE="Sample.xcworkspace" TEST_PATH="src/objective-c/examples/Sample" BUILD_ONLY="true" INTEROP_SERVER="false" FRAMEWORKS="YES" - SCHEME="SwiftSample" WORKSPACE="SwiftSample.xcworkspace" TEST_PATH="src/objective-c/examples/SwiftSample" BUILD_ONLY="true" INTEROP_SERVER="false" before_install: # Until Travis upgrades from Cocoapods 0.39, we need to do it here. - pod --version - gem uninstall cocoapods -a - gem install cocoapods -v '1.0.1' - pod --version # Recent pods aren't found if we don't explicitly update Cocoapods' repo. - pod repo update - brew install gflags install: - pushd $TEST_PATH - pod install - popd before_script: - if [ "${INTEROP_SERVER}" = "true" ]; then make interop_server; (bins/$CONFIG/interop_server --port=5050 &); (bins/$CONFIG/interop_server --port=5051 --use_tls &); fi script: - if [ "${BUILD_ONLY}" = "true" ]; then xctool -workspace "$TEST_PATH/$WORKSPACE" -scheme "$SCHEME" -sdk iphonesimulator9.3 build; else xctool -workspace "$TEST_PATH/$WORKSPACE" -scheme "$SCHEME" -sdk iphonesimulator9.3 test; fi notifications: email: false grpc-1.30.2/.yapfignore000066400000000000000000000006401370425124100146730ustar00rootroot00000000000000# this file is auto-generated *protoc_lib_deps.py # no need to format protoc generated files *_pb2*.py # no need to format build-yaml generated files *.gen.py # generated files from a template *test/cpp/naming/resolver_component_tests_runner.py # No BUILD, .bzl files *BUILD *.bzl *.bazelrc # No other languages *.bat *.c *.c++ *.cc *.css *.go *.h *.html *.json *.md *.objc *.php *.proto *.rb *.sh *.xml *.yaml grpc-1.30.2/.yardopts000066400000000000000000000000201370425124100143650ustar00rootroot00000000000000src/ruby/**/*.rbgrpc-1.30.2/AUTHORS000066400000000000000000000001001370425124100135660ustar00rootroot00000000000000Dropbox, Inc. Google Inc. Skyscanner Ltd. WeWork Companies Inc. grpc-1.30.2/BUILD000066400000000000000000003044721370425124100133230ustar00rootroot00000000000000# gRPC Bazel BUILD file. # # Copyright 2016 gRPC 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 # # 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. licenses(["notice"]) exports_files([ "LICENSE", "etc/roots.pem", ]) package( default_visibility = ["//visibility:public"], features = [ "-layering_check", "-parse_headers", ], ) load( "//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_generate_one_off_targets", "grpc_upb_proto_library", "python_config_settings", ) config_setting( name = "grpc_no_ares", values = {"define": "grpc_no_ares=true"}, ) config_setting( name = "grpc_allow_exceptions", values = {"define": "GRPC_ALLOW_EXCEPTIONS=1"}, ) config_setting( name = "grpc_disallow_exceptions", values = {"define": "GRPC_ALLOW_EXCEPTIONS=0"}, ) config_setting( name = "remote_execution", values = {"define": "GRPC_PORT_ISOLATED_RUNTIME=1"}, ) config_setting( name = "windows", values = {"cpu": "x64_windows"}, ) config_setting( name = "windows_msvc", values = {"cpu": "x64_windows_msvc"}, ) config_setting( name = "mac_x86_64", values = {"cpu": "darwin"}, ) python_config_settings() # This should be updated along with build.yaml g_stands_for = "gradius" core_version = "10.0.0" version = "1.30.2" GPR_PUBLIC_HDRS = [ "include/grpc/support/alloc.h", "include/grpc/support/atm.h", "include/grpc/support/atm_gcc_atomic.h", "include/grpc/support/atm_gcc_sync.h", "include/grpc/support/atm_windows.h", "include/grpc/support/cpu.h", "include/grpc/support/log.h", "include/grpc/support/log_windows.h", "include/grpc/support/port_platform.h", "include/grpc/support/string_util.h", "include/grpc/support/sync.h", "include/grpc/support/sync_abseil.h", "include/grpc/support/sync_custom.h", "include/grpc/support/sync_generic.h", "include/grpc/support/sync_posix.h", "include/grpc/support/sync_windows.h", "include/grpc/support/thd_id.h", "include/grpc/support/time.h", ] GRPC_PUBLIC_HDRS = [ "include/grpc/byte_buffer.h", "include/grpc/byte_buffer_reader.h", "include/grpc/compression.h", "include/grpc/fork.h", "include/grpc/grpc.h", "include/grpc/grpc_posix.h", "include/grpc/grpc_security_constants.h", "include/grpc/slice.h", "include/grpc/slice_buffer.h", "include/grpc/status.h", "include/grpc/load_reporting.h", "include/grpc/support/workaround_list.h", ] GRPC_SECURE_PUBLIC_HDRS = [ "include/grpc/grpc_security.h", ] # TODO(ctiller): layer grpc atop grpc_unsecure, layer grpc++ atop grpc++_unsecure GRPCXX_SRCS = [ "src/cpp/client/channel_cc.cc", "src/cpp/client/client_context.cc", "src/cpp/client/client_interceptor.cc", "src/cpp/client/create_channel.cc", "src/cpp/client/create_channel_internal.cc", "src/cpp/client/create_channel_posix.cc", "src/cpp/client/credentials_cc.cc", "src/cpp/common/alarm.cc", "src/cpp/common/channel_arguments.cc", "src/cpp/common/channel_filter.cc", "src/cpp/common/completion_queue_cc.cc", "src/cpp/common/core_codegen.cc", "src/cpp/common/resource_quota_cc.cc", "src/cpp/common/rpc_method.cc", "src/cpp/common/version_cc.cc", "src/cpp/common/validate_service_config.cc", "src/cpp/server/async_generic_service.cc", "src/cpp/server/channel_argument_option.cc", "src/cpp/server/create_default_thread_pool.cc", "src/cpp/server/dynamic_thread_pool.cc", "src/cpp/server/external_connection_acceptor_impl.cc", "src/cpp/server/health/default_health_check_service.cc", "src/cpp/server/health/health_check_service.cc", "src/cpp/server/health/health_check_service_server_builder_option.cc", "src/cpp/server/server_builder.cc", "src/cpp/server/server_callback.cc", "src/cpp/server/server_cc.cc", "src/cpp/server/server_context.cc", "src/cpp/server/server_credentials.cc", "src/cpp/server/server_posix.cc", "src/cpp/thread_manager/thread_manager.cc", "src/cpp/util/byte_buffer_cc.cc", "src/cpp/util/status.cc", "src/cpp/util/string_ref.cc", "src/cpp/util/time_cc.cc", ] GRPCXX_HDRS = [ "src/cpp/client/create_channel_internal.h", "src/cpp/common/channel_filter.h", "src/cpp/server/dynamic_thread_pool.h", "src/cpp/server/external_connection_acceptor_impl.h", "src/cpp/server/health/default_health_check_service.h", "src/cpp/server/thread_pool_interface.h", "src/cpp/thread_manager/thread_manager.h", ] GRPCXX_PUBLIC_HDRS = [ "include/grpc++/alarm.h", "include/grpc++/channel.h", "include/grpc++/client_context.h", "include/grpc++/completion_queue.h", "include/grpc++/create_channel.h", "include/grpc++/create_channel_posix.h", "include/grpc++/ext/health_check_service_server_builder_option.h", "include/grpc++/generic/async_generic_service.h", "include/grpc++/generic/generic_stub.h", "include/grpc++/grpc++.h", "include/grpc++/health_check_service_interface.h", "include/grpc++/impl/call.h", "include/grpc++/impl/channel_argument_option.h", "include/grpc++/impl/client_unary_call.h", "include/grpc++/impl/codegen/core_codegen.h", "include/grpc++/impl/grpc_library.h", "include/grpc++/impl/method_handler_impl.h", "include/grpc++/impl/rpc_method.h", "include/grpc++/impl/rpc_service_method.h", "include/grpc++/impl/serialization_traits.h", "include/grpc++/impl/server_builder_option.h", "include/grpc++/impl/server_builder_plugin.h", "include/grpc++/impl/server_initializer.h", "include/grpc++/impl/service_type.h", "include/grpc++/security/auth_context.h", "include/grpc++/resource_quota.h", "include/grpc++/security/auth_metadata_processor.h", "include/grpc++/security/credentials.h", "include/grpc++/security/server_credentials.h", "include/grpc++/server.h", "include/grpc++/server_builder.h", "include/grpc++/server_context.h", "include/grpc++/server_posix.h", "include/grpc++/support/async_stream.h", "include/grpc++/support/async_unary_call.h", "include/grpc++/support/byte_buffer.h", "include/grpc++/support/channel_arguments.h", "include/grpc++/support/config.h", "include/grpc++/support/slice.h", "include/grpc++/support/status.h", "include/grpc++/support/status_code_enum.h", "include/grpc++/support/string_ref.h", "include/grpc++/support/stub_options.h", "include/grpc++/support/sync_stream.h", "include/grpc++/support/time.h", "include/grpcpp/alarm.h", "include/grpcpp/alarm_impl.h", "include/grpcpp/channel.h", "include/grpcpp/channel_impl.h", "include/grpcpp/client_context.h", "include/grpcpp/completion_queue.h", "include/grpcpp/completion_queue_impl.h", "include/grpcpp/create_channel.h", "include/grpcpp/create_channel_impl.h", "include/grpcpp/create_channel_posix.h", "include/grpcpp/create_channel_posix_impl.h", "include/grpcpp/ext/health_check_service_server_builder_option.h", "include/grpcpp/generic/async_generic_service.h", "include/grpcpp/generic/generic_stub.h", "include/grpcpp/generic/generic_stub_impl.h", "include/grpcpp/grpcpp.h", "include/grpcpp/health_check_service_interface.h", "include/grpcpp/health_check_service_interface_impl.h", "include/grpcpp/impl/call.h", "include/grpcpp/impl/channel_argument_option.h", "include/grpcpp/impl/client_unary_call.h", "include/grpcpp/impl/codegen/core_codegen.h", "include/grpcpp/impl/grpc_library.h", "include/grpcpp/impl/method_handler_impl.h", "include/grpcpp/impl/rpc_method.h", "include/grpcpp/impl/rpc_service_method.h", "include/grpcpp/impl/serialization_traits.h", "include/grpcpp/impl/server_builder_option.h", "include/grpcpp/impl/server_builder_option_impl.h", "include/grpcpp/impl/server_builder_plugin.h", "include/grpcpp/impl/server_initializer.h", "include/grpcpp/impl/server_initializer_impl.h", "include/grpcpp/impl/service_type.h", "include/grpcpp/resource_quota.h", "include/grpcpp/resource_quota_impl.h", "include/grpcpp/security/auth_context.h", "include/grpcpp/security/auth_metadata_processor.h", "include/grpcpp/security/auth_metadata_processor_impl.h", "include/grpcpp/security/credentials.h", "include/grpcpp/security/credentials_impl.h", "include/grpcpp/security/server_credentials.h", "include/grpcpp/security/server_credentials_impl.h", "include/grpcpp/security/tls_credentials_options.h", "include/grpcpp/server.h", "include/grpcpp/server_impl.h", "include/grpcpp/server_builder.h", "include/grpcpp/server_builder_impl.h", "include/grpcpp/server_context.h", "include/grpcpp/server_posix.h", "include/grpcpp/server_posix_impl.h", "include/grpcpp/support/async_stream.h", "include/grpcpp/support/async_stream_impl.h", "include/grpcpp/support/async_unary_call.h", "include/grpcpp/support/async_unary_call_impl.h", "include/grpcpp/support/byte_buffer.h", "include/grpcpp/support/channel_arguments.h", "include/grpcpp/support/channel_arguments_impl.h", "include/grpcpp/support/client_callback.h", "include/grpcpp/support/client_callback_impl.h", "include/grpcpp/support/client_interceptor.h", "include/grpcpp/support/config.h", "include/grpcpp/support/interceptor.h", "include/grpcpp/support/message_allocator.h", "include/grpcpp/support/method_handler.h", "include/grpcpp/support/proto_buffer_reader.h", "include/grpcpp/support/proto_buffer_writer.h", "include/grpcpp/support/server_callback.h", "include/grpcpp/support/server_callback_impl.h", "include/grpcpp/support/server_interceptor.h", "include/grpcpp/support/slice.h", "include/grpcpp/support/status.h", "include/grpcpp/support/status_code_enum.h", "include/grpcpp/support/string_ref.h", "include/grpcpp/support/stub_options.h", "include/grpcpp/support/sync_stream.h", "include/grpcpp/support/sync_stream_impl.h", "include/grpcpp/support/time.h", "include/grpcpp/support/validate_service_config.h", ] grpc_cc_library( name = "gpr", language = "c++", public_hdrs = GPR_PUBLIC_HDRS, standalone = True, deps = [ "gpr_base", ], ) grpc_cc_library( name = "grpc_unsecure", srcs = [ "src/core/lib/surface/init.cc", "src/core/lib/surface/init_unsecure.cc", "src/core/plugin_registry/grpc_unsecure_plugin_registry.cc", ], language = "c++", public_hdrs = GRPC_PUBLIC_HDRS, standalone = True, deps = [ "grpc_common", "grpc_lb_policy_cds", "grpc_lb_policy_eds", "grpc_lb_policy_grpclb", "grpc_lb_policy_lrs", "grpc_lb_policy_xds_routing", "grpc_resolver_xds", ], ) grpc_cc_library( name = "grpc", srcs = [ "src/core/lib/surface/init.cc", "src/core/plugin_registry/grpc_plugin_registry.cc", ], language = "c++", public_hdrs = GRPC_PUBLIC_HDRS + GRPC_SECURE_PUBLIC_HDRS, standalone = True, deps = [ "grpc_common", "grpc_lb_policy_cds_secure", "grpc_lb_policy_eds_secure", "grpc_lb_policy_grpclb_secure", "grpc_lb_policy_lrs_secure", "grpc_lb_policy_xds_routing", "grpc_resolver_xds_secure", "grpc_secure", "grpc_transport_chttp2_client_secure", "grpc_transport_chttp2_server_secure", ], ) grpc_cc_library( name = "grpc++_public_hdrs", hdrs = GRPCXX_PUBLIC_HDRS, ) grpc_cc_library( name = "grpc++", srcs = [ "src/cpp/client/insecure_credentials.cc", "src/cpp/client/secure_credentials.cc", "src/cpp/common/auth_property_iterator.cc", "src/cpp/common/secure_auth_context.cc", "src/cpp/common/secure_channel_arguments.cc", "src/cpp/common/secure_create_auth_context.cc", "src/cpp/common/tls_credentials_options.cc", "src/cpp/common/tls_credentials_options_util.cc", "src/cpp/server/insecure_server_credentials.cc", "src/cpp/server/secure_server_credentials.cc", ], hdrs = [ "src/cpp/client/secure_credentials.h", "src/cpp/common/secure_auth_context.h", "src/cpp/common/tls_credentials_options_util.h", "src/cpp/server/secure_server_credentials.h", ], language = "c++", public_hdrs = GRPCXX_PUBLIC_HDRS, standalone = True, deps = [ "gpr", "grpc", "grpc++_base", "grpc++_codegen_base", "grpc++_codegen_base_src", "grpc++_codegen_proto", "grpc_secure", ], ) grpc_cc_library( name = "grpc++_unsecure", srcs = [ "src/cpp/client/insecure_credentials.cc", "src/cpp/common/insecure_create_auth_context.cc", "src/cpp/server/insecure_server_credentials.cc", ], language = "c++", standalone = True, deps = [ "gpr", "grpc++_base_unsecure", "grpc++_codegen_base", "grpc++_codegen_base_src", "grpc++_codegen_proto", "grpc_unsecure", ], ) grpc_cc_library( name = "grpc++_error_details", srcs = [ "src/cpp/util/error_details.cc", ], hdrs = [ "include/grpc++/support/error_details.h", "include/grpcpp/support/error_details.h", "include/grpcpp/support/error_details_impl.h", ], language = "c++", standalone = True, deps = [ "grpc++", "//src/proto/grpc/status:status_proto", ], ) grpc_cc_library( name = "grpc++_alts", srcs = [ "src/cpp/common/alts_context.cc", "src/cpp/common/alts_util.cc", ], hdrs = [ "include/grpcpp/security/alts_context.h", "include/grpcpp/security/alts_util.h", ], language = "c++", standalone = True, deps = [ "alts_upb", "alts_util", "grpc++", ], ) grpc_cc_library( name = "grpc_csharp_ext", srcs = [ "src/csharp/ext/grpc_csharp_ext.c", ], language = "csharp", deps = [ "gpr", "grpc", ], ) grpc_cc_library( name = "census", srcs = [ "src/core/ext/filters/census/grpc_context.cc", ], language = "c++", public_hdrs = [ "include/grpc/census.h", ], deps = [ "grpc_base", ], ) grpc_cc_library( name = "grpc++_internal_hdrs_only", hdrs = [ "include/grpcpp/impl/codegen/sync.h", ], language = "c++", deps = [ "gpr_codegen", ], ) grpc_cc_library( name = "gpr_base", srcs = [ "src/core/lib/gpr/alloc.cc", "src/core/lib/gpr/atm.cc", "src/core/lib/gpr/cpu_iphone.cc", "src/core/lib/gpr/cpu_linux.cc", "src/core/lib/gpr/cpu_posix.cc", "src/core/lib/gpr/cpu_windows.cc", "src/core/lib/gpr/env_linux.cc", "src/core/lib/gpr/env_posix.cc", "src/core/lib/gpr/env_windows.cc", "src/core/lib/gpr/log.cc", "src/core/lib/gpr/log_android.cc", "src/core/lib/gpr/log_linux.cc", "src/core/lib/gpr/log_posix.cc", "src/core/lib/gpr/log_windows.cc", "src/core/lib/gpr/murmur_hash.cc", "src/core/lib/gpr/string.cc", "src/core/lib/gpr/string_posix.cc", "src/core/lib/gpr/string_util_windows.cc", "src/core/lib/gpr/string_windows.cc", "src/core/lib/gpr/sync.cc", "src/core/lib/gpr/sync_abseil.cc", "src/core/lib/gpr/sync_posix.cc", "src/core/lib/gpr/sync_windows.cc", "src/core/lib/gpr/time.cc", "src/core/lib/gpr/time_posix.cc", "src/core/lib/gpr/time_precise.cc", "src/core/lib/gpr/time_windows.cc", "src/core/lib/gpr/tls_pthread.cc", "src/core/lib/gpr/tmpfile_msys.cc", "src/core/lib/gpr/tmpfile_posix.cc", "src/core/lib/gpr/tmpfile_windows.cc", "src/core/lib/gpr/wrap_memcpy.cc", "src/core/lib/gprpp/arena.cc", "src/core/lib/gprpp/fork.cc", "src/core/lib/gprpp/global_config_env.cc", "src/core/lib/gprpp/host_port.cc", "src/core/lib/gprpp/mpscq.cc", "src/core/lib/gprpp/thd_posix.cc", "src/core/lib/gprpp/thd_windows.cc", "src/core/lib/profiling/basic_timers.cc", "src/core/lib/profiling/stap_timers.cc", ], hdrs = [ "src/core/lib/gpr/alloc.h", "src/core/lib/gpr/arena.h", "src/core/lib/gpr/env.h", "src/core/lib/gpr/murmur_hash.h", "src/core/lib/gpr/spinlock.h", "src/core/lib/gpr/string.h", "src/core/lib/gpr/string_windows.h", "src/core/lib/gpr/time_precise.h", "src/core/lib/gpr/tls.h", "src/core/lib/gpr/tls_gcc.h", "src/core/lib/gpr/tls_msvc.h", "src/core/lib/gpr/tls_pthread.h", "src/core/lib/gpr/tmpfile.h", "src/core/lib/gpr/useful.h", "src/core/lib/gprpp/arena.h", "src/core/lib/gprpp/atomic.h", "src/core/lib/gprpp/fork.h", "src/core/lib/gprpp/global_config.h", "src/core/lib/gprpp/global_config_custom.h", "src/core/lib/gprpp/global_config_env.h", "src/core/lib/gprpp/global_config_generic.h", "src/core/lib/gprpp/host_port.h", "src/core/lib/gprpp/manual_constructor.h", "src/core/lib/gprpp/map.h", "src/core/lib/gprpp/memory.h", "src/core/lib/gprpp/mpscq.h", "src/core/lib/gprpp/sync.h", "src/core/lib/gprpp/thd.h", "src/core/lib/profiling/timers.h", ], external_deps = [ "absl/memory", "absl/strings", "absl/strings:str_format", "absl/time:time", ], language = "c++", public_hdrs = GPR_PUBLIC_HDRS, deps = [ "gpr_codegen", "grpc_codegen", ], ) grpc_cc_library( name = "gpr_codegen", language = "c++", public_hdrs = [ "include/grpc/impl/codegen/atm.h", "include/grpc/impl/codegen/atm_gcc_atomic.h", "include/grpc/impl/codegen/atm_gcc_sync.h", "include/grpc/impl/codegen/atm_windows.h", "include/grpc/impl/codegen/fork.h", "include/grpc/impl/codegen/gpr_slice.h", "include/grpc/impl/codegen/gpr_types.h", "include/grpc/impl/codegen/log.h", "include/grpc/impl/codegen/port_platform.h", "include/grpc/impl/codegen/sync.h", "include/grpc/impl/codegen/sync_abseil.h", "include/grpc/impl/codegen/sync_custom.h", "include/grpc/impl/codegen/sync_generic.h", "include/grpc/impl/codegen/sync_posix.h", "include/grpc/impl/codegen/sync_windows.h", ], ) grpc_cc_library( name = "grpc_trace", srcs = ["src/core/lib/debug/trace.cc"], hdrs = ["src/core/lib/debug/trace.h"], language = "c++", public_hdrs = GRPC_PUBLIC_HDRS, deps = [ "grpc_codegen", ":gpr", ], ) grpc_cc_library( name = "atomic", language = "c++", public_hdrs = [ "src/core/lib/gprpp/atomic.h", ], deps = [ "gpr", ], ) grpc_cc_library( name = "debug_location", language = "c++", public_hdrs = ["src/core/lib/gprpp/debug_location.h"], ) grpc_cc_library( name = "orphanable", language = "c++", public_hdrs = ["src/core/lib/gprpp/orphanable.h"], deps = [ "debug_location", "gpr_base", "grpc_trace", "ref_counted", "ref_counted_ptr", ], ) grpc_cc_library( name = "ref_counted", language = "c++", public_hdrs = ["src/core/lib/gprpp/ref_counted.h"], deps = [ "atomic", "debug_location", "gpr_base", "grpc_trace", "ref_counted_ptr", ], ) grpc_cc_library( name = "ref_counted_ptr", language = "c++", public_hdrs = ["src/core/lib/gprpp/ref_counted_ptr.h"], deps = [ "gpr_base", ], ) grpc_cc_library( name = "grpc_base_c", srcs = [ "src/core/lib/avl/avl.cc", "src/core/lib/backoff/backoff.cc", "src/core/lib/channel/channel_args.cc", "src/core/lib/channel/channel_stack.cc", "src/core/lib/channel/channel_stack_builder.cc", "src/core/lib/channel/channel_trace.cc", "src/core/lib/channel/channelz.cc", "src/core/lib/channel/channelz_registry.cc", "src/core/lib/channel/connected_channel.cc", "src/core/lib/channel/handshaker.cc", "src/core/lib/channel/handshaker_registry.cc", "src/core/lib/channel/status_util.cc", "src/core/lib/compression/compression.cc", "src/core/lib/compression/compression_args.cc", "src/core/lib/compression/compression_internal.cc", "src/core/lib/compression/message_compress.cc", "src/core/lib/compression/stream_compression.cc", "src/core/lib/compression/stream_compression_gzip.cc", "src/core/lib/compression/stream_compression_identity.cc", "src/core/lib/debug/stats.cc", "src/core/lib/debug/stats_data.cc", "src/core/lib/http/format_request.cc", "src/core/lib/http/httpcli.cc", "src/core/lib/http/parser.cc", "src/core/lib/iomgr/buffer_list.cc", "src/core/lib/iomgr/call_combiner.cc", "src/core/lib/iomgr/cfstream_handle.cc", "src/core/lib/iomgr/combiner.cc", "src/core/lib/iomgr/dualstack_socket_posix.cc", "src/core/lib/iomgr/endpoint.cc", "src/core/lib/iomgr/endpoint_cfstream.cc", "src/core/lib/iomgr/endpoint_pair_posix.cc", "src/core/lib/iomgr/endpoint_pair_uv.cc", "src/core/lib/iomgr/endpoint_pair_windows.cc", "src/core/lib/iomgr/error.cc", "src/core/lib/iomgr/error_cfstream.cc", "src/core/lib/iomgr/ev_apple.cc", "src/core/lib/iomgr/ev_epoll1_linux.cc", "src/core/lib/iomgr/ev_epollex_linux.cc", "src/core/lib/iomgr/ev_poll_posix.cc", "src/core/lib/iomgr/ev_posix.cc", "src/core/lib/iomgr/ev_windows.cc", "src/core/lib/iomgr/exec_ctx.cc", "src/core/lib/iomgr/executor.cc", "src/core/lib/iomgr/executor/mpmcqueue.cc", "src/core/lib/iomgr/executor/threadpool.cc", "src/core/lib/iomgr/fork_posix.cc", "src/core/lib/iomgr/fork_windows.cc", "src/core/lib/iomgr/gethostname_fallback.cc", "src/core/lib/iomgr/gethostname_host_name_max.cc", "src/core/lib/iomgr/gethostname_sysconf.cc", "src/core/lib/iomgr/grpc_if_nametoindex_posix.cc", "src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc", "src/core/lib/iomgr/internal_errqueue.cc", "src/core/lib/iomgr/iocp_windows.cc", "src/core/lib/iomgr/iomgr.cc", "src/core/lib/iomgr/iomgr_custom.cc", "src/core/lib/iomgr/iomgr_internal.cc", "src/core/lib/iomgr/iomgr_posix.cc", "src/core/lib/iomgr/iomgr_posix_cfstream.cc", "src/core/lib/iomgr/iomgr_uv.cc", "src/core/lib/iomgr/iomgr_windows.cc", "src/core/lib/iomgr/is_epollexclusive_available.cc", "src/core/lib/iomgr/load_file.cc", "src/core/lib/iomgr/lockfree_event.cc", "src/core/lib/iomgr/polling_entity.cc", "src/core/lib/iomgr/pollset.cc", "src/core/lib/iomgr/pollset_custom.cc", "src/core/lib/iomgr/pollset_set.cc", "src/core/lib/iomgr/pollset_set_custom.cc", "src/core/lib/iomgr/pollset_set_windows.cc", "src/core/lib/iomgr/pollset_uv.cc", "src/core/lib/iomgr/pollset_windows.cc", "src/core/lib/iomgr/resolve_address.cc", "src/core/lib/iomgr/resolve_address_custom.cc", "src/core/lib/iomgr/resolve_address_posix.cc", "src/core/lib/iomgr/resolve_address_windows.cc", "src/core/lib/iomgr/resource_quota.cc", "src/core/lib/iomgr/sockaddr_utils.cc", "src/core/lib/iomgr/socket_factory_posix.cc", "src/core/lib/iomgr/socket_mutator.cc", "src/core/lib/iomgr/socket_utils_common_posix.cc", "src/core/lib/iomgr/socket_utils_linux.cc", "src/core/lib/iomgr/socket_utils_posix.cc", "src/core/lib/iomgr/socket_utils_uv.cc", "src/core/lib/iomgr/socket_utils_windows.cc", "src/core/lib/iomgr/socket_windows.cc", "src/core/lib/iomgr/tcp_client.cc", "src/core/lib/iomgr/tcp_client_cfstream.cc", "src/core/lib/iomgr/tcp_client_custom.cc", "src/core/lib/iomgr/tcp_client_posix.cc", "src/core/lib/iomgr/tcp_client_windows.cc", "src/core/lib/iomgr/tcp_custom.cc", "src/core/lib/iomgr/tcp_posix.cc", "src/core/lib/iomgr/tcp_server.cc", "src/core/lib/iomgr/tcp_server_custom.cc", "src/core/lib/iomgr/tcp_server_posix.cc", "src/core/lib/iomgr/tcp_server_utils_posix_common.cc", "src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc", "src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc", "src/core/lib/iomgr/tcp_server_windows.cc", "src/core/lib/iomgr/tcp_uv.cc", "src/core/lib/iomgr/tcp_windows.cc", "src/core/lib/iomgr/time_averaged_stats.cc", "src/core/lib/iomgr/timer.cc", "src/core/lib/iomgr/timer_custom.cc", "src/core/lib/iomgr/timer_generic.cc", "src/core/lib/iomgr/timer_heap.cc", "src/core/lib/iomgr/timer_manager.cc", "src/core/lib/iomgr/timer_uv.cc", "src/core/lib/iomgr/udp_server.cc", "src/core/lib/iomgr/unix_sockets_posix.cc", "src/core/lib/iomgr/unix_sockets_posix_noop.cc", "src/core/lib/iomgr/wakeup_fd_eventfd.cc", "src/core/lib/iomgr/wakeup_fd_nospecial.cc", "src/core/lib/iomgr/wakeup_fd_pipe.cc", "src/core/lib/iomgr/wakeup_fd_posix.cc", "src/core/lib/iomgr/work_serializer.cc", "src/core/lib/json/json_reader.cc", "src/core/lib/json/json_writer.cc", "src/core/lib/slice/b64.cc", "src/core/lib/slice/percent_encoding.cc", "src/core/lib/slice/slice.cc", "src/core/lib/slice/slice_buffer.cc", "src/core/lib/slice/slice_intern.cc", "src/core/lib/slice/slice_string_helpers.cc", "src/core/lib/surface/api_trace.cc", "src/core/lib/surface/byte_buffer.cc", "src/core/lib/surface/byte_buffer_reader.cc", "src/core/lib/surface/call.cc", "src/core/lib/surface/call_details.cc", "src/core/lib/surface/call_log_batch.cc", "src/core/lib/surface/channel.cc", "src/core/lib/surface/channel_init.cc", "src/core/lib/surface/channel_ping.cc", "src/core/lib/surface/channel_stack_type.cc", "src/core/lib/surface/completion_queue.cc", "src/core/lib/surface/completion_queue_factory.cc", "src/core/lib/surface/event_string.cc", "src/core/lib/surface/metadata_array.cc", "src/core/lib/surface/server.cc", "src/core/lib/surface/validate_metadata.cc", "src/core/lib/surface/version.cc", "src/core/lib/transport/bdp_estimator.cc", "src/core/lib/transport/byte_stream.cc", "src/core/lib/transport/connectivity_state.cc", "src/core/lib/transport/error_utils.cc", "src/core/lib/transport/metadata.cc", "src/core/lib/transport/metadata_batch.cc", "src/core/lib/transport/pid_controller.cc", "src/core/lib/transport/static_metadata.cc", "src/core/lib/transport/status_conversion.cc", "src/core/lib/transport/status_metadata.cc", "src/core/lib/transport/timeout_encoding.cc", "src/core/lib/transport/transport.cc", "src/core/lib/transport/transport_op_string.cc", "src/core/lib/uri/uri_parser.cc", ], hdrs = [ "src/core/lib/avl/avl.h", "src/core/lib/backoff/backoff.h", "src/core/lib/channel/channel_args.h", "src/core/lib/channel/channel_stack.h", "src/core/lib/channel/channel_stack_builder.h", "src/core/lib/channel/channel_trace.h", "src/core/lib/channel/channelz.h", "src/core/lib/channel/channelz_registry.h", "src/core/lib/channel/connected_channel.h", "src/core/lib/channel/context.h", "src/core/lib/channel/handshaker.h", "src/core/lib/channel/handshaker_factory.h", "src/core/lib/channel/handshaker_registry.h", "src/core/lib/channel/status_util.h", "src/core/lib/compression/algorithm_metadata.h", "src/core/lib/compression/compression_args.h", "src/core/lib/compression/compression_internal.h", "src/core/lib/compression/message_compress.h", "src/core/lib/compression/stream_compression.h", "src/core/lib/compression/stream_compression_gzip.h", "src/core/lib/compression/stream_compression_identity.h", "src/core/lib/debug/stats.h", "src/core/lib/debug/stats_data.h", "src/core/lib/http/format_request.h", "src/core/lib/http/httpcli.h", "src/core/lib/http/parser.h", "src/core/lib/iomgr/block_annotate.h", "src/core/lib/iomgr/buffer_list.h", "src/core/lib/iomgr/call_combiner.h", "src/core/lib/iomgr/cfstream_handle.h", "src/core/lib/iomgr/closure.h", "src/core/lib/iomgr/combiner.h", "src/core/lib/iomgr/dynamic_annotations.h", "src/core/lib/iomgr/endpoint.h", "src/core/lib/iomgr/endpoint_cfstream.h", "src/core/lib/iomgr/endpoint_pair.h", "src/core/lib/iomgr/error.h", "src/core/lib/iomgr/error_cfstream.h", "src/core/lib/iomgr/error_internal.h", "src/core/lib/iomgr/ev_apple.h", "src/core/lib/iomgr/ev_epoll1_linux.h", "src/core/lib/iomgr/ev_epollex_linux.h", "src/core/lib/iomgr/ev_poll_posix.h", "src/core/lib/iomgr/ev_posix.h", "src/core/lib/iomgr/exec_ctx.h", "src/core/lib/iomgr/executor.h", "src/core/lib/iomgr/executor/mpmcqueue.h", "src/core/lib/iomgr/executor/threadpool.h", "src/core/lib/iomgr/gethostname.h", "src/core/lib/iomgr/grpc_if_nametoindex.h", "src/core/lib/iomgr/internal_errqueue.h", "src/core/lib/iomgr/iocp_windows.h", "src/core/lib/iomgr/iomgr.h", "src/core/lib/iomgr/iomgr_custom.h", "src/core/lib/iomgr/iomgr_internal.h", "src/core/lib/iomgr/iomgr_posix.h", "src/core/lib/iomgr/is_epollexclusive_available.h", "src/core/lib/iomgr/load_file.h", "src/core/lib/iomgr/lockfree_event.h", "src/core/lib/iomgr/nameser.h", "src/core/lib/iomgr/polling_entity.h", "src/core/lib/iomgr/pollset.h", "src/core/lib/iomgr/pollset_custom.h", "src/core/lib/iomgr/pollset_set.h", "src/core/lib/iomgr/pollset_set_custom.h", "src/core/lib/iomgr/pollset_set_windows.h", "src/core/lib/iomgr/pollset_uv.h", "src/core/lib/iomgr/pollset_windows.h", "src/core/lib/iomgr/port.h", "src/core/lib/iomgr/python_util.h", "src/core/lib/iomgr/resolve_address.h", "src/core/lib/iomgr/resolve_address_custom.h", "src/core/lib/iomgr/resource_quota.h", "src/core/lib/iomgr/sockaddr.h", "src/core/lib/iomgr/sockaddr_custom.h", "src/core/lib/iomgr/sockaddr_posix.h", "src/core/lib/iomgr/sockaddr_utils.h", "src/core/lib/iomgr/sockaddr_windows.h", "src/core/lib/iomgr/socket_factory_posix.h", "src/core/lib/iomgr/socket_mutator.h", "src/core/lib/iomgr/socket_utils.h", "src/core/lib/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/socket_windows.h", "src/core/lib/iomgr/sys_epoll_wrapper.h", "src/core/lib/iomgr/tcp_client.h", "src/core/lib/iomgr/tcp_client_posix.h", "src/core/lib/iomgr/tcp_custom.h", "src/core/lib/iomgr/tcp_posix.h", "src/core/lib/iomgr/tcp_server.h", "src/core/lib/iomgr/tcp_server_utils_posix.h", "src/core/lib/iomgr/tcp_windows.h", "src/core/lib/iomgr/time_averaged_stats.h", "src/core/lib/iomgr/timer.h", "src/core/lib/iomgr/timer_custom.h", "src/core/lib/iomgr/timer_generic.h", "src/core/lib/iomgr/timer_heap.h", "src/core/lib/iomgr/timer_manager.h", "src/core/lib/iomgr/udp_server.h", "src/core/lib/iomgr/unix_sockets_posix.h", "src/core/lib/iomgr/wakeup_fd_pipe.h", "src/core/lib/iomgr/wakeup_fd_posix.h", "src/core/lib/iomgr/work_serializer.h", "src/core/lib/json/json.h", "src/core/lib/slice/b64.h", "src/core/lib/slice/percent_encoding.h", "src/core/lib/slice/slice_hash_table.h", "src/core/lib/slice/slice_internal.h", "src/core/lib/slice/slice_string_helpers.h", "src/core/lib/slice/slice_utils.h", "src/core/lib/slice/slice_weak_hash_table.h", "src/core/lib/surface/api_trace.h", "src/core/lib/surface/call.h", "src/core/lib/surface/call_test_only.h", "src/core/lib/surface/channel.h", "src/core/lib/surface/channel_init.h", "src/core/lib/surface/channel_stack_type.h", "src/core/lib/surface/completion_queue.h", "src/core/lib/surface/completion_queue_factory.h", "src/core/lib/surface/event_string.h", "src/core/lib/surface/init.h", "src/core/lib/surface/lame_client.h", "src/core/lib/surface/server.h", "src/core/lib/surface/validate_metadata.h", "src/core/lib/transport/bdp_estimator.h", "src/core/lib/transport/byte_stream.h", "src/core/lib/transport/connectivity_state.h", "src/core/lib/transport/error_utils.h", "src/core/lib/transport/http2_errors.h", "src/core/lib/transport/metadata.h", "src/core/lib/transport/metadata_batch.h", "src/core/lib/transport/pid_controller.h", "src/core/lib/transport/static_metadata.h", "src/core/lib/transport/status_conversion.h", "src/core/lib/transport/status_metadata.h", "src/core/lib/transport/timeout_encoding.h", "src/core/lib/transport/transport.h", "src/core/lib/transport/transport_impl.h", "src/core/lib/uri/uri_parser.h", ], external_deps = [ "madler_zlib", "absl/container:inlined_vector", "absl/types:optional", ], language = "c++", public_hdrs = GRPC_PUBLIC_HDRS, deps = [ "eventmanager_libuv", "gpr_base", "grpc_codegen", "grpc_trace", "orphanable", "ref_counted", "ref_counted_ptr", ], ) grpc_cc_library( name = "grpc_base", srcs = [ "src/core/lib/surface/lame_client.cc", ], language = "c++", deps = [ "atomic", "grpc_base_c", ], ) grpc_cc_library( name = "grpc_common", language = "c++", deps = [ "grpc_base", # standard plugins "census", "grpc_deadline_filter", "grpc_client_authority_filter", "grpc_lb_policy_pick_first", "grpc_lb_policy_priority", "grpc_lb_policy_round_robin", "grpc_lb_policy_weighted_target", "grpc_client_idle_filter", "grpc_max_age_filter", "grpc_message_size_filter", "grpc_resolver_dns_ares", "grpc_resolver_fake", "grpc_resolver_dns_native", "grpc_resolver_sockaddr", "grpc_transport_chttp2_client_insecure", "grpc_transport_chttp2_server_insecure", "grpc_transport_inproc", "grpc_workaround_cronet_compression_filter", "grpc_server_backward_compatibility", ], ) grpc_cc_library( name = "grpc_client_channel", srcs = [ "src/core/ext/filters/client_channel/backend_metric.cc", "src/core/ext/filters/client_channel/backup_poller.cc", "src/core/ext/filters/client_channel/channel_connectivity.cc", "src/core/ext/filters/client_channel/client_channel.cc", "src/core/ext/filters/client_channel/client_channel_channelz.cc", "src/core/ext/filters/client_channel/client_channel_factory.cc", "src/core/ext/filters/client_channel/client_channel_plugin.cc", "src/core/ext/filters/client_channel/global_subchannel_pool.cc", "src/core/ext/filters/client_channel/health/health_check_client.cc", "src/core/ext/filters/client_channel/http_connect_handshaker.cc", "src/core/ext/filters/client_channel/http_proxy.cc", "src/core/ext/filters/client_channel/lb_policy.cc", "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc", "src/core/ext/filters/client_channel/lb_policy_registry.cc", "src/core/ext/filters/client_channel/local_subchannel_pool.cc", "src/core/ext/filters/client_channel/parse_address.cc", "src/core/ext/filters/client_channel/proxy_mapper_registry.cc", "src/core/ext/filters/client_channel/resolver.cc", "src/core/ext/filters/client_channel/resolver_registry.cc", "src/core/ext/filters/client_channel/resolver_result_parsing.cc", "src/core/ext/filters/client_channel/resolving_lb_policy.cc", "src/core/ext/filters/client_channel/retry_throttle.cc", "src/core/ext/filters/client_channel/server_address.cc", "src/core/ext/filters/client_channel/service_config.cc", "src/core/ext/filters/client_channel/service_config_parser.cc", "src/core/ext/filters/client_channel/subchannel.cc", "src/core/ext/filters/client_channel/subchannel_pool_interface.cc", ], hdrs = [ "src/core/ext/filters/client_channel/backend_metric.h", "src/core/ext/filters/client_channel/backup_poller.h", "src/core/ext/filters/client_channel/client_channel.h", "src/core/ext/filters/client_channel/client_channel_channelz.h", "src/core/ext/filters/client_channel/client_channel_factory.h", "src/core/ext/filters/client_channel/connector.h", "src/core/ext/filters/client_channel/global_subchannel_pool.h", "src/core/ext/filters/client_channel/health/health_check_client.h", "src/core/ext/filters/client_channel/http_connect_handshaker.h", "src/core/ext/filters/client_channel/http_proxy.h", "src/core/ext/filters/client_channel/lb_policy.h", "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h", "src/core/ext/filters/client_channel/lb_policy_factory.h", "src/core/ext/filters/client_channel/lb_policy_registry.h", "src/core/ext/filters/client_channel/local_subchannel_pool.h", "src/core/ext/filters/client_channel/parse_address.h", "src/core/ext/filters/client_channel/proxy_mapper.h", "src/core/ext/filters/client_channel/proxy_mapper_registry.h", "src/core/ext/filters/client_channel/resolver.h", "src/core/ext/filters/client_channel/resolver_factory.h", "src/core/ext/filters/client_channel/resolver_registry.h", "src/core/ext/filters/client_channel/resolver_result_parsing.h", "src/core/ext/filters/client_channel/resolving_lb_policy.h", "src/core/ext/filters/client_channel/retry_throttle.h", "src/core/ext/filters/client_channel/server_address.h", "src/core/ext/filters/client_channel/service_config.h", "src/core/ext/filters/client_channel/service_config_call_data.h", "src/core/ext/filters/client_channel/service_config_parser.h", "src/core/ext/filters/client_channel/subchannel.h", "src/core/ext/filters/client_channel/subchannel_interface.h", "src/core/ext/filters/client_channel/subchannel_pool_interface.h", ], external_deps = [ "absl/container:inlined_vector", ], language = "c++", deps = [ "gpr_base", "grpc_base", "grpc_client_authority_filter", "grpc_deadline_filter", "grpc_health_upb", "orphanable", "ref_counted", "ref_counted_ptr", "udpa_orca_upb", ], ) grpc_cc_library( name = "grpc_client_idle_filter", srcs = [ "src/core/ext/filters/client_idle/client_idle_filter.cc", ], language = "c++", deps = [ "grpc_base", ], ) grpc_cc_library( name = "grpc_max_age_filter", srcs = [ "src/core/ext/filters/max_age/max_age_filter.cc", ], hdrs = [ "src/core/ext/filters/max_age/max_age_filter.h", ], language = "c++", deps = [ "grpc_base", ], ) grpc_cc_library( name = "grpc_deadline_filter", srcs = [ "src/core/ext/filters/deadline/deadline_filter.cc", ], hdrs = [ "src/core/ext/filters/deadline/deadline_filter.h", ], language = "c++", deps = [ "grpc_base", ], ) grpc_cc_library( name = "grpc_client_authority_filter", srcs = [ "src/core/ext/filters/http/client_authority_filter.cc", ], hdrs = [ "src/core/ext/filters/http/client_authority_filter.h", ], language = "c++", deps = [ "grpc_base", ], ) grpc_cc_library( name = "grpc_message_size_filter", srcs = [ "src/core/ext/filters/message_size/message_size_filter.cc", ], hdrs = [ "src/core/ext/filters/message_size/message_size_filter.h", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", ], ) grpc_cc_library( name = "grpc_http_filters", srcs = [ "src/core/ext/filters/http/client/http_client_filter.cc", "src/core/ext/filters/http/http_filters_plugin.cc", "src/core/ext/filters/http/message_compress/message_compress_filter.cc", "src/core/ext/filters/http/message_compress/message_decompress_filter.cc", "src/core/ext/filters/http/server/http_server_filter.cc", ], hdrs = [ "src/core/ext/filters/http/client/http_client_filter.h", "src/core/ext/filters/http/message_compress/message_compress_filter.h", "src/core/ext/filters/http/message_compress/message_decompress_filter.h", "src/core/ext/filters/http/server/http_server_filter.h", ], language = "c++", deps = [ "grpc_base", ], ) grpc_cc_library( name = "grpc_workaround_cronet_compression_filter", srcs = [ "src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc", ], hdrs = [ "src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h", ], language = "c++", deps = [ "grpc_base", "grpc_server_backward_compatibility", ], ) grpc_cc_library( name = "grpc_codegen", language = "c++", public_hdrs = [ "include/grpc/impl/codegen/byte_buffer.h", "include/grpc/impl/codegen/byte_buffer_reader.h", "include/grpc/impl/codegen/compression_types.h", "include/grpc/impl/codegen/connectivity_state.h", "include/grpc/impl/codegen/grpc_types.h", "include/grpc/impl/codegen/propagation_bits.h", "include/grpc/impl/codegen/status.h", "include/grpc/impl/codegen/slice.h", ], deps = [ "gpr_codegen", ], ) grpc_cc_library( name = "grpc_grpclb_balancer_addresses", srcs = [ "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc", ], hdrs = [ "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", ], ) grpc_cc_library( name = "grpc_lb_policy_grpclb", srcs = [ "src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc", "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc", "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.cc", "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc", "src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc", ], hdrs = [ "src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h", "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h", "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h", "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h", "src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", "grpc_grpclb_balancer_addresses", "grpc_lb_upb", "grpc_resolver_fake", "grpc_transport_chttp2_client_insecure", ], ) grpc_cc_library( name = "grpc_lb_policy_grpclb_secure", srcs = [ "src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc", "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc", "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc", "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc", "src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc", ], hdrs = [ "src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h", "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h", "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h", "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h", "src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", "grpc_grpclb_balancer_addresses", "grpc_lb_upb", "grpc_resolver_fake", "grpc_secure", "grpc_transport_chttp2_client_secure", ], ) grpc_cc_library( name = "grpc_xds_client", srcs = [ "src/core/ext/filters/client_channel/xds/xds_api.cc", "src/core/ext/filters/client_channel/xds/xds_bootstrap.cc", "src/core/ext/filters/client_channel/xds/xds_channel.cc", "src/core/ext/filters/client_channel/xds/xds_client.cc", "src/core/ext/filters/client_channel/xds/xds_client_stats.cc", ], hdrs = [ "src/core/ext/filters/client_channel/xds/xds_api.h", "src/core/ext/filters/client_channel/xds/xds_bootstrap.h", "src/core/ext/filters/client_channel/xds/xds_channel.h", "src/core/ext/filters/client_channel/xds/xds_channel_args.h", "src/core/ext/filters/client_channel/xds/xds_client.h", "src/core/ext/filters/client_channel/xds/xds_client_stats.h", ], language = "c++", deps = [ "envoy_ads_upb", "grpc_base", "grpc_client_channel", ], ) grpc_cc_library( name = "grpc_xds_client_secure", srcs = [ "src/core/ext/filters/client_channel/xds/xds_api.cc", "src/core/ext/filters/client_channel/xds/xds_bootstrap.cc", "src/core/ext/filters/client_channel/xds/xds_channel_secure.cc", "src/core/ext/filters/client_channel/xds/xds_client.cc", "src/core/ext/filters/client_channel/xds/xds_client_stats.cc", ], hdrs = [ "src/core/ext/filters/client_channel/xds/xds_api.h", "src/core/ext/filters/client_channel/xds/xds_bootstrap.h", "src/core/ext/filters/client_channel/xds/xds_channel.h", "src/core/ext/filters/client_channel/xds/xds_channel_args.h", "src/core/ext/filters/client_channel/xds/xds_client.h", "src/core/ext/filters/client_channel/xds/xds_client_stats.h", ], language = "c++", deps = [ "envoy_ads_upb", "grpc_base", "grpc_client_channel", "grpc_secure", ], ) grpc_cc_library( name = "grpc_lb_policy_cds", srcs = [ "src/core/ext/filters/client_channel/lb_policy/xds/cds.cc", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", "grpc_xds_client", ], ) grpc_cc_library( name = "grpc_lb_policy_cds_secure", srcs = [ "src/core/ext/filters/client_channel/lb_policy/xds/cds.cc", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", "grpc_xds_client_secure", ], ) grpc_cc_library( name = "grpc_lb_policy_eds", srcs = [ "src/core/ext/filters/client_channel/lb_policy/xds/eds.cc", ], hdrs = [ "src/core/ext/filters/client_channel/lb_policy/xds/xds.h", ], external_deps = [ "absl/strings", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", "grpc_lb_address_filtering", "grpc_xds_client", ], ) grpc_cc_library( name = "grpc_lb_policy_eds_secure", srcs = [ "src/core/ext/filters/client_channel/lb_policy/xds/eds.cc", ], hdrs = [ "src/core/ext/filters/client_channel/lb_policy/xds/xds.h", ], external_deps = [ "absl/strings", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", "grpc_lb_address_filtering", "grpc_xds_client_secure", ], ) grpc_cc_library( name = "grpc_lb_policy_lrs", srcs = [ "src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", "grpc_xds_client", ], ) grpc_cc_library( name = "grpc_lb_policy_lrs_secure", srcs = [ "src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", "grpc_xds_client_secure", ], ) grpc_cc_library( name = "grpc_lb_policy_xds_routing", srcs = [ "src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", ], ) grpc_cc_library( name = "grpc_lb_address_filtering", srcs = [ "src/core/ext/filters/client_channel/lb_policy/address_filtering.cc", ], hdrs = [ "src/core/ext/filters/client_channel/lb_policy/address_filtering.h", ], external_deps = [ "absl/strings", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", ], ) grpc_cc_library( name = "grpc_lb_subchannel_list", hdrs = [ "src/core/ext/filters/client_channel/lb_policy/subchannel_list.h", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", ], ) grpc_cc_library( name = "grpc_lb_policy_pick_first", srcs = [ "src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", "grpc_lb_subchannel_list", ], ) grpc_cc_library( name = "grpc_lb_policy_round_robin", srcs = [ "src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", "grpc_lb_subchannel_list", ], ) grpc_cc_library( name = "grpc_lb_policy_priority", srcs = [ "src/core/ext/filters/client_channel/lb_policy/priority/priority.cc", ], external_deps = [ "absl/strings", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", "grpc_lb_address_filtering", ], ) grpc_cc_library( name = "grpc_lb_policy_weighted_target", srcs = [ "src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", "grpc_lb_address_filtering", ], ) grpc_cc_library( name = "lb_server_load_reporting_filter", srcs = [ "src/core/ext/filters/load_reporting/server_load_reporting_filter.cc", ], hdrs = [ "src/core/ext/filters/load_reporting/registered_opencensus_objects.h", "src/core/ext/filters/load_reporting/server_load_reporting_filter.h", "src/cpp/server/load_reporter/constants.h", ], external_deps = [ "opencensus-stats", ], language = "c++", deps = [ "grpc++_base", "grpc_secure", ], alwayslink = 1, ) grpc_cc_library( name = "lb_load_data_store", srcs = [ "src/cpp/server/load_reporter/load_data_store.cc", ], hdrs = [ "src/cpp/server/load_reporter/constants.h", "src/cpp/server/load_reporter/load_data_store.h", ], language = "c++", deps = [ "grpc++", ], ) grpc_cc_library( name = "lb_server_load_reporting_service_server_builder_plugin", srcs = [ "src/cpp/server/load_reporter/load_reporting_service_server_builder_plugin.cc", ], hdrs = [ "src/cpp/server/load_reporter/load_reporting_service_server_builder_plugin.h", ], language = "c++", deps = [ "lb_load_reporter_service", ], ) grpc_cc_library( name = "grpcpp_server_load_reporting", srcs = [ "src/cpp/server/load_reporter/load_reporting_service_server_builder_option.cc", "src/cpp/server/load_reporter/util.cc", ], language = "c++", public_hdrs = [ "include/grpcpp/ext/server_load_reporting.h", "include/grpcpp/ext/server_load_reporting_impl.h", ], deps = [ "lb_server_load_reporting_filter", "lb_server_load_reporting_service_server_builder_plugin", ], ) grpc_cc_library( name = "lb_load_reporter_service", srcs = [ "src/cpp/server/load_reporter/load_reporter_async_service_impl.cc", ], hdrs = [ "src/cpp/server/load_reporter/load_reporter_async_service_impl.h", ], language = "c++", deps = [ "lb_load_reporter", ], ) grpc_cc_library( name = "lb_get_cpu_stats", srcs = [ "src/cpp/server/load_reporter/get_cpu_stats_linux.cc", "src/cpp/server/load_reporter/get_cpu_stats_macos.cc", "src/cpp/server/load_reporter/get_cpu_stats_unsupported.cc", "src/cpp/server/load_reporter/get_cpu_stats_windows.cc", ], hdrs = [ "src/cpp/server/load_reporter/get_cpu_stats.h", ], language = "c++", deps = [ "grpc++", ], ) grpc_cc_library( name = "lb_load_reporter", srcs = [ "src/cpp/server/load_reporter/load_reporter.cc", ], hdrs = [ "src/cpp/server/load_reporter/constants.h", "src/cpp/server/load_reporter/load_reporter.h", ], external_deps = [ "opencensus-stats", ], language = "c++", deps = [ "lb_get_cpu_stats", "lb_load_data_store", "//src/proto/grpc/lb/v1:load_reporter_proto", ], ) grpc_cc_library( name = "grpc_resolver_dns_selection", srcs = [ "src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc", ], hdrs = [ "src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h", ], language = "c++", deps = [ "grpc_base", ], ) grpc_cc_library( name = "grpc_resolver_dns_native", srcs = [ "src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", "grpc_resolver_dns_selection", ], ) grpc_cc_library( name = "grpc_resolver_dns_ares", srcs = [ "src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc", "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc", "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc", "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc", "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc", "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc", "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc", "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc", "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc", "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc", ], hdrs = [ "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h", "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h", ], external_deps = [ "cares", "address_sorting", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", "grpc_grpclb_balancer_addresses", "grpc_resolver_dns_selection", ], ) grpc_cc_library( name = "grpc_resolver_sockaddr", srcs = [ "src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", ], ) grpc_cc_library( name = "grpc_resolver_fake", srcs = ["src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc"], hdrs = ["src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h"], language = "c++", visibility = ["//test:__subpackages__"], deps = [ "grpc_base", "grpc_client_channel", ], ) grpc_cc_library( name = "grpc_resolver_xds", srcs = [ "src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", "grpc_xds_client", ], ) grpc_cc_library( name = "grpc_resolver_xds_secure", srcs = [ "src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", "grpc_xds_client_secure", ], ) grpc_cc_library( name = "grpc_secure", srcs = [ "src/core/lib/http/httpcli_security_connector.cc", "src/core/lib/security/context/security_context.cc", "src/core/lib/security/credentials/alts/alts_credentials.cc", "src/core/lib/security/credentials/composite/composite_credentials.cc", "src/core/lib/security/credentials/credentials.cc", "src/core/lib/security/credentials/credentials_metadata.cc", "src/core/lib/security/credentials/fake/fake_credentials.cc", "src/core/lib/security/credentials/google_default/credentials_generic.cc", "src/core/lib/security/credentials/google_default/google_default_credentials.cc", "src/core/lib/security/credentials/iam/iam_credentials.cc", "src/core/lib/security/credentials/jwt/json_token.cc", "src/core/lib/security/credentials/jwt/jwt_credentials.cc", "src/core/lib/security/credentials/jwt/jwt_verifier.cc", "src/core/lib/security/credentials/local/local_credentials.cc", "src/core/lib/security/credentials/oauth2/oauth2_credentials.cc", "src/core/lib/security/credentials/plugin/plugin_credentials.cc", "src/core/lib/security/credentials/ssl/ssl_credentials.cc", "src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc", "src/core/lib/security/credentials/tls/tls_credentials.cc", "src/core/lib/security/security_connector/alts/alts_security_connector.cc", "src/core/lib/security/security_connector/fake/fake_security_connector.cc", "src/core/lib/security/security_connector/load_system_roots_fallback.cc", "src/core/lib/security/security_connector/load_system_roots_linux.cc", "src/core/lib/security/security_connector/local/local_security_connector.cc", "src/core/lib/security/security_connector/security_connector.cc", "src/core/lib/security/security_connector/ssl/ssl_security_connector.cc", "src/core/lib/security/security_connector/ssl_utils.cc", "src/core/lib/security/security_connector/ssl_utils_config.cc", "src/core/lib/security/security_connector/tls/tls_security_connector.cc", "src/core/lib/security/transport/client_auth_filter.cc", "src/core/lib/security/transport/secure_endpoint.cc", "src/core/lib/security/transport/security_handshaker.cc", "src/core/lib/security/transport/server_auth_filter.cc", "src/core/lib/security/transport/target_authority_table.cc", "src/core/lib/security/transport/tsi_error.cc", "src/core/lib/security/util/json_util.cc", "src/core/lib/surface/init_secure.cc", ], hdrs = [ "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h", "src/core/ext/filters/client_channel/xds/xds_channel_args.h", "src/core/lib/security/context/security_context.h", "src/core/lib/security/credentials/alts/alts_credentials.h", "src/core/lib/security/credentials/composite/composite_credentials.h", "src/core/lib/security/credentials/credentials.h", "src/core/lib/security/credentials/fake/fake_credentials.h", "src/core/lib/security/credentials/google_default/google_default_credentials.h", "src/core/lib/security/credentials/iam/iam_credentials.h", "src/core/lib/security/credentials/jwt/json_token.h", "src/core/lib/security/credentials/jwt/jwt_credentials.h", "src/core/lib/security/credentials/jwt/jwt_verifier.h", "src/core/lib/security/credentials/local/local_credentials.h", "src/core/lib/security/credentials/oauth2/oauth2_credentials.h", "src/core/lib/security/credentials/plugin/plugin_credentials.h", "src/core/lib/security/credentials/ssl/ssl_credentials.h", "src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h", "src/core/lib/security/credentials/tls/tls_credentials.h", "src/core/lib/security/security_connector/alts/alts_security_connector.h", "src/core/lib/security/security_connector/fake/fake_security_connector.h", "src/core/lib/security/security_connector/load_system_roots.h", "src/core/lib/security/security_connector/load_system_roots_linux.h", "src/core/lib/security/security_connector/local/local_security_connector.h", "src/core/lib/security/security_connector/security_connector.h", "src/core/lib/security/security_connector/ssl/ssl_security_connector.h", "src/core/lib/security/security_connector/ssl_utils.h", "src/core/lib/security/security_connector/ssl_utils_config.h", "src/core/lib/security/security_connector/tls/tls_security_connector.h", "src/core/lib/security/transport/auth_filters.h", "src/core/lib/security/transport/secure_endpoint.h", "src/core/lib/security/transport/security_handshaker.h", "src/core/lib/security/transport/target_authority_table.h", "src/core/lib/security/transport/tsi_error.h", "src/core/lib/security/util/json_util.h", ], language = "c++", public_hdrs = GRPC_SECURE_PUBLIC_HDRS, deps = [ "alts_util", "grpc_base", "grpc_transport_chttp2_alpn", "tsi", ], ) grpc_cc_library( name = "grpc_transport_chttp2", srcs = [ "src/core/ext/transport/chttp2/transport/bin_decoder.cc", "src/core/ext/transport/chttp2/transport/bin_encoder.cc", "src/core/ext/transport/chttp2/transport/chttp2_plugin.cc", "src/core/ext/transport/chttp2/transport/chttp2_transport.cc", "src/core/ext/transport/chttp2/transport/context_list.cc", "src/core/ext/transport/chttp2/transport/flow_control.cc", "src/core/ext/transport/chttp2/transport/frame_data.cc", "src/core/ext/transport/chttp2/transport/frame_goaway.cc", "src/core/ext/transport/chttp2/transport/frame_ping.cc", "src/core/ext/transport/chttp2/transport/frame_rst_stream.cc", "src/core/ext/transport/chttp2/transport/frame_settings.cc", "src/core/ext/transport/chttp2/transport/frame_window_update.cc", "src/core/ext/transport/chttp2/transport/hpack_encoder.cc", "src/core/ext/transport/chttp2/transport/hpack_parser.cc", "src/core/ext/transport/chttp2/transport/hpack_table.cc", "src/core/ext/transport/chttp2/transport/http2_settings.cc", "src/core/ext/transport/chttp2/transport/huffsyms.cc", "src/core/ext/transport/chttp2/transport/incoming_metadata.cc", "src/core/ext/transport/chttp2/transport/parsing.cc", "src/core/ext/transport/chttp2/transport/stream_lists.cc", "src/core/ext/transport/chttp2/transport/stream_map.cc", "src/core/ext/transport/chttp2/transport/varint.cc", "src/core/ext/transport/chttp2/transport/writing.cc", ], hdrs = [ "src/core/ext/transport/chttp2/transport/bin_decoder.h", "src/core/ext/transport/chttp2/transport/bin_encoder.h", "src/core/ext/transport/chttp2/transport/chttp2_transport.h", "src/core/ext/transport/chttp2/transport/context_list.h", "src/core/ext/transport/chttp2/transport/flow_control.h", "src/core/ext/transport/chttp2/transport/frame.h", "src/core/ext/transport/chttp2/transport/frame_data.h", "src/core/ext/transport/chttp2/transport/frame_goaway.h", "src/core/ext/transport/chttp2/transport/frame_ping.h", "src/core/ext/transport/chttp2/transport/frame_rst_stream.h", "src/core/ext/transport/chttp2/transport/frame_settings.h", "src/core/ext/transport/chttp2/transport/frame_window_update.h", "src/core/ext/transport/chttp2/transport/hpack_encoder.h", "src/core/ext/transport/chttp2/transport/hpack_parser.h", "src/core/ext/transport/chttp2/transport/hpack_table.h", "src/core/ext/transport/chttp2/transport/http2_settings.h", "src/core/ext/transport/chttp2/transport/huffsyms.h", "src/core/ext/transport/chttp2/transport/incoming_metadata.h", "src/core/ext/transport/chttp2/transport/internal.h", "src/core/ext/transport/chttp2/transport/stream_map.h", "src/core/ext/transport/chttp2/transport/varint.h", ], language = "c++", deps = [ "gpr_base", "grpc_base", "grpc_http_filters", "grpc_transport_chttp2_alpn", ], ) grpc_cc_library( name = "grpc_transport_chttp2_alpn", srcs = [ "src/core/ext/transport/chttp2/alpn/alpn.cc", ], hdrs = [ "src/core/ext/transport/chttp2/alpn/alpn.h", ], language = "c++", deps = [ "gpr", ], ) grpc_cc_library( name = "grpc_transport_chttp2_client_connector", srcs = [ "src/core/ext/transport/chttp2/client/authority.cc", "src/core/ext/transport/chttp2/client/chttp2_connector.cc", ], hdrs = [ "src/core/ext/transport/chttp2/client/authority.h", "src/core/ext/transport/chttp2/client/chttp2_connector.h", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", "grpc_transport_chttp2", ], ) grpc_cc_library( name = "grpc_transport_chttp2_client_insecure", srcs = [ "src/core/ext/transport/chttp2/client/insecure/channel_create.cc", "src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", "grpc_transport_chttp2", "grpc_transport_chttp2_client_connector", ], ) grpc_cc_library( name = "grpc_transport_chttp2_client_secure", srcs = [ "src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc", ], language = "c++", deps = [ "grpc_base", "grpc_client_channel", "grpc_secure", "grpc_transport_chttp2", "grpc_transport_chttp2_client_connector", ], ) grpc_cc_library( name = "grpc_transport_chttp2_server", srcs = [ "src/core/ext/transport/chttp2/server/chttp2_server.cc", ], hdrs = [ "src/core/ext/transport/chttp2/server/chttp2_server.h", ], language = "c++", deps = [ "grpc_base", "grpc_transport_chttp2", ], ) grpc_cc_library( name = "grpc_transport_chttp2_server_insecure", srcs = [ "src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc", "src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc", ], language = "c++", deps = [ "grpc_base", "grpc_transport_chttp2", "grpc_transport_chttp2_server", ], ) grpc_cc_library( name = "grpc_transport_chttp2_server_secure", srcs = [ "src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc", ], language = "c++", deps = [ "grpc_base", "grpc_secure", "grpc_transport_chttp2", "grpc_transport_chttp2_server", ], ) grpc_cc_library( name = "grpc_transport_inproc", srcs = [ "src/core/ext/transport/inproc/inproc_plugin.cc", "src/core/ext/transport/inproc/inproc_transport.cc", ], hdrs = [ "src/core/ext/transport/inproc/inproc_transport.h", ], language = "c++", deps = [ "grpc_base", ], ) grpc_cc_library( name = "tsi_interface", srcs = [ "src/core/tsi/transport_security.cc", ], hdrs = [ "src/core/tsi/transport_security.h", "src/core/tsi/transport_security_interface.h", ], language = "c++", deps = [ "gpr", "grpc_trace", ], ) grpc_cc_library( name = "alts_frame_protector", srcs = [ "src/core/tsi/alts/crypt/aes_gcm.cc", "src/core/tsi/alts/crypt/gsec.cc", "src/core/tsi/alts/frame_protector/alts_counter.cc", "src/core/tsi/alts/frame_protector/alts_crypter.cc", "src/core/tsi/alts/frame_protector/alts_frame_protector.cc", "src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc", "src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc", "src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc", "src/core/tsi/alts/frame_protector/frame_handler.cc", "src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc", "src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc", "src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc", "src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc", "src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc", ], hdrs = [ "src/core/tsi/alts/crypt/gsec.h", "src/core/tsi/alts/frame_protector/alts_counter.h", "src/core/tsi/alts/frame_protector/alts_crypter.h", "src/core/tsi/alts/frame_protector/alts_frame_protector.h", "src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h", "src/core/tsi/alts/frame_protector/frame_handler.h", "src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h", "src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h", "src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h", "src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h", "src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h", "src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h", "src/core/tsi/transport_security_grpc.h", ], external_deps = [ "libssl", ], language = "c++", deps = [ "gpr", "grpc_base", "tsi_interface", ], ) grpc_cc_library( name = "alts_util", srcs = [ "src/core/lib/security/credentials/alts/check_gcp_environment.cc", "src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc", "src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc", "src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc", "src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc", "src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc", "src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc", "src/core/tsi/alts/handshaker/transport_security_common_api.cc", ], hdrs = [ "src/core/lib/security/credentials/alts/check_gcp_environment.h", "src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h", "src/core/tsi/alts/handshaker/transport_security_common_api.h", ], language = "c++", public_hdrs = GRPC_SECURE_PUBLIC_HDRS, deps = [ "alts_upb", "gpr", "grpc_base", ], ) grpc_cc_library( name = "tsi", srcs = [ "src/core/tsi/alts/handshaker/alts_handshaker_client.cc", "src/core/tsi/alts/handshaker/alts_shared_resource.cc", "src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc", "src/core/tsi/alts/handshaker/alts_tsi_utils.cc", "src/core/tsi/fake_transport_security.cc", "src/core/tsi/local_transport_security.cc", "src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc", "src/core/tsi/ssl/session_cache/ssl_session_cache.cc", "src/core/tsi/ssl/session_cache/ssl_session_openssl.cc", "src/core/tsi/ssl_transport_security.cc", "src/core/tsi/transport_security_grpc.cc", ], hdrs = [ "src/core/tsi/alts/handshaker/alts_handshaker_client.h", "src/core/tsi/alts/handshaker/alts_shared_resource.h", "src/core/tsi/alts/handshaker/alts_tsi_handshaker.h", "src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h", "src/core/tsi/alts/handshaker/alts_tsi_utils.h", "src/core/tsi/fake_transport_security.h", "src/core/tsi/local_transport_security.h", "src/core/tsi/ssl/session_cache/ssl_session.h", "src/core/tsi/ssl/session_cache/ssl_session_cache.h", "src/core/tsi/ssl_transport_security.h", "src/core/tsi/ssl_types.h", "src/core/tsi/transport_security_grpc.h", ], external_deps = [ "libssl", ], language = "c++", deps = [ "alts_frame_protector", "alts_util", "gpr", "grpc_base", "grpc_transport_chttp2_client_insecure", "tsi_interface", ], ) grpc_cc_library( name = "grpc++_base", srcs = GRPCXX_SRCS, hdrs = GRPCXX_HDRS, language = "c++", public_hdrs = GRPCXX_PUBLIC_HDRS, deps = [ "grpc", "grpc++_codegen_base", "grpc++_codegen_base_src", "grpc_health_upb", ], ) grpc_cc_library( name = "grpc++_base_unsecure", srcs = GRPCXX_SRCS, hdrs = GRPCXX_HDRS, language = "c++", public_hdrs = GRPCXX_PUBLIC_HDRS, deps = [ "grpc++_codegen_base", "grpc++_codegen_base_src", "grpc_health_upb", "grpc_unsecure", ], ) grpc_cc_library( name = "grpc++_codegen_base", language = "c++", public_hdrs = [ "include/grpc++/impl/codegen/async_stream.h", "include/grpc++/impl/codegen/async_unary_call.h", "include/grpc++/impl/codegen/byte_buffer.h", "include/grpc++/impl/codegen/call.h", "include/grpc++/impl/codegen/call_hook.h", "include/grpc++/impl/codegen/channel_interface.h", "include/grpc++/impl/codegen/client_context.h", "include/grpc++/impl/codegen/client_unary_call.h", "include/grpc++/impl/codegen/completion_queue.h", "include/grpc++/impl/codegen/completion_queue_tag.h", "include/grpc++/impl/codegen/config.h", "include/grpc++/impl/codegen/core_codegen_interface.h", "include/grpc++/impl/codegen/create_auth_context.h", "include/grpc++/impl/codegen/grpc_library.h", "include/grpc++/impl/codegen/metadata_map.h", "include/grpc++/impl/codegen/method_handler_impl.h", "include/grpc++/impl/codegen/rpc_method.h", "include/grpc++/impl/codegen/rpc_service_method.h", "include/grpc++/impl/codegen/security/auth_context.h", "include/grpc++/impl/codegen/serialization_traits.h", "include/grpc++/impl/codegen/server_context.h", "include/grpc++/impl/codegen/server_interface.h", "include/grpc++/impl/codegen/service_type.h", "include/grpc++/impl/codegen/slice.h", "include/grpc++/impl/codegen/status.h", "include/grpc++/impl/codegen/status_code_enum.h", "include/grpc++/impl/codegen/string_ref.h", "include/grpc++/impl/codegen/stub_options.h", "include/grpc++/impl/codegen/sync_stream.h", "include/grpc++/impl/codegen/time.h", "include/grpcpp/impl/codegen/async_generic_service.h", "include/grpcpp/impl/codegen/async_stream.h", "include/grpcpp/impl/codegen/async_stream_impl.h", "include/grpcpp/impl/codegen/async_unary_call.h", "include/grpcpp/impl/codegen/async_unary_call_impl.h", "include/grpcpp/impl/codegen/byte_buffer.h", "include/grpcpp/impl/codegen/call.h", "include/grpcpp/impl/codegen/call_hook.h", "include/grpcpp/impl/codegen/call_op_set.h", "include/grpcpp/impl/codegen/call_op_set_interface.h", "include/grpcpp/impl/codegen/callback_common.h", "include/grpcpp/impl/codegen/channel_interface.h", "include/grpcpp/impl/codegen/client_callback.h", "include/grpcpp/impl/codegen/client_callback_impl.h", "include/grpcpp/impl/codegen/client_context.h", "include/grpcpp/impl/codegen/client_context_impl.h", "include/grpcpp/impl/codegen/client_interceptor.h", "include/grpcpp/impl/codegen/client_unary_call.h", "include/grpcpp/impl/codegen/completion_queue.h", "include/grpcpp/impl/codegen/completion_queue_impl.h", "include/grpcpp/impl/codegen/completion_queue_tag.h", "include/grpcpp/impl/codegen/config.h", "include/grpcpp/impl/codegen/core_codegen_interface.h", "include/grpcpp/impl/codegen/create_auth_context.h", "include/grpcpp/impl/codegen/delegating_channel.h", "include/grpcpp/impl/codegen/grpc_library.h", "include/grpcpp/impl/codegen/intercepted_channel.h", "include/grpcpp/impl/codegen/interceptor.h", "include/grpcpp/impl/codegen/interceptor_common.h", "include/grpcpp/impl/codegen/message_allocator.h", "include/grpcpp/impl/codegen/metadata_map.h", "include/grpcpp/impl/codegen/method_handler.h", "include/grpcpp/impl/codegen/method_handler_impl.h", "include/grpcpp/impl/codegen/rpc_method.h", "include/grpcpp/impl/codegen/rpc_service_method.h", "include/grpcpp/impl/codegen/security/auth_context.h", "include/grpcpp/impl/codegen/serialization_traits.h", "include/grpcpp/impl/codegen/server_callback.h", "include/grpcpp/impl/codegen/server_callback_handlers.h", "include/grpcpp/impl/codegen/server_callback_impl.h", "include/grpcpp/impl/codegen/server_context.h", "include/grpcpp/impl/codegen/server_context_impl.h", "include/grpcpp/impl/codegen/server_interceptor.h", "include/grpcpp/impl/codegen/server_interface.h", "include/grpcpp/impl/codegen/service_type.h", "include/grpcpp/impl/codegen/slice.h", "include/grpcpp/impl/codegen/status.h", "include/grpcpp/impl/codegen/status_code_enum.h", "include/grpcpp/impl/codegen/string_ref.h", "include/grpcpp/impl/codegen/stub_options.h", "include/grpcpp/impl/codegen/sync_stream.h", "include/grpcpp/impl/codegen/sync_stream_impl.h", "include/grpcpp/impl/codegen/time.h", ], deps = [ "grpc++_internal_hdrs_only", "grpc_codegen", ], ) grpc_cc_library( name = "grpc++_codegen_base_src", srcs = [ "src/cpp/codegen/codegen_init.cc", ], language = "c++", deps = [ "grpc++_codegen_base", ], ) grpc_cc_library( name = "grpc++_codegen_proto", language = "c++", public_hdrs = [ "include/grpc++/impl/codegen/proto_utils.h", "include/grpcpp/impl/codegen/proto_buffer_reader.h", "include/grpcpp/impl/codegen/proto_buffer_writer.h", "include/grpcpp/impl/codegen/proto_utils.h", ], deps = [ "grpc++_codegen_base", "grpc++_config_proto", ], ) grpc_cc_library( name = "grpc++_config_proto", external_deps = [ "protobuf_headers", ], language = "c++", public_hdrs = [ "include/grpc++/impl/codegen/config_protobuf.h", "include/grpcpp/impl/codegen/config_protobuf.h", ], ) grpc_cc_library( name = "grpc++_reflection", srcs = [ "src/cpp/ext/proto_server_reflection.cc", "src/cpp/ext/proto_server_reflection_plugin.cc", ], hdrs = [ "src/cpp/ext/proto_server_reflection.h", ], language = "c++", public_hdrs = [ "include/grpc++/ext/proto_server_reflection_plugin.h", "include/grpcpp/ext/proto_server_reflection_plugin.h", "include/grpcpp/ext/proto_server_reflection_plugin_impl.h", ], deps = [ ":grpc++", "//src/proto/grpc/reflection/v1alpha:reflection_proto", ], alwayslink = 1, ) grpc_cc_library( name = "grpcpp_channelz", srcs = [ "src/cpp/server/channelz/channelz_service.cc", "src/cpp/server/channelz/channelz_service_plugin.cc", ], hdrs = [ "src/cpp/server/channelz/channelz_service.h", ], language = "c++", public_hdrs = [ "include/grpcpp/ext/channelz_service_plugin.h", "include/grpcpp/ext/channelz_service_plugin_impl.h", ], deps = [ ":grpc++", "//src/proto/grpc/channelz:channelz_proto", ], alwayslink = 1, ) grpc_cc_library( name = "grpc++_test", srcs = [ "src/cpp/client/channel_test_peer.cc", ], public_hdrs = [ "include/grpc++/test/mock_stream.h", "include/grpc++/test/server_context_test_spouse.h", "include/grpcpp/test/channel_test_peer.h", "include/grpcpp/test/default_reactor_test_peer.h", "include/grpcpp/test/mock_stream.h", "include/grpcpp/test/server_context_test_spouse.h", ], deps = [ ":grpc++", ], ) grpc_cc_library( name = "grpc_server_backward_compatibility", srcs = [ "src/core/ext/filters/workarounds/workaround_utils.cc", ], hdrs = [ "src/core/ext/filters/workarounds/workaround_utils.h", ], language = "c++", deps = [ "grpc_base", ], ) grpc_cc_library( name = "grpc++_core_stats", srcs = [ "src/cpp/util/core_stats.cc", ], hdrs = [ "src/cpp/util/core_stats.h", ], language = "c++", deps = [ ":grpc++", "//src/proto/grpc/core:stats_proto", ], ) grpc_cc_library( name = "grpc_opencensus_plugin", srcs = [ "src/cpp/ext/filters/census/channel_filter.cc", "src/cpp/ext/filters/census/client_filter.cc", "src/cpp/ext/filters/census/context.cc", "src/cpp/ext/filters/census/grpc_plugin.cc", "src/cpp/ext/filters/census/measures.cc", "src/cpp/ext/filters/census/rpc_encoding.cc", "src/cpp/ext/filters/census/server_filter.cc", "src/cpp/ext/filters/census/views.cc", ], hdrs = [ "include/grpcpp/opencensus.h", "src/cpp/ext/filters/census/channel_filter.h", "src/cpp/ext/filters/census/client_filter.h", "src/cpp/ext/filters/census/context.h", "src/cpp/ext/filters/census/grpc_plugin.h", "src/cpp/ext/filters/census/measures.h", "src/cpp/ext/filters/census/rpc_encoding.h", "src/cpp/ext/filters/census/server_filter.h", ], external_deps = [ "absl-base", "absl-time", "opencensus-trace", "opencensus-trace-context_util", "opencensus-stats", "opencensus-context", ], language = "c++", deps = [ ":census", ":grpc++", ], ) # Once upb code-gen issue is resolved, use the targets commented below to replace the ones using # upb-generated files. # grpc_upb_proto_library( # name = "upb_load_report", # deps = ["@envoy_api//envoy/api/v2/endpoint:load_report_export"], # ) # # grpc_upb_proto_library( # name = "upb_lrs", # deps = ["@envoy_api//envoy/service/load_stats/v2:lrs_export"], # ) # # grpc_upb_proto_library( # name = "upb_cds", # deps = ["@envoy_api//envoy/api/v2:cds_export"], # ) # grpc_cc_library( # name = "envoy_lrs_upb", # external_deps = [ # "upb_lib", # ], # language = "c++", # tags = ["no_windows"], # deps = [ # ":upb_load_report", # ":upb_lrs", # ], # ) # grpc_cc_library( # name = "envoy_ads_upb", # external_deps = [ # "upb_lib", # ], # language = "c++", # tags = ["no_windows"], # deps = [ # ":upb_cds", # ], # ) grpc_cc_library( name = "envoy_ads_upb", srcs = [ "src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c", "src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c", "src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c", "src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c", "src/core/ext/upb-generated/envoy/api/v2/cds.upb.c", "src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c", "src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c", "src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c", "src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c", "src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c", "src/core/ext/upb-generated/envoy/api/v2/eds.upb.c", "src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c", "src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c", "src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c", "src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c", "src/core/ext/upb-generated/envoy/api/v2/lds.upb.c", "src/core/ext/upb-generated/envoy/api/v2/listener.upb.c", "src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c", "src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c", "src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c", "src/core/ext/upb-generated/envoy/api/v2/rds.upb.c", "src/core/ext/upb-generated/envoy/api/v2/route.upb.c", "src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c", "src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c", "src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c", "src/core/ext/upb-generated/envoy/api/v2/srds.upb.c", "src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c", "src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c", "src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c", "src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c", "src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c", "src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c", ], hdrs = [ "src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h", "src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h", "src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h", "src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h", "src/core/ext/upb-generated/envoy/api/v2/cds.upb.h", "src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h", "src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h", "src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h", "src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h", "src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h", "src/core/ext/upb-generated/envoy/api/v2/eds.upb.h", "src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h", "src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h", "src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h", "src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h", "src/core/ext/upb-generated/envoy/api/v2/lds.upb.h", "src/core/ext/upb-generated/envoy/api/v2/listener.upb.h", "src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h", "src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h", "src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h", "src/core/ext/upb-generated/envoy/api/v2/rds.upb.h", "src/core/ext/upb-generated/envoy/api/v2/route.upb.h", "src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h", "src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h", "src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h", "src/core/ext/upb-generated/envoy/api/v2/srds.upb.h", "src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h", "src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h", "src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h", "src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h", "src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h", "src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h", ], external_deps = [ "upb_lib", ], language = "c++", deps = [ ":envoy_annotations_upb", ":envoy_core_upb", ":envoy_type_upb", ":google_api_upb", ":proto_gen_validate_upb", ":udpa_annotations_upb", ], ) grpc_cc_library( name = "envoy_annotations_upb", srcs = [ "src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c", "src/core/ext/upb-generated/envoy/annotations/resource.upb.c", ], hdrs = [ "src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h", "src/core/ext/upb-generated/envoy/annotations/resource.upb.h", ], external_deps = [ "upb_lib", ], language = "c++", deps = [ ":google_api_upb", ], ) grpc_cc_library( name = "envoy_core_upb", srcs = [ "src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c", "src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c", "src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c", "src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c", "src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c", "src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c", "src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c", "src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c", "src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c", "src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c", ], hdrs = [ "src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h", "src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h", "src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h", "src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h", "src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h", "src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h", "src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h", "src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h", "src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h", "src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h", ], external_deps = [ "upb_lib", ], language = "c++", deps = [ ":envoy_annotations_upb", ":envoy_type_upb", ":google_api_upb", ":proto_gen_validate_upb", ":udpa_annotations_upb", ], ) grpc_cc_library( name = "envoy_type_upb", srcs = [ "src/core/ext/upb-generated/envoy/type/http.upb.c", "src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c", "src/core/ext/upb-generated/envoy/type/matcher/string.upb.c", "src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c", "src/core/ext/upb-generated/envoy/type/percent.upb.c", "src/core/ext/upb-generated/envoy/type/range.upb.c", "src/core/ext/upb-generated/envoy/type/semantic_version.upb.c", "src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c", ], hdrs = [ "src/core/ext/upb-generated/envoy/type/http.upb.h", "src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h", "src/core/ext/upb-generated/envoy/type/matcher/string.upb.h", "src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h", "src/core/ext/upb-generated/envoy/type/percent.upb.h", "src/core/ext/upb-generated/envoy/type/range.upb.h", "src/core/ext/upb-generated/envoy/type/semantic_version.upb.h", "src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h", ], external_deps = [ "upb_lib", ], language = "c++", deps = [ ":envoy_annotations_upb", ":google_api_upb", ":proto_gen_validate_upb", ":udpa_annotations_upb", ], ) grpc_cc_library( name = "proto_gen_validate_upb", srcs = [ "src/core/ext/upb-generated/gogoproto/gogo.upb.c", "src/core/ext/upb-generated/validate/validate.upb.c", ], hdrs = [ "src/core/ext/upb-generated/gogoproto/gogo.upb.h", "src/core/ext/upb-generated/validate/validate.upb.h", ], external_deps = [ "upb_lib", ], language = "c++", deps = [ ":google_api_upb", ], ) # Once upb code-gen issue is resolved, replace udpa_orca_upb with this. # grpc_upb_proto_library( # name = "udpa_orca_upb", # deps = ["@envoy_api//udpa/data/orca/v1:orca_load_report"] # ) grpc_cc_library( name = "udpa_orca_upb", srcs = [ "src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c", ], hdrs = [ "src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h", ], external_deps = [ "upb_lib", ], language = "c++", deps = [ ":proto_gen_validate_upb", ], ) grpc_cc_library( name = "udpa_annotations_upb", srcs = [ "src/core/ext/upb-generated/udpa/annotations/migrate.upb.c", "src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c", "src/core/ext/upb-generated/udpa/annotations/status.upb.c", ], hdrs = [ "src/core/ext/upb-generated/udpa/annotations/migrate.upb.h", "src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h", "src/core/ext/upb-generated/udpa/annotations/status.upb.h", ], external_deps = [ "upb_lib", ], language = "c++", deps = [ ":google_api_upb", ], ) # Once upb code-gen issue is resolved, replace grpc_health_upb with this. # grpc_upb_proto_library( # name = "grpc_health_upb", # deps = ["//src/proto/grpc/health/v1:health_proto_descriptor"], # ) grpc_cc_library( name = "grpc_health_upb", srcs = [ "src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c", ], hdrs = [ "src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h", ], external_deps = [ "upb_lib", ], language = "c++", ) # Once upb code-gen issue is resolved, remove this. grpc_cc_library( name = "google_api_upb", srcs = [ "src/core/ext/upb-generated/google/api/annotations.upb.c", "src/core/ext/upb-generated/google/api/http.upb.c", "src/core/ext/upb-generated/google/protobuf/any.upb.c", "src/core/ext/upb-generated/google/protobuf/descriptor.upb.c", "src/core/ext/upb-generated/google/protobuf/duration.upb.c", "src/core/ext/upb-generated/google/protobuf/empty.upb.c", "src/core/ext/upb-generated/google/protobuf/struct.upb.c", "src/core/ext/upb-generated/google/protobuf/timestamp.upb.c", "src/core/ext/upb-generated/google/protobuf/wrappers.upb.c", "src/core/ext/upb-generated/google/rpc/status.upb.c", ], hdrs = [ "src/core/ext/upb-generated/google/api/annotations.upb.h", "src/core/ext/upb-generated/google/api/http.upb.h", "src/core/ext/upb-generated/google/protobuf/any.upb.h", "src/core/ext/upb-generated/google/protobuf/descriptor.upb.h", "src/core/ext/upb-generated/google/protobuf/duration.upb.h", "src/core/ext/upb-generated/google/protobuf/empty.upb.h", "src/core/ext/upb-generated/google/protobuf/struct.upb.h", "src/core/ext/upb-generated/google/protobuf/timestamp.upb.h", "src/core/ext/upb-generated/google/protobuf/wrappers.upb.h", "src/core/ext/upb-generated/google/rpc/status.upb.h", ], external_deps = [ "upb_lib", ], language = "c++", ) # Once upb code-gen issue is resolved, replace grpc_lb_upb with this. # grpc_upb_proto_library( # name = "grpc_lb_upb", # deps = ["//src/proto/grpc/lb/v1:load_balancer_proto_descriptor"], # ) grpc_cc_library( name = "grpc_lb_upb", srcs = [ "src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c", ], hdrs = [ "src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h", ], external_deps = [ "upb_lib", ], language = "c++", deps = [ "google_api_upb", ], ) # Once upb code-gen issue is resolved, replace alts_upb with this. # grpc_upb_proto_library( # name = "alts_upb", # deps = ["//src/proto/grpc/gcp:alts_handshaker_proto"], # ) grpc_cc_library( name = "alts_upb", srcs = [ "src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c", "src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c", "src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c", ], hdrs = [ "src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h", "src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h", "src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h", ], external_deps = [ "upb_lib", ], language = "c++", ) grpc_generate_one_off_targets() filegroup( name = "root_certificates", srcs = [ "etc/roots.pem", ], visibility = ["//visibility:public"], ) # Base classes of EventManagerInterface grpc_cc_library( name = "eventmanager_interface", hdrs = [ "src/core/lib/iomgr/poller/eventmanager_interface.h", ], ) # Libuv-based EventManager implementation grpc_cc_library( name = "eventmanager_libuv", srcs = [ "src/core/lib/iomgr/poller/eventmanager_libuv.cc", ], hdrs = [ "src/core/lib/iomgr/poller/eventmanager_libuv.h", ], deps = [ "gpr_base", ], ) grpc-1.30.2/BUILD.gn000066400000000000000000002153721370425124100137260ustar00rootroot00000000000000# GRPC Fuchsia GN build file # This file has been automatically generated from a template file. # Please look at the templates directory instead. # This file can be regenerated from the template by running # tools/buildgen/generate_projects.sh # Copyright 2019 gRPC 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 # # 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. config("grpc_config") { include_dirs = [ ".", "include/", ] defines = [ "GRPC_USE_PROTO_LITE", "GPR_SUPPORT_CHANNELS_FROM_FD", "PB_FIELD_16BIT", ] } source_set("address_sorting") { sources = [ "third_party/address_sorting/address_sorting.c", "third_party/address_sorting/address_sorting_internal.h", "third_party/address_sorting/address_sorting_posix.c", "third_party/address_sorting/address_sorting_windows.c", "third_party/address_sorting/include/address_sorting/address_sorting.h", ] deps = [ ] public_configs = [ ":grpc_config", ] include_dirs = [ "third_party/address_sorting/include", ] } source_set("gpr") { sources = [ "include/grpc/impl/codegen/atm.h", "include/grpc/impl/codegen/atm_gcc_atomic.h", "include/grpc/impl/codegen/atm_gcc_sync.h", "include/grpc/impl/codegen/atm_windows.h", "include/grpc/impl/codegen/byte_buffer.h", "include/grpc/impl/codegen/byte_buffer_reader.h", "include/grpc/impl/codegen/compression_types.h", "include/grpc/impl/codegen/connectivity_state.h", "include/grpc/impl/codegen/fork.h", "include/grpc/impl/codegen/gpr_slice.h", "include/grpc/impl/codegen/gpr_types.h", "include/grpc/impl/codegen/grpc_types.h", "include/grpc/impl/codegen/log.h", "include/grpc/impl/codegen/port_platform.h", "include/grpc/impl/codegen/propagation_bits.h", "include/grpc/impl/codegen/slice.h", "include/grpc/impl/codegen/status.h", "include/grpc/impl/codegen/sync.h", "include/grpc/impl/codegen/sync_abseil.h", "include/grpc/impl/codegen/sync_custom.h", "include/grpc/impl/codegen/sync_generic.h", "include/grpc/impl/codegen/sync_posix.h", "include/grpc/impl/codegen/sync_windows.h", "include/grpc/support/alloc.h", "include/grpc/support/atm.h", "include/grpc/support/atm_gcc_atomic.h", "include/grpc/support/atm_gcc_sync.h", "include/grpc/support/atm_windows.h", "include/grpc/support/cpu.h", "include/grpc/support/log.h", "include/grpc/support/log_windows.h", "include/grpc/support/port_platform.h", "include/grpc/support/string_util.h", "include/grpc/support/sync.h", "include/grpc/support/sync_abseil.h", "include/grpc/support/sync_custom.h", "include/grpc/support/sync_generic.h", "include/grpc/support/sync_posix.h", "include/grpc/support/sync_windows.h", "include/grpc/support/thd_id.h", "include/grpc/support/time.h", "src/core/lib/gpr/alloc.cc", "src/core/lib/gpr/alloc.h", "src/core/lib/gpr/arena.h", "src/core/lib/gpr/atm.cc", "src/core/lib/gpr/cpu_iphone.cc", "src/core/lib/gpr/cpu_linux.cc", "src/core/lib/gpr/cpu_posix.cc", "src/core/lib/gpr/cpu_windows.cc", "src/core/lib/gpr/env.h", "src/core/lib/gpr/env_linux.cc", "src/core/lib/gpr/env_posix.cc", "src/core/lib/gpr/env_windows.cc", "src/core/lib/gpr/log.cc", "src/core/lib/gpr/log_android.cc", "src/core/lib/gpr/log_linux.cc", "src/core/lib/gpr/log_posix.cc", "src/core/lib/gpr/log_windows.cc", "src/core/lib/gpr/murmur_hash.cc", "src/core/lib/gpr/murmur_hash.h", "src/core/lib/gpr/spinlock.h", "src/core/lib/gpr/string.cc", "src/core/lib/gpr/string.h", "src/core/lib/gpr/string_posix.cc", "src/core/lib/gpr/string_util_windows.cc", "src/core/lib/gpr/string_windows.cc", "src/core/lib/gpr/string_windows.h", "src/core/lib/gpr/sync.cc", "src/core/lib/gpr/sync_abseil.cc", "src/core/lib/gpr/sync_posix.cc", "src/core/lib/gpr/sync_windows.cc", "src/core/lib/gpr/time.cc", "src/core/lib/gpr/time_posix.cc", "src/core/lib/gpr/time_precise.cc", "src/core/lib/gpr/time_precise.h", "src/core/lib/gpr/time_windows.cc", "src/core/lib/gpr/tls.h", "src/core/lib/gpr/tls_gcc.h", "src/core/lib/gpr/tls_msvc.h", "src/core/lib/gpr/tls_pthread.cc", "src/core/lib/gpr/tls_pthread.h", "src/core/lib/gpr/tmpfile.h", "src/core/lib/gpr/tmpfile_msys.cc", "src/core/lib/gpr/tmpfile_posix.cc", "src/core/lib/gpr/tmpfile_windows.cc", "src/core/lib/gpr/useful.h", "src/core/lib/gpr/wrap_memcpy.cc", "src/core/lib/gprpp/arena.cc", "src/core/lib/gprpp/arena.h", "src/core/lib/gprpp/atomic.h", "src/core/lib/gprpp/fork.cc", "src/core/lib/gprpp/fork.h", "src/core/lib/gprpp/global_config.h", "src/core/lib/gprpp/global_config_custom.h", "src/core/lib/gprpp/global_config_env.cc", "src/core/lib/gprpp/global_config_env.h", "src/core/lib/gprpp/global_config_generic.h", "src/core/lib/gprpp/host_port.cc", "src/core/lib/gprpp/host_port.h", "src/core/lib/gprpp/manual_constructor.h", "src/core/lib/gprpp/map.h", "src/core/lib/gprpp/memory.h", "src/core/lib/gprpp/mpscq.cc", "src/core/lib/gprpp/mpscq.h", "src/core/lib/gprpp/sync.h", "src/core/lib/gprpp/thd.h", "src/core/lib/gprpp/thd_posix.cc", "src/core/lib/gprpp/thd_windows.cc", "src/core/lib/profiling/basic_timers.cc", "src/core/lib/profiling/stap_timers.cc", "src/core/lib/profiling/timers.h", ] deps = [ ":absl/time:time", ":absl/strings:strings", ":absl/strings:str_format", ":absl/memory:memory", ] public_configs = [ ":grpc_config", ] } source_set("grpc") { sources = [ "include/grpc/byte_buffer.h", "include/grpc/byte_buffer_reader.h", "include/grpc/census.h", "include/grpc/compression.h", "include/grpc/fork.h", "include/grpc/grpc.h", "include/grpc/grpc_posix.h", "include/grpc/grpc_security.h", "include/grpc/grpc_security_constants.h", "include/grpc/load_reporting.h", "include/grpc/slice.h", "include/grpc/slice_buffer.h", "include/grpc/status.h", "include/grpc/support/workaround_list.h", "src/core/ext/filters/census/grpc_context.cc", "src/core/ext/filters/client_channel/backend_metric.cc", "src/core/ext/filters/client_channel/backend_metric.h", "src/core/ext/filters/client_channel/backup_poller.cc", "src/core/ext/filters/client_channel/backup_poller.h", "src/core/ext/filters/client_channel/channel_connectivity.cc", "src/core/ext/filters/client_channel/client_channel.cc", "src/core/ext/filters/client_channel/client_channel.h", "src/core/ext/filters/client_channel/client_channel_channelz.cc", "src/core/ext/filters/client_channel/client_channel_channelz.h", "src/core/ext/filters/client_channel/client_channel_factory.cc", "src/core/ext/filters/client_channel/client_channel_factory.h", "src/core/ext/filters/client_channel/client_channel_plugin.cc", "src/core/ext/filters/client_channel/connector.h", "src/core/ext/filters/client_channel/global_subchannel_pool.cc", "src/core/ext/filters/client_channel/global_subchannel_pool.h", "src/core/ext/filters/client_channel/health/health_check_client.cc", "src/core/ext/filters/client_channel/health/health_check_client.h", "src/core/ext/filters/client_channel/http_connect_handshaker.cc", "src/core/ext/filters/client_channel/http_connect_handshaker.h", "src/core/ext/filters/client_channel/http_proxy.cc", "src/core/ext/filters/client_channel/http_proxy.h", "src/core/ext/filters/client_channel/lb_policy.cc", "src/core/ext/filters/client_channel/lb_policy.h", "src/core/ext/filters/client_channel/lb_policy/address_filtering.cc", "src/core/ext/filters/client_channel/lb_policy/address_filtering.h", "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc", "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h", "src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc", "src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h", "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc", "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h", "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc", "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h", "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h", "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc", "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc", "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h", "src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc", "src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h", "src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc", "src/core/ext/filters/client_channel/lb_policy/priority/priority.cc", "src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc", "src/core/ext/filters/client_channel/lb_policy/subchannel_list.h", "src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc", "src/core/ext/filters/client_channel/lb_policy/xds/cds.cc", "src/core/ext/filters/client_channel/lb_policy/xds/eds.cc", "src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc", "src/core/ext/filters/client_channel/lb_policy/xds/xds.h", "src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc", "src/core/ext/filters/client_channel/lb_policy_factory.h", "src/core/ext/filters/client_channel/lb_policy_registry.cc", "src/core/ext/filters/client_channel/lb_policy_registry.h", "src/core/ext/filters/client_channel/local_subchannel_pool.cc", "src/core/ext/filters/client_channel/local_subchannel_pool.h", "src/core/ext/filters/client_channel/parse_address.cc", "src/core/ext/filters/client_channel/parse_address.h", "src/core/ext/filters/client_channel/proxy_mapper.h", "src/core/ext/filters/client_channel/proxy_mapper_registry.cc", "src/core/ext/filters/client_channel/proxy_mapper_registry.h", "src/core/ext/filters/client_channel/resolver.cc", "src/core/ext/filters/client_channel/resolver.h", "src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc", "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc", "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h", "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc", "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc", "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc", "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc", "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h", "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc", "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc", "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc", "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc", "src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc", "src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h", "src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc", "src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc", "src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h", "src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc", "src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc", "src/core/ext/filters/client_channel/resolver_factory.h", "src/core/ext/filters/client_channel/resolver_registry.cc", "src/core/ext/filters/client_channel/resolver_registry.h", "src/core/ext/filters/client_channel/resolver_result_parsing.cc", "src/core/ext/filters/client_channel/resolver_result_parsing.h", "src/core/ext/filters/client_channel/resolving_lb_policy.cc", "src/core/ext/filters/client_channel/resolving_lb_policy.h", "src/core/ext/filters/client_channel/retry_throttle.cc", "src/core/ext/filters/client_channel/retry_throttle.h", "src/core/ext/filters/client_channel/server_address.cc", "src/core/ext/filters/client_channel/server_address.h", "src/core/ext/filters/client_channel/service_config.cc", "src/core/ext/filters/client_channel/service_config.h", "src/core/ext/filters/client_channel/service_config_call_data.h", "src/core/ext/filters/client_channel/service_config_parser.cc", "src/core/ext/filters/client_channel/service_config_parser.h", "src/core/ext/filters/client_channel/subchannel.cc", "src/core/ext/filters/client_channel/subchannel.h", "src/core/ext/filters/client_channel/subchannel_interface.h", "src/core/ext/filters/client_channel/subchannel_pool_interface.cc", "src/core/ext/filters/client_channel/subchannel_pool_interface.h", "src/core/ext/filters/client_channel/xds/xds_api.cc", "src/core/ext/filters/client_channel/xds/xds_api.h", "src/core/ext/filters/client_channel/xds/xds_bootstrap.cc", "src/core/ext/filters/client_channel/xds/xds_bootstrap.h", "src/core/ext/filters/client_channel/xds/xds_channel.h", "src/core/ext/filters/client_channel/xds/xds_channel_args.h", "src/core/ext/filters/client_channel/xds/xds_channel_secure.cc", "src/core/ext/filters/client_channel/xds/xds_client.cc", "src/core/ext/filters/client_channel/xds/xds_client.h", "src/core/ext/filters/client_channel/xds/xds_client_stats.cc", "src/core/ext/filters/client_channel/xds/xds_client_stats.h", "src/core/ext/filters/client_idle/client_idle_filter.cc", "src/core/ext/filters/deadline/deadline_filter.cc", "src/core/ext/filters/deadline/deadline_filter.h", "src/core/ext/filters/http/client/http_client_filter.cc", "src/core/ext/filters/http/client/http_client_filter.h", "src/core/ext/filters/http/client_authority_filter.cc", "src/core/ext/filters/http/client_authority_filter.h", "src/core/ext/filters/http/http_filters_plugin.cc", "src/core/ext/filters/http/message_compress/message_compress_filter.cc", "src/core/ext/filters/http/message_compress/message_compress_filter.h", "src/core/ext/filters/http/message_compress/message_decompress_filter.cc", "src/core/ext/filters/http/message_compress/message_decompress_filter.h", "src/core/ext/filters/http/server/http_server_filter.cc", "src/core/ext/filters/http/server/http_server_filter.h", "src/core/ext/filters/max_age/max_age_filter.cc", "src/core/ext/filters/max_age/max_age_filter.h", "src/core/ext/filters/message_size/message_size_filter.cc", "src/core/ext/filters/message_size/message_size_filter.h", "src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc", "src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h", "src/core/ext/filters/workarounds/workaround_utils.cc", "src/core/ext/filters/workarounds/workaround_utils.h", "src/core/ext/transport/chttp2/alpn/alpn.cc", "src/core/ext/transport/chttp2/alpn/alpn.h", "src/core/ext/transport/chttp2/client/authority.cc", "src/core/ext/transport/chttp2/client/authority.h", "src/core/ext/transport/chttp2/client/chttp2_connector.cc", "src/core/ext/transport/chttp2/client/chttp2_connector.h", "src/core/ext/transport/chttp2/client/insecure/channel_create.cc", "src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc", "src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc", "src/core/ext/transport/chttp2/server/chttp2_server.cc", "src/core/ext/transport/chttp2/server/chttp2_server.h", "src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc", "src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc", "src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc", "src/core/ext/transport/chttp2/transport/bin_decoder.cc", "src/core/ext/transport/chttp2/transport/bin_decoder.h", "src/core/ext/transport/chttp2/transport/bin_encoder.cc", "src/core/ext/transport/chttp2/transport/bin_encoder.h", "src/core/ext/transport/chttp2/transport/chttp2_plugin.cc", "src/core/ext/transport/chttp2/transport/chttp2_transport.cc", "src/core/ext/transport/chttp2/transport/chttp2_transport.h", "src/core/ext/transport/chttp2/transport/context_list.cc", "src/core/ext/transport/chttp2/transport/context_list.h", "src/core/ext/transport/chttp2/transport/flow_control.cc", "src/core/ext/transport/chttp2/transport/flow_control.h", "src/core/ext/transport/chttp2/transport/frame.h", "src/core/ext/transport/chttp2/transport/frame_data.cc", "src/core/ext/transport/chttp2/transport/frame_data.h", "src/core/ext/transport/chttp2/transport/frame_goaway.cc", "src/core/ext/transport/chttp2/transport/frame_goaway.h", "src/core/ext/transport/chttp2/transport/frame_ping.cc", "src/core/ext/transport/chttp2/transport/frame_ping.h", "src/core/ext/transport/chttp2/transport/frame_rst_stream.cc", "src/core/ext/transport/chttp2/transport/frame_rst_stream.h", "src/core/ext/transport/chttp2/transport/frame_settings.cc", "src/core/ext/transport/chttp2/transport/frame_settings.h", "src/core/ext/transport/chttp2/transport/frame_window_update.cc", "src/core/ext/transport/chttp2/transport/frame_window_update.h", "src/core/ext/transport/chttp2/transport/hpack_encoder.cc", "src/core/ext/transport/chttp2/transport/hpack_encoder.h", "src/core/ext/transport/chttp2/transport/hpack_parser.cc", "src/core/ext/transport/chttp2/transport/hpack_parser.h", "src/core/ext/transport/chttp2/transport/hpack_table.cc", "src/core/ext/transport/chttp2/transport/hpack_table.h", "src/core/ext/transport/chttp2/transport/http2_settings.cc", "src/core/ext/transport/chttp2/transport/http2_settings.h", "src/core/ext/transport/chttp2/transport/huffsyms.cc", "src/core/ext/transport/chttp2/transport/huffsyms.h", "src/core/ext/transport/chttp2/transport/incoming_metadata.cc", "src/core/ext/transport/chttp2/transport/incoming_metadata.h", "src/core/ext/transport/chttp2/transport/internal.h", "src/core/ext/transport/chttp2/transport/parsing.cc", "src/core/ext/transport/chttp2/transport/stream_lists.cc", "src/core/ext/transport/chttp2/transport/stream_map.cc", "src/core/ext/transport/chttp2/transport/stream_map.h", "src/core/ext/transport/chttp2/transport/varint.cc", "src/core/ext/transport/chttp2/transport/varint.h", "src/core/ext/transport/chttp2/transport/writing.cc", "src/core/ext/transport/inproc/inproc_plugin.cc", "src/core/ext/transport/inproc/inproc_transport.cc", "src/core/ext/transport/inproc/inproc_transport.h", "src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c", "src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h", "src/core/ext/upb-generated/envoy/annotations/resource.upb.c", "src/core/ext/upb-generated/envoy/annotations/resource.upb.h", "src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c", "src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h", "src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c", "src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h", "src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c", "src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h", "src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c", "src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h", "src/core/ext/upb-generated/envoy/api/v2/cds.upb.c", "src/core/ext/upb-generated/envoy/api/v2/cds.upb.h", "src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c", "src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h", "src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c", "src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h", "src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c", "src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h", "src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c", "src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h", "src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c", "src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h", "src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c", "src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h", "src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c", "src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h", "src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c", "src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h", "src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c", "src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h", "src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c", "src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h", "src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c", "src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h", "src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c", "src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h", "src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c", "src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h", "src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c", "src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h", "src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c", "src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h", "src/core/ext/upb-generated/envoy/api/v2/eds.upb.c", "src/core/ext/upb-generated/envoy/api/v2/eds.upb.h", "src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c", "src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h", "src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c", "src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h", "src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c", "src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h", "src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c", "src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h", "src/core/ext/upb-generated/envoy/api/v2/lds.upb.c", "src/core/ext/upb-generated/envoy/api/v2/lds.upb.h", "src/core/ext/upb-generated/envoy/api/v2/listener.upb.c", "src/core/ext/upb-generated/envoy/api/v2/listener.upb.h", "src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c", "src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h", "src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c", "src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h", "src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c", "src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h", "src/core/ext/upb-generated/envoy/api/v2/rds.upb.c", "src/core/ext/upb-generated/envoy/api/v2/rds.upb.h", "src/core/ext/upb-generated/envoy/api/v2/route.upb.c", "src/core/ext/upb-generated/envoy/api/v2/route.upb.h", "src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c", "src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h", "src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c", "src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h", "src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c", "src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h", "src/core/ext/upb-generated/envoy/api/v2/srds.upb.c", "src/core/ext/upb-generated/envoy/api/v2/srds.upb.h", "src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c", "src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h", "src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c", "src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h", "src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c", "src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h", "src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c", "src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h", "src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c", "src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h", "src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c", "src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h", "src/core/ext/upb-generated/envoy/type/http.upb.c", "src/core/ext/upb-generated/envoy/type/http.upb.h", "src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c", "src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h", "src/core/ext/upb-generated/envoy/type/matcher/string.upb.c", "src/core/ext/upb-generated/envoy/type/matcher/string.upb.h", "src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c", "src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h", "src/core/ext/upb-generated/envoy/type/percent.upb.c", "src/core/ext/upb-generated/envoy/type/percent.upb.h", "src/core/ext/upb-generated/envoy/type/range.upb.c", "src/core/ext/upb-generated/envoy/type/range.upb.h", "src/core/ext/upb-generated/envoy/type/semantic_version.upb.c", "src/core/ext/upb-generated/envoy/type/semantic_version.upb.h", "src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c", "src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h", "src/core/ext/upb-generated/gogoproto/gogo.upb.c", "src/core/ext/upb-generated/gogoproto/gogo.upb.h", "src/core/ext/upb-generated/google/api/annotations.upb.c", "src/core/ext/upb-generated/google/api/annotations.upb.h", "src/core/ext/upb-generated/google/api/http.upb.c", "src/core/ext/upb-generated/google/api/http.upb.h", "src/core/ext/upb-generated/google/protobuf/any.upb.c", "src/core/ext/upb-generated/google/protobuf/any.upb.h", "src/core/ext/upb-generated/google/protobuf/descriptor.upb.c", "src/core/ext/upb-generated/google/protobuf/descriptor.upb.h", "src/core/ext/upb-generated/google/protobuf/duration.upb.c", "src/core/ext/upb-generated/google/protobuf/duration.upb.h", "src/core/ext/upb-generated/google/protobuf/empty.upb.c", "src/core/ext/upb-generated/google/protobuf/empty.upb.h", "src/core/ext/upb-generated/google/protobuf/struct.upb.c", "src/core/ext/upb-generated/google/protobuf/struct.upb.h", "src/core/ext/upb-generated/google/protobuf/timestamp.upb.c", "src/core/ext/upb-generated/google/protobuf/timestamp.upb.h", "src/core/ext/upb-generated/google/protobuf/wrappers.upb.c", "src/core/ext/upb-generated/google/protobuf/wrappers.upb.h", "src/core/ext/upb-generated/google/rpc/status.upb.c", "src/core/ext/upb-generated/google/rpc/status.upb.h", "src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c", "src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h", "src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c", "src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h", "src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c", "src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h", "src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c", "src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h", "src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c", "src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h", "src/core/ext/upb-generated/udpa/annotations/migrate.upb.c", "src/core/ext/upb-generated/udpa/annotations/migrate.upb.h", "src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c", "src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h", "src/core/ext/upb-generated/udpa/annotations/status.upb.c", "src/core/ext/upb-generated/udpa/annotations/status.upb.h", "src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c", "src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h", "src/core/ext/upb-generated/validate/validate.upb.c", "src/core/ext/upb-generated/validate/validate.upb.h", "src/core/lib/avl/avl.cc", "src/core/lib/avl/avl.h", "src/core/lib/backoff/backoff.cc", "src/core/lib/backoff/backoff.h", "src/core/lib/channel/channel_args.cc", "src/core/lib/channel/channel_args.h", "src/core/lib/channel/channel_stack.cc", "src/core/lib/channel/channel_stack.h", "src/core/lib/channel/channel_stack_builder.cc", "src/core/lib/channel/channel_stack_builder.h", "src/core/lib/channel/channel_trace.cc", "src/core/lib/channel/channel_trace.h", "src/core/lib/channel/channelz.cc", "src/core/lib/channel/channelz.h", "src/core/lib/channel/channelz_registry.cc", "src/core/lib/channel/channelz_registry.h", "src/core/lib/channel/connected_channel.cc", "src/core/lib/channel/connected_channel.h", "src/core/lib/channel/context.h", "src/core/lib/channel/handshaker.cc", "src/core/lib/channel/handshaker.h", "src/core/lib/channel/handshaker_factory.h", "src/core/lib/channel/handshaker_registry.cc", "src/core/lib/channel/handshaker_registry.h", "src/core/lib/channel/status_util.cc", "src/core/lib/channel/status_util.h", "src/core/lib/compression/algorithm_metadata.h", "src/core/lib/compression/compression.cc", "src/core/lib/compression/compression_args.cc", "src/core/lib/compression/compression_args.h", "src/core/lib/compression/compression_internal.cc", "src/core/lib/compression/compression_internal.h", "src/core/lib/compression/message_compress.cc", "src/core/lib/compression/message_compress.h", "src/core/lib/compression/stream_compression.cc", "src/core/lib/compression/stream_compression.h", "src/core/lib/compression/stream_compression_gzip.cc", "src/core/lib/compression/stream_compression_gzip.h", "src/core/lib/compression/stream_compression_identity.cc", "src/core/lib/compression/stream_compression_identity.h", "src/core/lib/debug/stats.cc", "src/core/lib/debug/stats.h", "src/core/lib/debug/stats_data.cc", "src/core/lib/debug/stats_data.h", "src/core/lib/debug/trace.cc", "src/core/lib/debug/trace.h", "src/core/lib/gprpp/atomic.h", "src/core/lib/gprpp/debug_location.h", "src/core/lib/gprpp/orphanable.h", "src/core/lib/gprpp/ref_counted.h", "src/core/lib/gprpp/ref_counted_ptr.h", "src/core/lib/http/format_request.cc", "src/core/lib/http/format_request.h", "src/core/lib/http/httpcli.cc", "src/core/lib/http/httpcli.h", "src/core/lib/http/httpcli_security_connector.cc", "src/core/lib/http/parser.cc", "src/core/lib/http/parser.h", "src/core/lib/iomgr/block_annotate.h", "src/core/lib/iomgr/buffer_list.cc", "src/core/lib/iomgr/buffer_list.h", "src/core/lib/iomgr/call_combiner.cc", "src/core/lib/iomgr/call_combiner.h", "src/core/lib/iomgr/cfstream_handle.cc", "src/core/lib/iomgr/cfstream_handle.h", "src/core/lib/iomgr/closure.h", "src/core/lib/iomgr/combiner.cc", "src/core/lib/iomgr/combiner.h", "src/core/lib/iomgr/dualstack_socket_posix.cc", "src/core/lib/iomgr/dynamic_annotations.h", "src/core/lib/iomgr/endpoint.cc", "src/core/lib/iomgr/endpoint.h", "src/core/lib/iomgr/endpoint_cfstream.cc", "src/core/lib/iomgr/endpoint_cfstream.h", "src/core/lib/iomgr/endpoint_pair.h", "src/core/lib/iomgr/endpoint_pair_posix.cc", "src/core/lib/iomgr/endpoint_pair_uv.cc", "src/core/lib/iomgr/endpoint_pair_windows.cc", "src/core/lib/iomgr/error.cc", "src/core/lib/iomgr/error.h", "src/core/lib/iomgr/error_cfstream.cc", "src/core/lib/iomgr/error_cfstream.h", "src/core/lib/iomgr/error_internal.h", "src/core/lib/iomgr/ev_apple.cc", "src/core/lib/iomgr/ev_apple.h", "src/core/lib/iomgr/ev_epoll1_linux.cc", "src/core/lib/iomgr/ev_epoll1_linux.h", "src/core/lib/iomgr/ev_epollex_linux.cc", "src/core/lib/iomgr/ev_epollex_linux.h", "src/core/lib/iomgr/ev_poll_posix.cc", "src/core/lib/iomgr/ev_poll_posix.h", "src/core/lib/iomgr/ev_posix.cc", "src/core/lib/iomgr/ev_posix.h", "src/core/lib/iomgr/ev_windows.cc", "src/core/lib/iomgr/exec_ctx.cc", "src/core/lib/iomgr/exec_ctx.h", "src/core/lib/iomgr/executor.cc", "src/core/lib/iomgr/executor.h", "src/core/lib/iomgr/executor/mpmcqueue.cc", "src/core/lib/iomgr/executor/mpmcqueue.h", "src/core/lib/iomgr/executor/threadpool.cc", "src/core/lib/iomgr/executor/threadpool.h", "src/core/lib/iomgr/fork_posix.cc", "src/core/lib/iomgr/fork_windows.cc", "src/core/lib/iomgr/gethostname.h", "src/core/lib/iomgr/gethostname_fallback.cc", "src/core/lib/iomgr/gethostname_host_name_max.cc", "src/core/lib/iomgr/gethostname_sysconf.cc", "src/core/lib/iomgr/grpc_if_nametoindex.h", "src/core/lib/iomgr/grpc_if_nametoindex_posix.cc", "src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc", "src/core/lib/iomgr/internal_errqueue.cc", "src/core/lib/iomgr/internal_errqueue.h", "src/core/lib/iomgr/iocp_windows.cc", "src/core/lib/iomgr/iocp_windows.h", "src/core/lib/iomgr/iomgr.cc", "src/core/lib/iomgr/iomgr.h", "src/core/lib/iomgr/iomgr_custom.cc", "src/core/lib/iomgr/iomgr_custom.h", "src/core/lib/iomgr/iomgr_internal.cc", "src/core/lib/iomgr/iomgr_internal.h", "src/core/lib/iomgr/iomgr_posix.cc", "src/core/lib/iomgr/iomgr_posix.h", "src/core/lib/iomgr/iomgr_posix_cfstream.cc", "src/core/lib/iomgr/iomgr_uv.cc", "src/core/lib/iomgr/iomgr_windows.cc", "src/core/lib/iomgr/is_epollexclusive_available.cc", "src/core/lib/iomgr/is_epollexclusive_available.h", "src/core/lib/iomgr/load_file.cc", "src/core/lib/iomgr/load_file.h", "src/core/lib/iomgr/lockfree_event.cc", "src/core/lib/iomgr/lockfree_event.h", "src/core/lib/iomgr/nameser.h", "src/core/lib/iomgr/poller/eventmanager_libuv.cc", "src/core/lib/iomgr/poller/eventmanager_libuv.h", "src/core/lib/iomgr/polling_entity.cc", "src/core/lib/iomgr/polling_entity.h", "src/core/lib/iomgr/pollset.cc", "src/core/lib/iomgr/pollset.h", "src/core/lib/iomgr/pollset_custom.cc", "src/core/lib/iomgr/pollset_custom.h", "src/core/lib/iomgr/pollset_set.cc", "src/core/lib/iomgr/pollset_set.h", "src/core/lib/iomgr/pollset_set_custom.cc", "src/core/lib/iomgr/pollset_set_custom.h", "src/core/lib/iomgr/pollset_set_windows.cc", "src/core/lib/iomgr/pollset_set_windows.h", "src/core/lib/iomgr/pollset_uv.cc", "src/core/lib/iomgr/pollset_uv.h", "src/core/lib/iomgr/pollset_windows.cc", "src/core/lib/iomgr/pollset_windows.h", "src/core/lib/iomgr/port.h", "src/core/lib/iomgr/python_util.h", "src/core/lib/iomgr/resolve_address.cc", "src/core/lib/iomgr/resolve_address.h", "src/core/lib/iomgr/resolve_address_custom.cc", "src/core/lib/iomgr/resolve_address_custom.h", "src/core/lib/iomgr/resolve_address_posix.cc", "src/core/lib/iomgr/resolve_address_windows.cc", "src/core/lib/iomgr/resource_quota.cc", "src/core/lib/iomgr/resource_quota.h", "src/core/lib/iomgr/sockaddr.h", "src/core/lib/iomgr/sockaddr_custom.h", "src/core/lib/iomgr/sockaddr_posix.h", "src/core/lib/iomgr/sockaddr_utils.cc", "src/core/lib/iomgr/sockaddr_utils.h", "src/core/lib/iomgr/sockaddr_windows.h", "src/core/lib/iomgr/socket_factory_posix.cc", "src/core/lib/iomgr/socket_factory_posix.h", "src/core/lib/iomgr/socket_mutator.cc", "src/core/lib/iomgr/socket_mutator.h", "src/core/lib/iomgr/socket_utils.h", "src/core/lib/iomgr/socket_utils_common_posix.cc", "src/core/lib/iomgr/socket_utils_linux.cc", "src/core/lib/iomgr/socket_utils_posix.cc", "src/core/lib/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/socket_utils_uv.cc", "src/core/lib/iomgr/socket_utils_windows.cc", "src/core/lib/iomgr/socket_windows.cc", "src/core/lib/iomgr/socket_windows.h", "src/core/lib/iomgr/sys_epoll_wrapper.h", "src/core/lib/iomgr/tcp_client.cc", "src/core/lib/iomgr/tcp_client.h", "src/core/lib/iomgr/tcp_client_cfstream.cc", "src/core/lib/iomgr/tcp_client_custom.cc", "src/core/lib/iomgr/tcp_client_posix.cc", "src/core/lib/iomgr/tcp_client_posix.h", "src/core/lib/iomgr/tcp_client_windows.cc", "src/core/lib/iomgr/tcp_custom.cc", "src/core/lib/iomgr/tcp_custom.h", "src/core/lib/iomgr/tcp_posix.cc", "src/core/lib/iomgr/tcp_posix.h", "src/core/lib/iomgr/tcp_server.cc", "src/core/lib/iomgr/tcp_server.h", "src/core/lib/iomgr/tcp_server_custom.cc", "src/core/lib/iomgr/tcp_server_posix.cc", "src/core/lib/iomgr/tcp_server_utils_posix.h", "src/core/lib/iomgr/tcp_server_utils_posix_common.cc", "src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc", "src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc", "src/core/lib/iomgr/tcp_server_windows.cc", "src/core/lib/iomgr/tcp_uv.cc", "src/core/lib/iomgr/tcp_windows.cc", "src/core/lib/iomgr/tcp_windows.h", "src/core/lib/iomgr/time_averaged_stats.cc", "src/core/lib/iomgr/time_averaged_stats.h", "src/core/lib/iomgr/timer.cc", "src/core/lib/iomgr/timer.h", "src/core/lib/iomgr/timer_custom.cc", "src/core/lib/iomgr/timer_custom.h", "src/core/lib/iomgr/timer_generic.cc", "src/core/lib/iomgr/timer_generic.h", "src/core/lib/iomgr/timer_heap.cc", "src/core/lib/iomgr/timer_heap.h", "src/core/lib/iomgr/timer_manager.cc", "src/core/lib/iomgr/timer_manager.h", "src/core/lib/iomgr/timer_uv.cc", "src/core/lib/iomgr/udp_server.cc", "src/core/lib/iomgr/udp_server.h", "src/core/lib/iomgr/unix_sockets_posix.cc", "src/core/lib/iomgr/unix_sockets_posix.h", "src/core/lib/iomgr/unix_sockets_posix_noop.cc", "src/core/lib/iomgr/wakeup_fd_eventfd.cc", "src/core/lib/iomgr/wakeup_fd_nospecial.cc", "src/core/lib/iomgr/wakeup_fd_pipe.cc", "src/core/lib/iomgr/wakeup_fd_pipe.h", "src/core/lib/iomgr/wakeup_fd_posix.cc", "src/core/lib/iomgr/wakeup_fd_posix.h", "src/core/lib/iomgr/work_serializer.cc", "src/core/lib/iomgr/work_serializer.h", "src/core/lib/json/json.h", "src/core/lib/json/json_reader.cc", "src/core/lib/json/json_writer.cc", "src/core/lib/security/context/security_context.cc", "src/core/lib/security/context/security_context.h", "src/core/lib/security/credentials/alts/alts_credentials.cc", "src/core/lib/security/credentials/alts/alts_credentials.h", "src/core/lib/security/credentials/alts/check_gcp_environment.cc", "src/core/lib/security/credentials/alts/check_gcp_environment.h", "src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc", "src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc", "src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc", "src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc", "src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc", "src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h", "src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc", "src/core/lib/security/credentials/composite/composite_credentials.cc", "src/core/lib/security/credentials/composite/composite_credentials.h", "src/core/lib/security/credentials/credentials.cc", "src/core/lib/security/credentials/credentials.h", "src/core/lib/security/credentials/credentials_metadata.cc", "src/core/lib/security/credentials/fake/fake_credentials.cc", "src/core/lib/security/credentials/fake/fake_credentials.h", "src/core/lib/security/credentials/google_default/credentials_generic.cc", "src/core/lib/security/credentials/google_default/google_default_credentials.cc", "src/core/lib/security/credentials/google_default/google_default_credentials.h", "src/core/lib/security/credentials/iam/iam_credentials.cc", "src/core/lib/security/credentials/iam/iam_credentials.h", "src/core/lib/security/credentials/jwt/json_token.cc", "src/core/lib/security/credentials/jwt/json_token.h", "src/core/lib/security/credentials/jwt/jwt_credentials.cc", "src/core/lib/security/credentials/jwt/jwt_credentials.h", "src/core/lib/security/credentials/jwt/jwt_verifier.cc", "src/core/lib/security/credentials/jwt/jwt_verifier.h", "src/core/lib/security/credentials/local/local_credentials.cc", "src/core/lib/security/credentials/local/local_credentials.h", "src/core/lib/security/credentials/oauth2/oauth2_credentials.cc", "src/core/lib/security/credentials/oauth2/oauth2_credentials.h", "src/core/lib/security/credentials/plugin/plugin_credentials.cc", "src/core/lib/security/credentials/plugin/plugin_credentials.h", "src/core/lib/security/credentials/ssl/ssl_credentials.cc", "src/core/lib/security/credentials/ssl/ssl_credentials.h", "src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc", "src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h", "src/core/lib/security/credentials/tls/tls_credentials.cc", "src/core/lib/security/credentials/tls/tls_credentials.h", "src/core/lib/security/security_connector/alts/alts_security_connector.cc", "src/core/lib/security/security_connector/alts/alts_security_connector.h", "src/core/lib/security/security_connector/fake/fake_security_connector.cc", "src/core/lib/security/security_connector/fake/fake_security_connector.h", "src/core/lib/security/security_connector/load_system_roots.h", "src/core/lib/security/security_connector/load_system_roots_fallback.cc", "src/core/lib/security/security_connector/load_system_roots_linux.cc", "src/core/lib/security/security_connector/load_system_roots_linux.h", "src/core/lib/security/security_connector/local/local_security_connector.cc", "src/core/lib/security/security_connector/local/local_security_connector.h", "src/core/lib/security/security_connector/security_connector.cc", "src/core/lib/security/security_connector/security_connector.h", "src/core/lib/security/security_connector/ssl/ssl_security_connector.cc", "src/core/lib/security/security_connector/ssl/ssl_security_connector.h", "src/core/lib/security/security_connector/ssl_utils.cc", "src/core/lib/security/security_connector/ssl_utils.h", "src/core/lib/security/security_connector/ssl_utils_config.cc", "src/core/lib/security/security_connector/ssl_utils_config.h", "src/core/lib/security/security_connector/tls/tls_security_connector.cc", "src/core/lib/security/security_connector/tls/tls_security_connector.h", "src/core/lib/security/transport/auth_filters.h", "src/core/lib/security/transport/client_auth_filter.cc", "src/core/lib/security/transport/secure_endpoint.cc", "src/core/lib/security/transport/secure_endpoint.h", "src/core/lib/security/transport/security_handshaker.cc", "src/core/lib/security/transport/security_handshaker.h", "src/core/lib/security/transport/server_auth_filter.cc", "src/core/lib/security/transport/target_authority_table.cc", "src/core/lib/security/transport/target_authority_table.h", "src/core/lib/security/transport/tsi_error.cc", "src/core/lib/security/transport/tsi_error.h", "src/core/lib/security/util/json_util.cc", "src/core/lib/security/util/json_util.h", "src/core/lib/slice/b64.cc", "src/core/lib/slice/b64.h", "src/core/lib/slice/percent_encoding.cc", "src/core/lib/slice/percent_encoding.h", "src/core/lib/slice/slice.cc", "src/core/lib/slice/slice_buffer.cc", "src/core/lib/slice/slice_hash_table.h", "src/core/lib/slice/slice_intern.cc", "src/core/lib/slice/slice_internal.h", "src/core/lib/slice/slice_string_helpers.cc", "src/core/lib/slice/slice_string_helpers.h", "src/core/lib/slice/slice_utils.h", "src/core/lib/slice/slice_weak_hash_table.h", "src/core/lib/surface/api_trace.cc", "src/core/lib/surface/api_trace.h", "src/core/lib/surface/byte_buffer.cc", "src/core/lib/surface/byte_buffer_reader.cc", "src/core/lib/surface/call.cc", "src/core/lib/surface/call.h", "src/core/lib/surface/call_details.cc", "src/core/lib/surface/call_log_batch.cc", "src/core/lib/surface/call_test_only.h", "src/core/lib/surface/channel.cc", "src/core/lib/surface/channel.h", "src/core/lib/surface/channel_init.cc", "src/core/lib/surface/channel_init.h", "src/core/lib/surface/channel_ping.cc", "src/core/lib/surface/channel_stack_type.cc", "src/core/lib/surface/channel_stack_type.h", "src/core/lib/surface/completion_queue.cc", "src/core/lib/surface/completion_queue.h", "src/core/lib/surface/completion_queue_factory.cc", "src/core/lib/surface/completion_queue_factory.h", "src/core/lib/surface/event_string.cc", "src/core/lib/surface/event_string.h", "src/core/lib/surface/init.cc", "src/core/lib/surface/init.h", "src/core/lib/surface/init_secure.cc", "src/core/lib/surface/lame_client.cc", "src/core/lib/surface/lame_client.h", "src/core/lib/surface/metadata_array.cc", "src/core/lib/surface/server.cc", "src/core/lib/surface/server.h", "src/core/lib/surface/validate_metadata.cc", "src/core/lib/surface/validate_metadata.h", "src/core/lib/surface/version.cc", "src/core/lib/transport/bdp_estimator.cc", "src/core/lib/transport/bdp_estimator.h", "src/core/lib/transport/byte_stream.cc", "src/core/lib/transport/byte_stream.h", "src/core/lib/transport/connectivity_state.cc", "src/core/lib/transport/connectivity_state.h", "src/core/lib/transport/error_utils.cc", "src/core/lib/transport/error_utils.h", "src/core/lib/transport/http2_errors.h", "src/core/lib/transport/metadata.cc", "src/core/lib/transport/metadata.h", "src/core/lib/transport/metadata_batch.cc", "src/core/lib/transport/metadata_batch.h", "src/core/lib/transport/pid_controller.cc", "src/core/lib/transport/pid_controller.h", "src/core/lib/transport/static_metadata.cc", "src/core/lib/transport/static_metadata.h", "src/core/lib/transport/status_conversion.cc", "src/core/lib/transport/status_conversion.h", "src/core/lib/transport/status_metadata.cc", "src/core/lib/transport/status_metadata.h", "src/core/lib/transport/timeout_encoding.cc", "src/core/lib/transport/timeout_encoding.h", "src/core/lib/transport/transport.cc", "src/core/lib/transport/transport.h", "src/core/lib/transport/transport_impl.h", "src/core/lib/transport/transport_op_string.cc", "src/core/lib/uri/uri_parser.cc", "src/core/lib/uri/uri_parser.h", "src/core/plugin_registry/grpc_plugin_registry.cc", "src/core/tsi/alts/crypt/aes_gcm.cc", "src/core/tsi/alts/crypt/gsec.cc", "src/core/tsi/alts/crypt/gsec.h", "src/core/tsi/alts/frame_protector/alts_counter.cc", "src/core/tsi/alts/frame_protector/alts_counter.h", "src/core/tsi/alts/frame_protector/alts_crypter.cc", "src/core/tsi/alts/frame_protector/alts_crypter.h", "src/core/tsi/alts/frame_protector/alts_frame_protector.cc", "src/core/tsi/alts/frame_protector/alts_frame_protector.h", "src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc", "src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h", "src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc", "src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc", "src/core/tsi/alts/frame_protector/frame_handler.cc", "src/core/tsi/alts/frame_protector/frame_handler.h", "src/core/tsi/alts/handshaker/alts_handshaker_client.cc", "src/core/tsi/alts/handshaker/alts_handshaker_client.h", "src/core/tsi/alts/handshaker/alts_shared_resource.cc", "src/core/tsi/alts/handshaker/alts_shared_resource.h", "src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc", "src/core/tsi/alts/handshaker/alts_tsi_handshaker.h", "src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h", "src/core/tsi/alts/handshaker/alts_tsi_utils.cc", "src/core/tsi/alts/handshaker/alts_tsi_utils.h", "src/core/tsi/alts/handshaker/transport_security_common_api.cc", "src/core/tsi/alts/handshaker/transport_security_common_api.h", "src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc", "src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h", "src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc", "src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h", "src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h", "src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc", "src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h", "src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc", "src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h", "src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc", "src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h", "src/core/tsi/fake_transport_security.cc", "src/core/tsi/fake_transport_security.h", "src/core/tsi/local_transport_security.cc", "src/core/tsi/local_transport_security.h", "src/core/tsi/ssl/session_cache/ssl_session.h", "src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc", "src/core/tsi/ssl/session_cache/ssl_session_cache.cc", "src/core/tsi/ssl/session_cache/ssl_session_cache.h", "src/core/tsi/ssl/session_cache/ssl_session_openssl.cc", "src/core/tsi/ssl_transport_security.cc", "src/core/tsi/ssl_transport_security.h", "src/core/tsi/ssl_types.h", "src/core/tsi/transport_security.cc", "src/core/tsi/transport_security.h", "src/core/tsi/transport_security_grpc.cc", "src/core/tsi/transport_security_grpc.h", "src/core/tsi/transport_security_interface.h", ] deps = [ "//third_party/boringssl", "//third_party/zlib", ":gpr", ":address_sorting", ":upb", ":absl/types:optional", ":absl/strings:strings", ":absl/container:inlined_vector", "//third_party/cares", ":address_sorting", ] public_configs = [ ":grpc_config", ] include_dirs = [ "third_party/cares", "third_party/address_sorting/include", ] } source_set("grpc++") { sources = [ "include/grpc++/alarm.h", "include/grpc++/channel.h", "include/grpc++/client_context.h", "include/grpc++/completion_queue.h", "include/grpc++/create_channel.h", "include/grpc++/create_channel_posix.h", "include/grpc++/ext/health_check_service_server_builder_option.h", "include/grpc++/generic/async_generic_service.h", "include/grpc++/generic/generic_stub.h", "include/grpc++/grpc++.h", "include/grpc++/health_check_service_interface.h", "include/grpc++/impl/call.h", "include/grpc++/impl/channel_argument_option.h", "include/grpc++/impl/client_unary_call.h", "include/grpc++/impl/codegen/async_stream.h", "include/grpc++/impl/codegen/async_unary_call.h", "include/grpc++/impl/codegen/byte_buffer.h", "include/grpc++/impl/codegen/call.h", "include/grpc++/impl/codegen/call_hook.h", "include/grpc++/impl/codegen/channel_interface.h", "include/grpc++/impl/codegen/client_context.h", "include/grpc++/impl/codegen/client_unary_call.h", "include/grpc++/impl/codegen/completion_queue.h", "include/grpc++/impl/codegen/completion_queue_tag.h", "include/grpc++/impl/codegen/config.h", "include/grpc++/impl/codegen/config_protobuf.h", "include/grpc++/impl/codegen/core_codegen.h", "include/grpc++/impl/codegen/core_codegen_interface.h", "include/grpc++/impl/codegen/create_auth_context.h", "include/grpc++/impl/codegen/grpc_library.h", "include/grpc++/impl/codegen/metadata_map.h", "include/grpc++/impl/codegen/method_handler_impl.h", "include/grpc++/impl/codegen/proto_utils.h", "include/grpc++/impl/codegen/rpc_method.h", "include/grpc++/impl/codegen/rpc_service_method.h", "include/grpc++/impl/codegen/security/auth_context.h", "include/grpc++/impl/codegen/serialization_traits.h", "include/grpc++/impl/codegen/server_context.h", "include/grpc++/impl/codegen/server_interface.h", "include/grpc++/impl/codegen/service_type.h", "include/grpc++/impl/codegen/slice.h", "include/grpc++/impl/codegen/status.h", "include/grpc++/impl/codegen/status_code_enum.h", "include/grpc++/impl/codegen/string_ref.h", "include/grpc++/impl/codegen/stub_options.h", "include/grpc++/impl/codegen/sync_stream.h", "include/grpc++/impl/codegen/time.h", "include/grpc++/impl/grpc_library.h", "include/grpc++/impl/method_handler_impl.h", "include/grpc++/impl/rpc_method.h", "include/grpc++/impl/rpc_service_method.h", "include/grpc++/impl/serialization_traits.h", "include/grpc++/impl/server_builder_option.h", "include/grpc++/impl/server_builder_plugin.h", "include/grpc++/impl/server_initializer.h", "include/grpc++/impl/service_type.h", "include/grpc++/resource_quota.h", "include/grpc++/security/auth_context.h", "include/grpc++/security/auth_metadata_processor.h", "include/grpc++/security/credentials.h", "include/grpc++/security/server_credentials.h", "include/grpc++/server.h", "include/grpc++/server_builder.h", "include/grpc++/server_context.h", "include/grpc++/server_posix.h", "include/grpc++/support/async_stream.h", "include/grpc++/support/async_unary_call.h", "include/grpc++/support/byte_buffer.h", "include/grpc++/support/channel_arguments.h", "include/grpc++/support/config.h", "include/grpc++/support/slice.h", "include/grpc++/support/status.h", "include/grpc++/support/status_code_enum.h", "include/grpc++/support/string_ref.h", "include/grpc++/support/stub_options.h", "include/grpc++/support/sync_stream.h", "include/grpc++/support/time.h", "include/grpcpp/alarm.h", "include/grpcpp/alarm_impl.h", "include/grpcpp/channel.h", "include/grpcpp/channel_impl.h", "include/grpcpp/client_context.h", "include/grpcpp/completion_queue.h", "include/grpcpp/completion_queue_impl.h", "include/grpcpp/create_channel.h", "include/grpcpp/create_channel_impl.h", "include/grpcpp/create_channel_posix.h", "include/grpcpp/create_channel_posix_impl.h", "include/grpcpp/ext/health_check_service_server_builder_option.h", "include/grpcpp/generic/async_generic_service.h", "include/grpcpp/generic/generic_stub.h", "include/grpcpp/generic/generic_stub_impl.h", "include/grpcpp/grpcpp.h", "include/grpcpp/health_check_service_interface.h", "include/grpcpp/health_check_service_interface_impl.h", "include/grpcpp/impl/call.h", "include/grpcpp/impl/channel_argument_option.h", "include/grpcpp/impl/client_unary_call.h", "include/grpcpp/impl/codegen/async_generic_service.h", "include/grpcpp/impl/codegen/async_stream.h", "include/grpcpp/impl/codegen/async_stream_impl.h", "include/grpcpp/impl/codegen/async_unary_call.h", "include/grpcpp/impl/codegen/async_unary_call_impl.h", "include/grpcpp/impl/codegen/byte_buffer.h", "include/grpcpp/impl/codegen/call.h", "include/grpcpp/impl/codegen/call_hook.h", "include/grpcpp/impl/codegen/call_op_set.h", "include/grpcpp/impl/codegen/call_op_set_interface.h", "include/grpcpp/impl/codegen/callback_common.h", "include/grpcpp/impl/codegen/channel_interface.h", "include/grpcpp/impl/codegen/client_callback.h", "include/grpcpp/impl/codegen/client_callback_impl.h", "include/grpcpp/impl/codegen/client_context.h", "include/grpcpp/impl/codegen/client_context_impl.h", "include/grpcpp/impl/codegen/client_interceptor.h", "include/grpcpp/impl/codegen/client_unary_call.h", "include/grpcpp/impl/codegen/completion_queue.h", "include/grpcpp/impl/codegen/completion_queue_impl.h", "include/grpcpp/impl/codegen/completion_queue_tag.h", "include/grpcpp/impl/codegen/config.h", "include/grpcpp/impl/codegen/config_protobuf.h", "include/grpcpp/impl/codegen/core_codegen.h", "include/grpcpp/impl/codegen/core_codegen_interface.h", "include/grpcpp/impl/codegen/create_auth_context.h", "include/grpcpp/impl/codegen/delegating_channel.h", "include/grpcpp/impl/codegen/grpc_library.h", "include/grpcpp/impl/codegen/intercepted_channel.h", "include/grpcpp/impl/codegen/interceptor.h", "include/grpcpp/impl/codegen/interceptor_common.h", "include/grpcpp/impl/codegen/message_allocator.h", "include/grpcpp/impl/codegen/metadata_map.h", "include/grpcpp/impl/codegen/method_handler.h", "include/grpcpp/impl/codegen/method_handler_impl.h", "include/grpcpp/impl/codegen/proto_buffer_reader.h", "include/grpcpp/impl/codegen/proto_buffer_writer.h", "include/grpcpp/impl/codegen/proto_utils.h", "include/grpcpp/impl/codegen/rpc_method.h", "include/grpcpp/impl/codegen/rpc_service_method.h", "include/grpcpp/impl/codegen/security/auth_context.h", "include/grpcpp/impl/codegen/serialization_traits.h", "include/grpcpp/impl/codegen/server_callback.h", "include/grpcpp/impl/codegen/server_callback_handlers.h", "include/grpcpp/impl/codegen/server_callback_impl.h", "include/grpcpp/impl/codegen/server_context.h", "include/grpcpp/impl/codegen/server_context_impl.h", "include/grpcpp/impl/codegen/server_interceptor.h", "include/grpcpp/impl/codegen/server_interface.h", "include/grpcpp/impl/codegen/service_type.h", "include/grpcpp/impl/codegen/slice.h", "include/grpcpp/impl/codegen/status.h", "include/grpcpp/impl/codegen/status_code_enum.h", "include/grpcpp/impl/codegen/string_ref.h", "include/grpcpp/impl/codegen/stub_options.h", "include/grpcpp/impl/codegen/sync.h", "include/grpcpp/impl/codegen/sync_stream.h", "include/grpcpp/impl/codegen/sync_stream_impl.h", "include/grpcpp/impl/codegen/time.h", "include/grpcpp/impl/grpc_library.h", "include/grpcpp/impl/method_handler_impl.h", "include/grpcpp/impl/rpc_method.h", "include/grpcpp/impl/rpc_service_method.h", "include/grpcpp/impl/serialization_traits.h", "include/grpcpp/impl/server_builder_option.h", "include/grpcpp/impl/server_builder_option_impl.h", "include/grpcpp/impl/server_builder_plugin.h", "include/grpcpp/impl/server_initializer.h", "include/grpcpp/impl/server_initializer_impl.h", "include/grpcpp/impl/service_type.h", "include/grpcpp/resource_quota.h", "include/grpcpp/resource_quota_impl.h", "include/grpcpp/security/auth_context.h", "include/grpcpp/security/auth_metadata_processor.h", "include/grpcpp/security/auth_metadata_processor_impl.h", "include/grpcpp/security/credentials.h", "include/grpcpp/security/credentials_impl.h", "include/grpcpp/security/server_credentials.h", "include/grpcpp/security/server_credentials_impl.h", "include/grpcpp/security/tls_credentials_options.h", "include/grpcpp/server.h", "include/grpcpp/server_builder.h", "include/grpcpp/server_builder_impl.h", "include/grpcpp/server_context.h", "include/grpcpp/server_impl.h", "include/grpcpp/server_posix.h", "include/grpcpp/server_posix_impl.h", "include/grpcpp/support/async_stream.h", "include/grpcpp/support/async_stream_impl.h", "include/grpcpp/support/async_unary_call.h", "include/grpcpp/support/async_unary_call_impl.h", "include/grpcpp/support/byte_buffer.h", "include/grpcpp/support/channel_arguments.h", "include/grpcpp/support/channel_arguments_impl.h", "include/grpcpp/support/client_callback.h", "include/grpcpp/support/client_callback_impl.h", "include/grpcpp/support/client_interceptor.h", "include/grpcpp/support/config.h", "include/grpcpp/support/interceptor.h", "include/grpcpp/support/message_allocator.h", "include/grpcpp/support/method_handler.h", "include/grpcpp/support/proto_buffer_reader.h", "include/grpcpp/support/proto_buffer_writer.h", "include/grpcpp/support/server_callback.h", "include/grpcpp/support/server_callback_impl.h", "include/grpcpp/support/server_interceptor.h", "include/grpcpp/support/slice.h", "include/grpcpp/support/status.h", "include/grpcpp/support/status_code_enum.h", "include/grpcpp/support/string_ref.h", "include/grpcpp/support/stub_options.h", "include/grpcpp/support/sync_stream.h", "include/grpcpp/support/sync_stream_impl.h", "include/grpcpp/support/time.h", "include/grpcpp/support/validate_service_config.h", "src/cpp/client/channel_cc.cc", "src/cpp/client/client_context.cc", "src/cpp/client/client_interceptor.cc", "src/cpp/client/create_channel.cc", "src/cpp/client/create_channel_internal.cc", "src/cpp/client/create_channel_internal.h", "src/cpp/client/create_channel_posix.cc", "src/cpp/client/credentials_cc.cc", "src/cpp/client/insecure_credentials.cc", "src/cpp/client/secure_credentials.cc", "src/cpp/client/secure_credentials.h", "src/cpp/codegen/codegen_init.cc", "src/cpp/common/alarm.cc", "src/cpp/common/auth_property_iterator.cc", "src/cpp/common/channel_arguments.cc", "src/cpp/common/channel_filter.cc", "src/cpp/common/channel_filter.h", "src/cpp/common/completion_queue_cc.cc", "src/cpp/common/core_codegen.cc", "src/cpp/common/resource_quota_cc.cc", "src/cpp/common/rpc_method.cc", "src/cpp/common/secure_auth_context.cc", "src/cpp/common/secure_auth_context.h", "src/cpp/common/secure_channel_arguments.cc", "src/cpp/common/secure_create_auth_context.cc", "src/cpp/common/tls_credentials_options.cc", "src/cpp/common/tls_credentials_options_util.cc", "src/cpp/common/tls_credentials_options_util.h", "src/cpp/common/validate_service_config.cc", "src/cpp/common/version_cc.cc", "src/cpp/server/async_generic_service.cc", "src/cpp/server/channel_argument_option.cc", "src/cpp/server/create_default_thread_pool.cc", "src/cpp/server/dynamic_thread_pool.cc", "src/cpp/server/dynamic_thread_pool.h", "src/cpp/server/external_connection_acceptor_impl.cc", "src/cpp/server/external_connection_acceptor_impl.h", "src/cpp/server/health/default_health_check_service.cc", "src/cpp/server/health/default_health_check_service.h", "src/cpp/server/health/health_check_service.cc", "src/cpp/server/health/health_check_service_server_builder_option.cc", "src/cpp/server/insecure_server_credentials.cc", "src/cpp/server/secure_server_credentials.cc", "src/cpp/server/secure_server_credentials.h", "src/cpp/server/server_builder.cc", "src/cpp/server/server_callback.cc", "src/cpp/server/server_cc.cc", "src/cpp/server/server_context.cc", "src/cpp/server/server_credentials.cc", "src/cpp/server/server_posix.cc", "src/cpp/server/thread_pool_interface.h", "src/cpp/thread_manager/thread_manager.cc", "src/cpp/thread_manager/thread_manager.h", "src/cpp/util/byte_buffer_cc.cc", "src/cpp/util/status.cc", "src/cpp/util/string_ref.cc", "src/cpp/util/time_cc.cc", ] deps = [ "//third_party/protobuf:protobuf_lite", ":grpc", ":gpr", ":address_sorting", ":upb", ] public_configs = [ ":grpc_config", ] } # Only compile the plugin for the host architecture. if (current_toolchain == host_toolchain) { source_set("grpc_plugin_support") { sources = [ "include/grpc++/impl/codegen/config_protobuf.h", "include/grpcpp/impl/codegen/config_protobuf.h", "src/compiler/config.h", "src/compiler/config_protobuf.h", "src/compiler/cpp_generator.cc", "src/compiler/cpp_generator.h", "src/compiler/cpp_generator_helpers.h", "src/compiler/cpp_plugin.h", "src/compiler/csharp_generator.cc", "src/compiler/csharp_generator.h", "src/compiler/csharp_generator_helpers.h", "src/compiler/generator_helpers.h", "src/compiler/node_generator.cc", "src/compiler/node_generator.h", "src/compiler/node_generator_helpers.h", "src/compiler/objective_c_generator.cc", "src/compiler/objective_c_generator.h", "src/compiler/objective_c_generator_helpers.h", "src/compiler/php_generator.cc", "src/compiler/php_generator.h", "src/compiler/php_generator_helpers.h", "src/compiler/protobuf_plugin.h", "src/compiler/python_generator.cc", "src/compiler/python_generator.h", "src/compiler/python_generator_helpers.h", "src/compiler/python_private_generator.h", "src/compiler/schema_interface.h", ] deps = [ "//third_party/protobuf:protoc_lib", ] public_configs = [ ":grpc_config", ] } } # Only compile the plugin for the host architecture. if (current_toolchain == host_toolchain) { executable("grpc_cpp_plugin") { sources = [ "src/compiler/cpp_plugin.cc", ] deps = [ "//third_party/protobuf:protoc_lib", ":grpc_plugin_support", ] configs += [ "//third_party/protobuf:protobuf_config", ] public_configs = [ ":grpc_config" ] } } grpc-1.30.2/BUILDING.md000066400000000000000000000236051370425124100142540ustar00rootroot00000000000000gRPC C++ - Building from source =========================== This document has detailed instructions on how to build gRPC C++ from source. Note that it only covers the build of gRPC itself and is mostly meant for gRPC C++ contributors and/or power users. Other should follow the user instructions. See the [How to use](https://github.com/grpc/grpc/tree/master/src/cpp#to-start-using-grpc-c) instructions for guidance on how to add gRPC as a dependency to a C++ application (there are several ways and system wide installation is often not the best choice). # Pre-requisites ## Linux ```sh $ [sudo] apt-get install build-essential autoconf libtool pkg-config ``` If you plan to build using CMake ```sh $ [sudo] apt-get install cmake ``` If you are a contributor and plan to build and run tests, install the following as well: ```sh $ # libgflags-dev is only required if building with make (deprecated) $ [sudo] apt-get install libgflags-dev $ # clang and LLVM C++ lib is only required for sanitizer builds $ [sudo] apt-get install clang-5.0 libc++-dev ``` ## MacOS On a Mac, you will first need to install Xcode or [Command Line Tools for Xcode](https://developer.apple.com/download/more/) and then run the following command from a terminal: ```sh $ [sudo] xcode-select --install ``` To build gRPC from source, you may need to install the following packages from [Homebrew](https://brew.sh): ```sh $ brew install autoconf automake libtool shtool ``` If you plan to build using CMake, follow the instructions from https://cmake.org/download/ If you are a contributor and plan to build and run tests, install the following as well: ```sh $ # gflags is only required if building with make (deprecated) $ brew install gflags ``` *Tip*: when building, you *may* want to explicitly set the `LIBTOOL` and `LIBTOOLIZE` environment variables when running `make` to ensure the version installed by `brew` is being used: ```sh $ LIBTOOL=glibtool LIBTOOLIZE=glibtoolize make ``` ## Windows To prepare for cmake + Microsoft Visual C++ compiler build - Install Visual Studio 2015 or 2017 (Visual C++ compiler will be used). - Install [Git](https://git-scm.com/). - Install [CMake](https://cmake.org/download/). - Install [nasm](https://www.nasm.us/) and add it to `PATH` (`choco install nasm`) - *required by boringssl* - (Optional) Install [Ninja](https://ninja-build.org/) (`choco install ninja`) # Clone the repository (including submodules) Before building, you need to clone the gRPC github repository and download submodules containing source code for gRPC's dependencies (that's done by the `submodule` command or `--recursive` flag). Use following commands to clone the gRPC repository at the [latest stable release tag](https://github.com/grpc/grpc/releases) ## Unix ```sh $ git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc $ cd grpc $ git submodule update --init ``` ## Windows ``` > git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc > cd grpc > git submodule update --init ``` NOTE: The `bazel` build tool uses a different model for dependencies. You only need to worry about downloading submodules if you're building with something else than `bazel` (e.g. `cmake`). # Build from source In the C++ world, there's no "standard" build system that would work for in all supported use cases and on all supported platforms. Therefore, gRPC supports several major build systems, which should satisfy most users. Depending on your needs we recommend building using `bazel` or `cmake`. ## Building with bazel (recommended) Bazel is the primary build system for gRPC C++ and if you're comfortable with using bazel, we can certainly recommend it. Using bazel will give you the best developer experience as well as faster and cleaner builds. You'll need `bazel` version `1.0.0` or higher to build gRPC. See [Installing Bazel](https://docs.bazel.build/versions/master/install.html) for instructions how to install bazel on your system. We support building with `bazel` on Linux, MacOS and Windows. From the grpc repository root ``` # Build gRPC C++ $ bazel build :all ``` ``` # Run all the C/C++ tests $ bazel test --config=dbg //test/... ``` NOTE: If you are gRPC maintainer and you have access to our test cluster, you should use the our [gRPC's Remote Execution environment](tools/remote_build/README.md) to get significant improvement to the build and test speed (and a bunch of other very useful features). ## Building with CMake ### Linux/Unix, Using Make Run from grpc directory after cloning the repo with --recursive or updating submodules. ``` $ mkdir -p cmake/build $ cd cmake/build $ cmake ../.. $ make ``` If you want to build shared libraries (`.so` files), run `cmake` with `-DBUILD_SHARED_LIBS=ON`. ### Windows, Using Visual Studio 2015 or 2017 When using the "Visual Studio" generator, cmake will generate a solution (`grpc.sln`) that contains a VS project for every target defined in `CMakeLists.txt` (+ few extra convenience projects added automatically by cmake). After opening the solution with Visual Studio you will be able to browse and build the code. ``` > @rem Run from grpc directory after cloning the repo with --recursive or updating submodules. > md .build > cd .build > cmake .. -G "Visual Studio 14 2015" > cmake --build . --config Release ``` If you want to build DLLs, run `cmake` with `-DBUILD_SHARED_LIBS=ON`. ### Windows, Using Ninja (faster build). Please note that when using Ninja, you will still need Visual C++ (part of Visual Studio) installed to be able to compile the C/C++ sources. ``` > @rem Run from grpc directory after cloning the repo with --recursive or updating submodules. > cd cmake > md build > cd build > call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" x64 > cmake ..\.. -GNinja -DCMAKE_BUILD_TYPE=Release > cmake --build . ``` If you want to build DLLs, run `cmake` with `-DBUILD_SHARED_LIBS=ON`. ### Dependency management gRPC's CMake build system has two options for handling dependencies. CMake can build the dependencies for you, or it can search for libraries that are already installed on your system and use them to build gRPC. This behavior is controlled by the `gRPC__PROVIDER` CMake variables, e.g. `gRPC_CARES_PROVIDER`. The options that these variables take are as follows: * module - build dependencies alongside gRPC. The source code is obtained from gRPC's git submodules. * package - use external copies of dependencies that are already available on your system. These could come from your system package manager, or perhaps you pre-installed them using CMake with the `CMAKE_INSTALL_PREFIX` option. For example, if you set `gRPC_CARES_PROVIDER=module`, then CMake will build c-ares before building gRPC. On the other hand, if you set `gRPC_CARES_PROVIDER=package`, then CMake will search for a copy of c-ares that's already installed on your system and use it to build gRPC. ### Install after build Perform the following steps to install gRPC using CMake. * Set `-DgRPC_INSTALL=ON` * Build the `install` target The install destination is controlled by the [`CMAKE_INSTALL_PREFIX`](https://cmake.org/cmake/help/latest/variable/CMAKE_INSTALL_PREFIX.html) variable. If you are running CMake v3.13 or newer you can build gRPC's dependencies in "module" mode and install them alongside gRPC in a single step. [Example](test/distrib/cpp/run_distrib_test_cmake_module_install.sh) If you are building gRPC < 1.27 or if you are using CMake < 3.13 you will need to select "package" mode (rather than "module" mode) for the dependencies. This means you will need to have external copies of these libraries available on your system. This [example](test/distrib/cpp/run_distrib_test_cmake.sh) shows how to install dependencies with cmake before proceeding to installing gRPC itself. ``` # NOTE: all of gRPC's dependencies need to be already installed $ cmake ../.. -DgRPC_INSTALL=ON \ -DCMAKE_BUILD_TYPE=Release \ -DgRPC_ABSL_PROVIDER=package \ -DgRPC_CARES_PROVIDER=package \ -DgRPC_PROTOBUF_PROVIDER=package \ -DgRPC_SSL_PROVIDER=package \ -DgRPC_ZLIB_PROVIDER=package $ make $ make install ``` ### Cross-compiling You can use CMake to cross-compile gRPC for another architecture. In order to do so, you will first need to build `protoc` and `grpc_cpp_plugin` for the host architecture. These tools are used during the build of gRPC, so we need copies of executables that can be run natively. You will likely need to install the toolchain for the platform you are targeting for your cross-compile. Once you have done so, you can write a toolchain file to tell CMake where to find the compilers and system tools that will be used for this build. This toolchain file is specified to CMake by setting the `CMAKE_TOOLCHAIN_FILE` variable. ``` $ cmake ../.. -DCMAKE_TOOLCHAIN_FILE=path/to/file $ make ``` [Cross-compile example](test/distrib/cpp/run_distrib_test_raspberry_pi.sh) ## Building with make on UNIX systems (deprecated) NOTE: `make` used to be gRPC's default build system, but we're no longer recommending it. You should use `bazel` or `cmake` instead. The `Makefile` is only intended for internal usage and is not meant for public consumption. From the grpc repository root ```sh $ make ``` NOTE: if you get an error on linux such as 'aclocal-1.15: command not found', which can happen if you ran 'make' before installing the pre-reqs, try the following: ```sh $ git clean -f -d -x && git submodule foreach --recursive git clean -f -d -x $ [sudo] apt-get install build-essential autoconf libtool pkg-config $ make ``` ### A note on `protoc` By default gRPC uses [protocol buffers](https://github.com/google/protobuf), you will need the `protoc` compiler to generate stub server and client code. If you compile gRPC from source, as described below, the Makefile will automatically try compiling the `protoc` in third_party if you cloned the repository recursively and it detects that you do not already have 'protoc' compiler installed. grpc-1.30.2/CMakeLists.txt000066400000000000000000015543631370425124100153100ustar00rootroot00000000000000# GRPC global cmake file # This currently builds C and C++ code. # This file has been automatically generated from a template file. # Please look at the templates directory instead. # This file can be regenerated from the template by running # tools/buildgen/generate_projects.sh # # Copyright 2015 gRPC 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 # # 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. cmake_minimum_required(VERSION 3.5.1) set(PACKAGE_NAME "grpc") set(PACKAGE_VERSION "1.30.2") set(gRPC_CORE_VERSION "10.0.0") set(gRPC_CORE_SOVERSION "10") set(gRPC_CPP_VERSION "1.30.2") set(gRPC_CPP_SOVERSION "1") set(gRPC_CSHARP_VERSION "2.30.2") set(gRPC_CSHARP_SOVERSION "2") set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}") set(PACKAGE_TARNAME "${PACKAGE_NAME}-${PACKAGE_VERSION}") set(PACKAGE_BUGREPORT "https://github.com/grpc/grpc/issues/") project(${PACKAGE_NAME} LANGUAGES C CXX) set(gRPC_INSTALL_BINDIR "bin" CACHE STRING "Installation directory for executables") set(gRPC_INSTALL_LIBDIR "lib" CACHE STRING "Installation directory for libraries") set(gRPC_INSTALL_INCLUDEDIR "include" CACHE STRING "Installation directory for headers") set(gRPC_INSTALL_CMAKEDIR "lib/cmake/${PACKAGE_NAME}" CACHE STRING "Installation directory for cmake config files") set(gRPC_INSTALL_SHAREDIR "share/grpc" CACHE STRING "Installation directory for root certificates") # Options option(gRPC_BUILD_TESTS "Build tests" OFF) option(gRPC_BUILD_CODEGEN "Build codegen" ON) option(gRPC_BUILD_CSHARP_EXT "Build C# extensions" ON) option(gRPC_BACKWARDS_COMPATIBILITY_MODE "Build libraries that are binary compatible across a larger number of OS and libc versions" OFF) set(gRPC_INSTALL_default ON) if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) # Disable gRPC_INSTALL by default if building as a submodule set(gRPC_INSTALL_default OFF) endif() set(gRPC_INSTALL ${gRPC_INSTALL_default} CACHE BOOL "Generate installation target") # We can install dependencies from submodules if we're running # CMake v3.13 or newer. if(CMAKE_VERSION VERSION_LESS 3.13) set(_gRPC_INSTALL_SUPPORTED_FROM_MODULE OFF) else() set(_gRPC_INSTALL_SUPPORTED_FROM_MODULE ON) endif() # Providers for third-party dependencies (gRPC_*_PROVIDER properties): # "module": build the dependency using sources from git submodule (under third_party) # "package": use cmake's find_package functionality to locate a pre-installed dependency set(gRPC_ZLIB_PROVIDER "module" CACHE STRING "Provider of zlib library") set_property(CACHE gRPC_ZLIB_PROVIDER PROPERTY STRINGS "module" "package") set(gRPC_CARES_PROVIDER "module" CACHE STRING "Provider of c-ares library") set_property(CACHE gRPC_CARES_PROVIDER PROPERTY STRINGS "module" "package") set(gRPC_SSL_PROVIDER "module" CACHE STRING "Provider of ssl library") set_property(CACHE gRPC_SSL_PROVIDER PROPERTY STRINGS "module" "package") set(gRPC_PROTOBUF_PROVIDER "module" CACHE STRING "Provider of protobuf library") set_property(CACHE gRPC_PROTOBUF_PROVIDER PROPERTY STRINGS "module" "package") set(gRPC_PROTOBUF_PACKAGE_TYPE "" CACHE STRING "Algorithm for searching protobuf package") set_property(CACHE gRPC_PROTOBUF_PACKAGE_TYPE PROPERTY STRINGS "CONFIG" "MODULE") if(gRPC_BUILD_TESTS) set(gRPC_GFLAGS_PROVIDER "module" CACHE STRING "Provider of gflags library") set_property(CACHE gRPC_GFLAGS_PROVIDER PROPERTY STRINGS "module" "package") set(gRPC_BENCHMARK_PROVIDER "module" CACHE STRING "Provider of benchmark library") set_property(CACHE gRPC_BENCHMARK_PROVIDER PROPERTY STRINGS "module" "package") else() set(gRPC_GFLAGS_PROVIDER "none") set(gRPC_BENCHMARK_PROVIDER "none") endif() set(gRPC_ABSL_PROVIDER "module" CACHE STRING "Provider of absl library") set_property(CACHE gRPC_ABSL_PROVIDER PROPERTY STRINGS "module" "package") set(gRPC_ABSL_USED_TARGETS absl_algorithm absl_atomic_hook absl_bad_optional_access absl_base absl_base_internal absl_bits absl_civil_time absl_compressed_tuple absl_config absl_core_headers absl_dynamic_annotations absl_endian absl_errno_saver absl_inlined_vector absl_inlined_vector_internal absl_int128 absl_log_severity absl_memory absl_optional absl_raw_logging_internal absl_span absl_spinlock_wait absl_str_format absl_str_format_internal absl_strings absl_strings_internal absl_throw_delegate absl_time absl_time_zone absl_type_traits absl_utility absl_meta ) set(gRPC_USE_PROTO_LITE OFF CACHE BOOL "Use the protobuf-lite library") if(UNIX) if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") set(_gRPC_PLATFORM_LINUX ON) elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set(_gRPC_PLATFORM_MAC ON) elseif(${CMAKE_SYSTEM_NAME} MATCHES "iOS") set(_gRPC_PLATFORM_IOS ON) elseif(${CMAKE_SYSTEM_NAME} MATCHES "Android") set(_gRPC_PLATFORM_ANDROID ON) else() set(_gRPC_PLATFORM_POSIX ON) endif() endif() if(WIN32) set(_gRPC_PLATFORM_WINDOWS ON) endif() # Use C99 standard if (NOT DEFINED CMAKE_C_STANDARD) set(CMAKE_C_STANDARD 99) endif() # Add c++11 flags if (NOT DEFINED CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 11) else() if (CMAKE_CXX_STANDARD LESS 11) message(FATAL_ERROR "CMAKE_CXX_STANDARD is less than 11, please specify at least SET(CMAKE_CXX_STANDARD 11)") endif() endif() if (NOT DEFINED CMAKE_CXX_STANDARD_REQUIRED) set(CMAKE_CXX_STANDARD_REQUIRED ON) endif() if (NOT DEFINED CMAKE_CXX_EXTENSIONS) set(CMAKE_CXX_EXTENSIONS OFF) endif() if (NOT DEFINED CMAKE_POSITION_INDEPENDENT_CODE) set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) endif() list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules") if(MSVC) include(cmake/msvc_static_runtime.cmake) add_definitions(-D_WIN32_WINNT=0x600 -D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS -D_WINSOCK_DEPRECATED_NO_WARNINGS) # needed to compile protobuf set(_gRPC_C_CXX_FLAGS "${_gRPC_C_CXX_FLAGS} /wd4065 /wd4506") # TODO(jtattermusch): revisit warnings that were silenced as part of upgrade to protobuf3.6.0 set(_gRPC_C_CXX_FLAGS "${_gRPC_C_CXX_FLAGS} /wd4200 /wd4291 /wd4244") # TODO(jtattermusch): revisit C4267 occurrences throughout the code set(_gRPC_C_CXX_FLAGS "${_gRPC_C_CXX_FLAGS} /wd4267") # TODO(jtattermusch): needed to build boringssl with VS2017, revisit later set(_gRPC_C_CXX_FLAGS "${_gRPC_C_CXX_FLAGS} /wd4987 /wd4774 /wd4819 /wd4996 /wd4619") endif() if (MINGW) add_definitions(-D_WIN32_WINNT=0x600) endif() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_gRPC_C_CXX_FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_gRPC_C_CXX_FLAGS}") if(gRPC_USE_PROTO_LITE) set(_gRPC_PROTOBUF_LIBRARY_NAME "libprotobuf-lite") add_definitions("-DGRPC_USE_PROTO_LITE") else() set(_gRPC_PROTOBUF_LIBRARY_NAME "libprotobuf") endif() if(gRPC_BACKWARDS_COMPATIBILITY_MODE) add_definitions(-DGPR_BACKWARDS_COMPATIBILITY_MODE) if(_gRPC_PLATFORM_MAC) # some C++11 constructs not supported before OS X 10.9 set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9) endif() endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_IOS) set(_gRPC_CORE_NOSTDCXX_FLAGS -fno-exceptions -fno-rtti) else() set(_gRPC_CORE_NOSTDCXX_FLAGS "") endif() include(cmake/abseil-cpp.cmake) include(cmake/address_sorting.cmake) include(cmake/benchmark.cmake) include(cmake/cares.cmake) include(cmake/gflags.cmake) include(cmake/protobuf.cmake) include(cmake/ssl.cmake) include(cmake/upb.cmake) include(cmake/zlib.cmake) if(_gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_IOS) set(_gRPC_ALLTARGETS_LIBRARIES ${CMAKE_DL_LIBS} m pthread) elseif(_gRPC_PLATFORM_ANDROID) set(_gRPC_ALLTARGETS_LIBRARIES ${CMAKE_DL_LIBS} m) elseif(UNIX) set(_gRPC_ALLTARGETS_LIBRARIES ${CMAKE_DL_LIBS} rt m pthread) endif() if(WIN32) set(_gRPC_BASELIB_LIBRARIES wsock32 ws2_32 crypt32) endif() # Create directory for generated .proto files set(_gRPC_PROTO_GENS_DIR ${CMAKE_BINARY_DIR}/gens) file(MAKE_DIRECTORY ${_gRPC_PROTO_GENS_DIR}) # protobuf_generate_grpc_cpp # -------------------------- # # Add custom commands to process ``.proto`` files to C++ using protoc and # GRPC plugin:: # # protobuf_generate_grpc_cpp [...] # # ``ARGN`` # ``.proto`` files # function(protobuf_generate_grpc_cpp) if(NOT ARGN) message(SEND_ERROR "Error: PROTOBUF_GENERATE_GRPC_CPP() called without any proto files") return() endif() set(_protobuf_include_path -I . -I ${_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR}) foreach(FIL ${ARGN}) get_filename_component(ABS_FIL ${FIL} ABSOLUTE) get_filename_component(FIL_WE ${FIL} NAME_WE) file(RELATIVE_PATH REL_FIL ${CMAKE_CURRENT_SOURCE_DIR} ${ABS_FIL}) get_filename_component(REL_DIR ${REL_FIL} DIRECTORY) set(RELFIL_WE "${REL_DIR}/${FIL_WE}") #if cross-compiling, find host plugin if(CMAKE_CROSSCOMPILING) find_program(_gRPC_CPP_PLUGIN grpc_cpp_plugin) else() set(_gRPC_CPP_PLUGIN $) endif() add_custom_command( OUTPUT "${_gRPC_PROTO_GENS_DIR}/${RELFIL_WE}.grpc.pb.cc" "${_gRPC_PROTO_GENS_DIR}/${RELFIL_WE}.grpc.pb.h" "${_gRPC_PROTO_GENS_DIR}/${RELFIL_WE}_mock.grpc.pb.h" "${_gRPC_PROTO_GENS_DIR}/${RELFIL_WE}.pb.cc" "${_gRPC_PROTO_GENS_DIR}/${RELFIL_WE}.pb.h" COMMAND ${_gRPC_PROTOBUF_PROTOC_EXECUTABLE} ARGS --grpc_out=generate_mock_code=true:${_gRPC_PROTO_GENS_DIR} --cpp_out=${_gRPC_PROTO_GENS_DIR} --plugin=protoc-gen-grpc=${_gRPC_CPP_PLUGIN} ${_protobuf_include_path} ${REL_FIL} DEPENDS ${ABS_FIL} ${_gRPC_PROTOBUF_PROTOC} grpc_cpp_plugin WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "Running gRPC C++ protocol buffer compiler on ${FIL}" VERBATIM) endforeach() endfunction() # These options allow users to enable or disable the building of the various # protoc plugins. For example, running CMake with # -DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF will disable building the C# plugin. set(_gRPC_PLUGIN_LIST) option(gRPC_BUILD_GRPC_CPP_PLUGIN "Build grpc_cpp_plugin" ON) if (gRPC_BUILD_GRPC_CPP_PLUGIN) list(APPEND _gRPC_PLUGIN_LIST grpc_cpp_plugin) endif () option(gRPC_BUILD_GRPC_CSHARP_PLUGIN "Build grpc_csharp_plugin" ON) if (gRPC_BUILD_GRPC_CSHARP_PLUGIN) list(APPEND _gRPC_PLUGIN_LIST grpc_csharp_plugin) endif () option(gRPC_BUILD_GRPC_NODE_PLUGIN "Build grpc_node_plugin" ON) if (gRPC_BUILD_GRPC_NODE_PLUGIN) list(APPEND _gRPC_PLUGIN_LIST grpc_node_plugin) endif () option(gRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN "Build grpc_objective_c_plugin" ON) if (gRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN) list(APPEND _gRPC_PLUGIN_LIST grpc_objective_c_plugin) endif () option(gRPC_BUILD_GRPC_PHP_PLUGIN "Build grpc_php_plugin" ON) if (gRPC_BUILD_GRPC_PHP_PLUGIN) list(APPEND _gRPC_PLUGIN_LIST grpc_php_plugin) endif () option(gRPC_BUILD_GRPC_PYTHON_PLUGIN "Build grpc_python_plugin" ON) if (gRPC_BUILD_GRPC_PYTHON_PLUGIN) list(APPEND _gRPC_PLUGIN_LIST grpc_python_plugin) endif () option(gRPC_BUILD_GRPC_RUBY_PLUGIN "Build grpc_ruby_plugin" ON) if (gRPC_BUILD_GRPC_RUBY_PLUGIN) list(APPEND _gRPC_PLUGIN_LIST grpc_ruby_plugin) endif () add_custom_target(plugins DEPENDS ${_gRPC_PLUGIN_LIST} ) add_custom_target(tools_c DEPENDS check_epollexclusive ) add_custom_target(tools_cxx DEPENDS gen_hpack_tables gen_legal_metadata_characters gen_percent_encoding_tables ) add_custom_target(tools DEPENDS tools_c tools_cxx) protobuf_generate_grpc_cpp( src/proto/grpc/channelz/channelz.proto ) protobuf_generate_grpc_cpp( src/proto/grpc/core/stats.proto ) protobuf_generate_grpc_cpp( src/proto/grpc/health/v1/health.proto ) protobuf_generate_grpc_cpp( src/proto/grpc/lb/v1/load_balancer.proto ) protobuf_generate_grpc_cpp( src/proto/grpc/reflection/v1alpha/reflection.proto ) protobuf_generate_grpc_cpp( src/proto/grpc/status/status.proto ) protobuf_generate_grpc_cpp( src/proto/grpc/testing/benchmark_service.proto ) protobuf_generate_grpc_cpp( src/proto/grpc/testing/control.proto ) protobuf_generate_grpc_cpp( src/proto/grpc/testing/duplicate/echo_duplicate.proto ) protobuf_generate_grpc_cpp( src/proto/grpc/testing/echo.proto ) protobuf_generate_grpc_cpp( src/proto/grpc/testing/echo_messages.proto ) protobuf_generate_grpc_cpp( src/proto/grpc/testing/empty.proto ) protobuf_generate_grpc_cpp( src/proto/grpc/testing/messages.proto ) protobuf_generate_grpc_cpp( src/proto/grpc/testing/payloads.proto ) protobuf_generate_grpc_cpp( src/proto/grpc/testing/report_qps_scenario_service.proto ) protobuf_generate_grpc_cpp( src/proto/grpc/testing/simple_messages.proto ) protobuf_generate_grpc_cpp( src/proto/grpc/testing/stats.proto ) protobuf_generate_grpc_cpp( src/proto/grpc/testing/test.proto ) protobuf_generate_grpc_cpp( src/proto/grpc/testing/worker_service.proto ) protobuf_generate_grpc_cpp( src/proto/grpc/testing/xds/ads_for_test.proto ) protobuf_generate_grpc_cpp( src/proto/grpc/testing/xds/cds_for_test.proto ) protobuf_generate_grpc_cpp( src/proto/grpc/testing/xds/eds_for_test.proto ) protobuf_generate_grpc_cpp( src/proto/grpc/testing/xds/lds_rds_for_test.proto ) protobuf_generate_grpc_cpp( src/proto/grpc/testing/xds/lrs_for_test.proto ) protobuf_generate_grpc_cpp( src/proto/grpc/testing/xds/orca_load_report_for_test.proto ) protobuf_generate_grpc_cpp( test/core/tsi/alts/fake_handshaker/handshaker.proto ) protobuf_generate_grpc_cpp( test/core/tsi/alts/fake_handshaker/transport_security_common.proto ) if(gRPC_BUILD_TESTS) add_custom_target(buildtests_c) add_dependencies(buildtests_c algorithm_test) add_dependencies(buildtests_c alloc_test) add_dependencies(buildtests_c alpn_test) add_dependencies(buildtests_c alts_counter_test) add_dependencies(buildtests_c alts_crypt_test) add_dependencies(buildtests_c alts_crypter_test) add_dependencies(buildtests_c alts_frame_protector_test) add_dependencies(buildtests_c alts_grpc_record_protocol_test) add_dependencies(buildtests_c alts_handshaker_client_test) add_dependencies(buildtests_c alts_iovec_record_protocol_test) add_dependencies(buildtests_c alts_security_connector_test) add_dependencies(buildtests_c alts_tsi_handshaker_test) add_dependencies(buildtests_c alts_tsi_utils_test) add_dependencies(buildtests_c alts_zero_copy_grpc_protector_test) add_dependencies(buildtests_c arena_test) add_dependencies(buildtests_c auth_context_test) add_dependencies(buildtests_c avl_test) add_dependencies(buildtests_c b64_test) add_dependencies(buildtests_c bad_server_response_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c bad_ssl_alpn_test) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c bad_ssl_cert_test) endif() add_dependencies(buildtests_c bin_decoder_test) add_dependencies(buildtests_c bin_encoder_test) add_dependencies(buildtests_c buffer_list_test) add_dependencies(buildtests_c channel_args_test) add_dependencies(buildtests_c channel_create_test) add_dependencies(buildtests_c channel_stack_builder_test) add_dependencies(buildtests_c channel_stack_test) add_dependencies(buildtests_c check_gcp_environment_linux_test) add_dependencies(buildtests_c check_gcp_environment_windows_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c client_ssl_test) endif() add_dependencies(buildtests_c cmdline_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c combiner_test) endif() add_dependencies(buildtests_c completion_queue_threading_test) add_dependencies(buildtests_c compression_test) add_dependencies(buildtests_c concurrent_connectivity_test) add_dependencies(buildtests_c connection_refused_test) add_dependencies(buildtests_c cpu_test) add_dependencies(buildtests_c dns_resolver_connectivity_using_ares_resolver_test) add_dependencies(buildtests_c dns_resolver_connectivity_using_native_resolver_test) add_dependencies(buildtests_c dns_resolver_cooldown_test) add_dependencies(buildtests_c dns_resolver_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c dualstack_socket_test) endif() add_dependencies(buildtests_c endpoint_pair_test) add_dependencies(buildtests_c env_test) add_dependencies(buildtests_c error_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c ev_epollex_linux_test) endif() add_dependencies(buildtests_c fake_resolver_test) add_dependencies(buildtests_c fake_transport_security_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c fd_conservation_posix_test) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c fd_posix_test) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c fling_stream_test) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c fling_test) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c fork_test) endif() add_dependencies(buildtests_c format_request_test) add_dependencies(buildtests_c frame_handler_test) add_dependencies(buildtests_c goaway_server_test) add_dependencies(buildtests_c grpc_alts_credentials_options_test) add_dependencies(buildtests_c grpc_byte_buffer_reader_test) add_dependencies(buildtests_c grpc_completion_queue_test) add_dependencies(buildtests_c grpc_ipv6_loopback_available_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c handshake_server_with_readahead_handshaker_test) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c handshake_verify_peer_options_test) endif() add_dependencies(buildtests_c histogram_test) add_dependencies(buildtests_c host_port_test) add_dependencies(buildtests_c hpack_encoder_test) add_dependencies(buildtests_c hpack_parser_test) add_dependencies(buildtests_c hpack_table_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c httpcli_test) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c httpscli_test) endif() add_dependencies(buildtests_c init_test) add_dependencies(buildtests_c inproc_callback_test) add_dependencies(buildtests_c invalid_call_argument_test) add_dependencies(buildtests_c json_token_test) add_dependencies(buildtests_c jwt_verifier_test) add_dependencies(buildtests_c lame_client_test) add_dependencies(buildtests_c load_file_test) add_dependencies(buildtests_c log_test) add_dependencies(buildtests_c manual_constructor_test) add_dependencies(buildtests_c message_compress_test) add_dependencies(buildtests_c metadata_test) add_dependencies(buildtests_c minimal_stack_is_minimal_test) add_dependencies(buildtests_c mpmcqueue_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c mpscq_test) endif() add_dependencies(buildtests_c multiple_server_queues_test) add_dependencies(buildtests_c murmur_hash_test) add_dependencies(buildtests_c no_server_test) add_dependencies(buildtests_c num_external_connectivity_watchers_test) add_dependencies(buildtests_c parse_address_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c parse_address_with_named_scope_id_test) endif() add_dependencies(buildtests_c parser_test) add_dependencies(buildtests_c percent_encoding_test) add_dependencies(buildtests_c public_headers_must_be_c89) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c resolve_address_using_ares_resolver_posix_test) endif() add_dependencies(buildtests_c resolve_address_using_ares_resolver_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c resolve_address_using_native_resolver_posix_test) endif() add_dependencies(buildtests_c resolve_address_using_native_resolver_test) add_dependencies(buildtests_c resource_quota_test) add_dependencies(buildtests_c secure_channel_create_test) add_dependencies(buildtests_c secure_endpoint_test) add_dependencies(buildtests_c security_connector_test) add_dependencies(buildtests_c sequential_connectivity_test) add_dependencies(buildtests_c server_chttp2_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c server_ssl_test) endif() add_dependencies(buildtests_c server_test) add_dependencies(buildtests_c slice_buffer_test) add_dependencies(buildtests_c slice_string_helpers_test) add_dependencies(buildtests_c sockaddr_resolver_test) add_dependencies(buildtests_c sockaddr_utils_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c socket_utils_test) endif() add_dependencies(buildtests_c spinlock_test) add_dependencies(buildtests_c ssl_credentials_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c ssl_transport_security_test) endif() add_dependencies(buildtests_c status_conversion_test) add_dependencies(buildtests_c stream_compression_test) add_dependencies(buildtests_c stream_map_test) add_dependencies(buildtests_c stream_owned_slice_test) add_dependencies(buildtests_c string_test) add_dependencies(buildtests_c sync_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c tcp_client_posix_test) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c tcp_posix_test) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c tcp_server_posix_test) endif() add_dependencies(buildtests_c test_core_gpr_time_test) add_dependencies(buildtests_c test_core_security_credentials_test) add_dependencies(buildtests_c test_core_slice_slice_test) add_dependencies(buildtests_c thd_test) add_dependencies(buildtests_c threadpool_test) add_dependencies(buildtests_c time_averaged_stats_test) add_dependencies(buildtests_c timeout_encoding_test) add_dependencies(buildtests_c timer_heap_test) add_dependencies(buildtests_c timer_list_test) add_dependencies(buildtests_c tls_test) add_dependencies(buildtests_c transport_security_common_api_test) add_dependencies(buildtests_c transport_security_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_c udp_server_test) endif() add_dependencies(buildtests_c uri_parser_test) add_dependencies(buildtests_c useful_test) add_dependencies(buildtests_c varint_test) add_custom_target(buildtests_cxx) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx address_sorting_test) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx address_sorting_test_unsecure) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx alarm_test) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx alts_concurrent_connectivity_test) endif() add_dependencies(buildtests_cxx alts_util_test) add_dependencies(buildtests_cxx async_end2end_test) add_dependencies(buildtests_cxx auth_property_iterator_test) add_dependencies(buildtests_cxx backoff_test) add_dependencies(buildtests_cxx bad_streaming_id_bad_client_test) add_dependencies(buildtests_cxx badreq_bad_client_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx bdp_estimator_test) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx bm_alarm) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx bm_arena) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx bm_byte_buffer) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx bm_call_create) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx bm_callback_streaming_ping_pong) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx bm_callback_unary_ping_pong) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx bm_channel) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx bm_chttp2_hpack) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx bm_chttp2_transport) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx bm_closure) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx bm_cq) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx bm_cq_multiple_threads) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx bm_error) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx bm_fullstack_streaming_ping_pong) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx bm_fullstack_streaming_pump) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx bm_fullstack_trickle) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx bm_fullstack_unary_ping_pong) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx bm_metadata) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx bm_pollset) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx bm_threadpool) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx bm_timer) endif() add_dependencies(buildtests_cxx byte_buffer_test) add_dependencies(buildtests_cxx byte_stream_test) add_dependencies(buildtests_cxx cancel_ares_query_test) add_dependencies(buildtests_cxx cfstream_test) add_dependencies(buildtests_cxx channel_arguments_test) add_dependencies(buildtests_cxx channel_filter_test) add_dependencies(buildtests_cxx channel_trace_test) add_dependencies(buildtests_cxx channelz_registry_test) add_dependencies(buildtests_cxx channelz_service_test) add_dependencies(buildtests_cxx channelz_test) add_dependencies(buildtests_cxx cli_call_test) add_dependencies(buildtests_cxx client_callback_end2end_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx client_channel_stress_test) endif() add_dependencies(buildtests_cxx client_interceptors_end2end_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx client_lb_end2end_test) endif() add_dependencies(buildtests_cxx codegen_test_full) add_dependencies(buildtests_cxx codegen_test_minimal) add_dependencies(buildtests_cxx connection_prefix_bad_client_test) add_dependencies(buildtests_cxx connectivity_state_test) add_dependencies(buildtests_cxx context_list_test) add_dependencies(buildtests_cxx delegating_channel_test) add_dependencies(buildtests_cxx destroy_grpclb_channel_with_active_connect_stress_test) add_dependencies(buildtests_cxx duplicate_header_bad_client_test) add_dependencies(buildtests_cxx end2end_test) add_dependencies(buildtests_cxx error_details_test) add_dependencies(buildtests_cxx eventmanager_libuv_test) add_dependencies(buildtests_cxx exception_test) add_dependencies(buildtests_cxx filter_end2end_test) add_dependencies(buildtests_cxx flaky_network_test) add_dependencies(buildtests_cxx generic_end2end_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx global_config_env_test) endif() add_dependencies(buildtests_cxx global_config_test) add_dependencies(buildtests_cxx grpc_cli) add_dependencies(buildtests_cxx grpc_tls_credentials_options_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx grpc_tool_test) endif() add_dependencies(buildtests_cxx grpclb_api_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx grpclb_end2end_test) endif() add_dependencies(buildtests_cxx h2_ssl_session_reuse_test) add_dependencies(buildtests_cxx head_of_line_blocking_bad_client_test) add_dependencies(buildtests_cxx headers_bad_client_test) add_dependencies(buildtests_cxx health_service_end2end_test) add_dependencies(buildtests_cxx http2_client) add_dependencies(buildtests_cxx hybrid_end2end_test) add_dependencies(buildtests_cxx initial_settings_frame_bad_client_test) add_dependencies(buildtests_cxx interop_client) add_dependencies(buildtests_cxx interop_server) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx interop_test) endif() add_dependencies(buildtests_cxx json_test) add_dependencies(buildtests_cxx large_metadata_bad_client_test) add_dependencies(buildtests_cxx lb_get_cpu_stats_test) add_dependencies(buildtests_cxx lb_load_data_store_test) add_dependencies(buildtests_cxx linux_system_roots_test) add_dependencies(buildtests_cxx message_allocator_end2end_test) add_dependencies(buildtests_cxx mock_test) add_dependencies(buildtests_cxx nonblocking_test) add_dependencies(buildtests_cxx noop-benchmark) add_dependencies(buildtests_cxx orphanable_test) add_dependencies(buildtests_cxx out_of_bounds_bad_client_test) add_dependencies(buildtests_cxx pid_controller_test) add_dependencies(buildtests_cxx port_sharing_end2end_test) add_dependencies(buildtests_cxx proto_server_reflection_test) add_dependencies(buildtests_cxx proto_utils_test) add_dependencies(buildtests_cxx qps_json_driver) add_dependencies(buildtests_cxx qps_worker) add_dependencies(buildtests_cxx raw_end2end_test) add_dependencies(buildtests_cxx ref_counted_ptr_test) add_dependencies(buildtests_cxx ref_counted_test) add_dependencies(buildtests_cxx retry_throttle_test) add_dependencies(buildtests_cxx secure_auth_context_test) add_dependencies(buildtests_cxx server_builder_plugin_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx server_builder_test) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx server_builder_with_socket_mutator_test) endif() add_dependencies(buildtests_cxx server_context_test_spouse_test) add_dependencies(buildtests_cxx server_early_return_test) add_dependencies(buildtests_cxx server_interceptors_end2end_test) add_dependencies(buildtests_cxx server_registered_method_bad_client_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx server_request_call_test) endif() add_dependencies(buildtests_cxx service_config_end2end_test) add_dependencies(buildtests_cxx service_config_test) add_dependencies(buildtests_cxx settings_timeout_test) add_dependencies(buildtests_cxx shutdown_test) add_dependencies(buildtests_cxx simple_request_bad_client_test) add_dependencies(buildtests_cxx slice_hash_table_test) add_dependencies(buildtests_cxx slice_weak_hash_table_test) add_dependencies(buildtests_cxx static_metadata_test) add_dependencies(buildtests_cxx stats_test) add_dependencies(buildtests_cxx status_metadata_test) add_dependencies(buildtests_cxx status_util_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx streaming_throughput_test) endif() add_dependencies(buildtests_cxx string_ref_test) add_dependencies(buildtests_cxx test_cpp_client_credentials_test) add_dependencies(buildtests_cxx test_cpp_util_slice_test) add_dependencies(buildtests_cxx test_cpp_util_time_test) add_dependencies(buildtests_cxx thread_manager_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx thread_stress_test) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx time_jump_test) endif() add_dependencies(buildtests_cxx timer_test) add_dependencies(buildtests_cxx tls_security_connector_test) add_dependencies(buildtests_cxx unknown_frame_bad_client_test) add_dependencies(buildtests_cxx window_overflow_bad_client_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx work_serializer_test) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx writes_per_rpc_test) endif() add_dependencies(buildtests_cxx xds_bootstrap_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx xds_end2end_test) endif() add_dependencies(buildtests_cxx xds_interop_client) add_dependencies(buildtests_cxx xds_interop_server) add_dependencies(buildtests_cxx alts_credentials_fuzzer_one_entry) add_dependencies(buildtests_cxx client_fuzzer_one_entry) add_dependencies(buildtests_cxx hpack_parser_fuzzer_test_one_entry) add_dependencies(buildtests_cxx http_request_fuzzer_test_one_entry) add_dependencies(buildtests_cxx http_response_fuzzer_test_one_entry) add_dependencies(buildtests_cxx json_fuzzer_test_one_entry) add_dependencies(buildtests_cxx nanopb_fuzzer_response_test_one_entry) add_dependencies(buildtests_cxx nanopb_fuzzer_serverlist_test_one_entry) add_dependencies(buildtests_cxx percent_decode_fuzzer_one_entry) add_dependencies(buildtests_cxx percent_encode_fuzzer_one_entry) add_dependencies(buildtests_cxx server_fuzzer_one_entry) add_dependencies(buildtests_cxx ssl_server_fuzzer_one_entry) add_dependencies(buildtests_cxx uri_fuzzer_test_one_entry) add_custom_target(buildtests DEPENDS buildtests_c buildtests_cxx) endif() add_library(address_sorting third_party/address_sorting/address_sorting.c third_party/address_sorting/address_sorting_posix.c third_party/address_sorting/address_sorting_windows.c ) set_target_properties(address_sorting PROPERTIES VERSION ${gRPC_CORE_VERSION} SOVERSION ${gRPC_CORE_SOVERSION} ) if(WIN32 AND MSVC) set_target_properties(address_sorting PROPERTIES COMPILE_PDB_NAME "address_sorting" COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) if(gRPC_INSTALL) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/address_sorting.pdb DESTINATION ${gRPC_INSTALL_LIBDIR} OPTIONAL ) endif() endif() target_include_directories(address_sorting PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(address_sorting ${_gRPC_BASELIB_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} ) if(gRPC_INSTALL) install(TARGETS address_sorting EXPORT gRPCTargets RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} ) endif() if(gRPC_BUILD_TESTS) add_library(end2end_nosec_tests test/core/end2end/cq_verifier.cc test/core/end2end/data/client_certs.cc test/core/end2end/data/server1_cert.cc test/core/end2end/data/server1_key.cc test/core/end2end/data/test_root_cert.cc test/core/end2end/end2end_nosec_tests.cc test/core/end2end/end2end_test_utils.cc test/core/end2end/fixtures/http_proxy_fixture.cc test/core/end2end/fixtures/local_util.cc test/core/end2end/fixtures/proxy.cc test/core/end2end/tests/authority_not_supported.cc test/core/end2end/tests/bad_hostname.cc test/core/end2end/tests/bad_ping.cc test/core/end2end/tests/binary_metadata.cc test/core/end2end/tests/call_host_override.cc test/core/end2end/tests/cancel_after_accept.cc test/core/end2end/tests/cancel_after_client_done.cc test/core/end2end/tests/cancel_after_invoke.cc test/core/end2end/tests/cancel_after_round_trip.cc test/core/end2end/tests/cancel_before_invoke.cc test/core/end2end/tests/cancel_in_a_vacuum.cc test/core/end2end/tests/cancel_with_status.cc test/core/end2end/tests/channelz.cc test/core/end2end/tests/client_streaming.cc test/core/end2end/tests/compressed_payload.cc test/core/end2end/tests/connectivity.cc test/core/end2end/tests/default_host.cc test/core/end2end/tests/disappearing_server.cc test/core/end2end/tests/empty_batch.cc test/core/end2end/tests/filter_call_init_fails.cc test/core/end2end/tests/filter_causes_close.cc test/core/end2end/tests/filter_context.cc test/core/end2end/tests/filter_latency.cc test/core/end2end/tests/filter_status_code.cc test/core/end2end/tests/graceful_server_shutdown.cc test/core/end2end/tests/high_initial_seqno.cc test/core/end2end/tests/hpack_size.cc test/core/end2end/tests/idempotent_request.cc test/core/end2end/tests/invoke_large_request.cc test/core/end2end/tests/keepalive_timeout.cc test/core/end2end/tests/large_metadata.cc test/core/end2end/tests/max_concurrent_streams.cc test/core/end2end/tests/max_connection_age.cc test/core/end2end/tests/max_connection_idle.cc test/core/end2end/tests/max_message_length.cc test/core/end2end/tests/negative_deadline.cc test/core/end2end/tests/no_error_on_hotpath.cc test/core/end2end/tests/no_logging.cc test/core/end2end/tests/no_op.cc test/core/end2end/tests/payload.cc test/core/end2end/tests/ping.cc test/core/end2end/tests/ping_pong_streaming.cc test/core/end2end/tests/proxy_auth.cc test/core/end2end/tests/registered_call.cc test/core/end2end/tests/request_with_flags.cc test/core/end2end/tests/request_with_payload.cc test/core/end2end/tests/resource_quota_server.cc test/core/end2end/tests/retry.cc test/core/end2end/tests/retry_cancellation.cc test/core/end2end/tests/retry_disabled.cc test/core/end2end/tests/retry_exceeds_buffer_size_in_initial_batch.cc test/core/end2end/tests/retry_exceeds_buffer_size_in_subsequent_batch.cc test/core/end2end/tests/retry_non_retriable_status.cc test/core/end2end/tests/retry_non_retriable_status_before_recv_trailing_metadata_started.cc test/core/end2end/tests/retry_recv_initial_metadata.cc test/core/end2end/tests/retry_recv_message.cc test/core/end2end/tests/retry_server_pushback_delay.cc test/core/end2end/tests/retry_server_pushback_disabled.cc test/core/end2end/tests/retry_streaming.cc test/core/end2end/tests/retry_streaming_after_commit.cc test/core/end2end/tests/retry_streaming_succeeds_before_replay_finished.cc test/core/end2end/tests/retry_throttled.cc test/core/end2end/tests/retry_too_many_attempts.cc test/core/end2end/tests/server_finishes_request.cc test/core/end2end/tests/shutdown_finishes_calls.cc test/core/end2end/tests/shutdown_finishes_tags.cc test/core/end2end/tests/simple_cacheable_request.cc test/core/end2end/tests/simple_delayed_request.cc test/core/end2end/tests/simple_metadata.cc test/core/end2end/tests/simple_request.cc test/core/end2end/tests/stream_compression_compressed_payload.cc test/core/end2end/tests/stream_compression_payload.cc test/core/end2end/tests/stream_compression_ping_pong_streaming.cc test/core/end2end/tests/streaming_error_response.cc test/core/end2end/tests/trailing_metadata.cc test/core/end2end/tests/workaround_cronet_compression.cc test/core/end2end/tests/write_buffering.cc test/core/end2end/tests/write_buffering_at_end.cc ) set_target_properties(end2end_nosec_tests PROPERTIES VERSION ${gRPC_CORE_VERSION} SOVERSION ${gRPC_CORE_SOVERSION} ) if(WIN32 AND MSVC) set_target_properties(end2end_nosec_tests PROPERTIES COMPILE_PDB_NAME "end2end_nosec_tests" COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) if(gRPC_INSTALL) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/end2end_nosec_tests.pdb DESTINATION ${gRPC_INSTALL_LIBDIR} OPTIONAL ) endif() endif() target_include_directories(end2end_nosec_tests PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(end2end_nosec_tests ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_library(end2end_tests test/core/end2end/cq_verifier.cc test/core/end2end/data/client_certs.cc test/core/end2end/data/server1_cert.cc test/core/end2end/data/server1_key.cc test/core/end2end/data/test_root_cert.cc test/core/end2end/end2end_test_utils.cc test/core/end2end/end2end_tests.cc test/core/end2end/fixtures/http_proxy_fixture.cc test/core/end2end/fixtures/local_util.cc test/core/end2end/fixtures/proxy.cc test/core/end2end/tests/authority_not_supported.cc test/core/end2end/tests/bad_hostname.cc test/core/end2end/tests/bad_ping.cc test/core/end2end/tests/binary_metadata.cc test/core/end2end/tests/call_creds.cc test/core/end2end/tests/call_host_override.cc test/core/end2end/tests/cancel_after_accept.cc test/core/end2end/tests/cancel_after_client_done.cc test/core/end2end/tests/cancel_after_invoke.cc test/core/end2end/tests/cancel_after_round_trip.cc test/core/end2end/tests/cancel_before_invoke.cc test/core/end2end/tests/cancel_in_a_vacuum.cc test/core/end2end/tests/cancel_with_status.cc test/core/end2end/tests/channelz.cc test/core/end2end/tests/client_streaming.cc test/core/end2end/tests/compressed_payload.cc test/core/end2end/tests/connectivity.cc test/core/end2end/tests/default_host.cc test/core/end2end/tests/disappearing_server.cc test/core/end2end/tests/empty_batch.cc test/core/end2end/tests/filter_call_init_fails.cc test/core/end2end/tests/filter_causes_close.cc test/core/end2end/tests/filter_context.cc test/core/end2end/tests/filter_latency.cc test/core/end2end/tests/filter_status_code.cc test/core/end2end/tests/graceful_server_shutdown.cc test/core/end2end/tests/high_initial_seqno.cc test/core/end2end/tests/hpack_size.cc test/core/end2end/tests/idempotent_request.cc test/core/end2end/tests/invoke_large_request.cc test/core/end2end/tests/keepalive_timeout.cc test/core/end2end/tests/large_metadata.cc test/core/end2end/tests/max_concurrent_streams.cc test/core/end2end/tests/max_connection_age.cc test/core/end2end/tests/max_connection_idle.cc test/core/end2end/tests/max_message_length.cc test/core/end2end/tests/negative_deadline.cc test/core/end2end/tests/no_error_on_hotpath.cc test/core/end2end/tests/no_logging.cc test/core/end2end/tests/no_op.cc test/core/end2end/tests/payload.cc test/core/end2end/tests/ping.cc test/core/end2end/tests/ping_pong_streaming.cc test/core/end2end/tests/proxy_auth.cc test/core/end2end/tests/registered_call.cc test/core/end2end/tests/request_with_flags.cc test/core/end2end/tests/request_with_payload.cc test/core/end2end/tests/resource_quota_server.cc test/core/end2end/tests/retry.cc test/core/end2end/tests/retry_cancellation.cc test/core/end2end/tests/retry_disabled.cc test/core/end2end/tests/retry_exceeds_buffer_size_in_initial_batch.cc test/core/end2end/tests/retry_exceeds_buffer_size_in_subsequent_batch.cc test/core/end2end/tests/retry_non_retriable_status.cc test/core/end2end/tests/retry_non_retriable_status_before_recv_trailing_metadata_started.cc test/core/end2end/tests/retry_recv_initial_metadata.cc test/core/end2end/tests/retry_recv_message.cc test/core/end2end/tests/retry_server_pushback_delay.cc test/core/end2end/tests/retry_server_pushback_disabled.cc test/core/end2end/tests/retry_streaming.cc test/core/end2end/tests/retry_streaming_after_commit.cc test/core/end2end/tests/retry_streaming_succeeds_before_replay_finished.cc test/core/end2end/tests/retry_throttled.cc test/core/end2end/tests/retry_too_many_attempts.cc test/core/end2end/tests/server_finishes_request.cc test/core/end2end/tests/shutdown_finishes_calls.cc test/core/end2end/tests/shutdown_finishes_tags.cc test/core/end2end/tests/simple_cacheable_request.cc test/core/end2end/tests/simple_delayed_request.cc test/core/end2end/tests/simple_metadata.cc test/core/end2end/tests/simple_request.cc test/core/end2end/tests/stream_compression_compressed_payload.cc test/core/end2end/tests/stream_compression_payload.cc test/core/end2end/tests/stream_compression_ping_pong_streaming.cc test/core/end2end/tests/streaming_error_response.cc test/core/end2end/tests/trailing_metadata.cc test/core/end2end/tests/workaround_cronet_compression.cc test/core/end2end/tests/write_buffering.cc test/core/end2end/tests/write_buffering_at_end.cc ) set_target_properties(end2end_tests PROPERTIES VERSION ${gRPC_CORE_VERSION} SOVERSION ${gRPC_CORE_SOVERSION} ) if(WIN32 AND MSVC) set_target_properties(end2end_tests PROPERTIES COMPILE_PDB_NAME "end2end_tests" COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) if(gRPC_INSTALL) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/end2end_tests.pdb DESTINATION ${gRPC_INSTALL_LIBDIR} OPTIONAL ) endif() endif() target_include_directories(end2end_tests PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(end2end_tests ${_gRPC_SSL_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() add_library(gpr src/core/lib/gpr/alloc.cc src/core/lib/gpr/atm.cc src/core/lib/gpr/cpu_iphone.cc src/core/lib/gpr/cpu_linux.cc src/core/lib/gpr/cpu_posix.cc src/core/lib/gpr/cpu_windows.cc src/core/lib/gpr/env_linux.cc src/core/lib/gpr/env_posix.cc src/core/lib/gpr/env_windows.cc src/core/lib/gpr/log.cc src/core/lib/gpr/log_android.cc src/core/lib/gpr/log_linux.cc src/core/lib/gpr/log_posix.cc src/core/lib/gpr/log_windows.cc src/core/lib/gpr/murmur_hash.cc src/core/lib/gpr/string.cc src/core/lib/gpr/string_posix.cc src/core/lib/gpr/string_util_windows.cc src/core/lib/gpr/string_windows.cc src/core/lib/gpr/sync.cc src/core/lib/gpr/sync_abseil.cc src/core/lib/gpr/sync_posix.cc src/core/lib/gpr/sync_windows.cc src/core/lib/gpr/time.cc src/core/lib/gpr/time_posix.cc src/core/lib/gpr/time_precise.cc src/core/lib/gpr/time_windows.cc src/core/lib/gpr/tls_pthread.cc src/core/lib/gpr/tmpfile_msys.cc src/core/lib/gpr/tmpfile_posix.cc src/core/lib/gpr/tmpfile_windows.cc src/core/lib/gpr/wrap_memcpy.cc src/core/lib/gprpp/arena.cc src/core/lib/gprpp/fork.cc src/core/lib/gprpp/global_config_env.cc src/core/lib/gprpp/host_port.cc src/core/lib/gprpp/mpscq.cc src/core/lib/gprpp/thd_posix.cc src/core/lib/gprpp/thd_windows.cc src/core/lib/profiling/basic_timers.cc src/core/lib/profiling/stap_timers.cc ) set_target_properties(gpr PROPERTIES VERSION ${gRPC_CORE_VERSION} SOVERSION ${gRPC_CORE_SOVERSION} ) if(WIN32 AND MSVC) set_target_properties(gpr PROPERTIES COMPILE_PDB_NAME "gpr" COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) if(gRPC_INSTALL) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/gpr.pdb DESTINATION ${gRPC_INSTALL_LIBDIR} OPTIONAL ) endif() endif() target_include_directories(gpr PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(gpr ${_gRPC_ALLTARGETS_LIBRARIES} absl::time absl::strings absl::str_format absl::memory ) if(_gRPC_PLATFORM_ANDROID) target_link_libraries(gpr android log ) endif() foreach(_hdr include/grpc/impl/codegen/atm.h include/grpc/impl/codegen/atm_gcc_atomic.h include/grpc/impl/codegen/atm_gcc_sync.h include/grpc/impl/codegen/atm_windows.h include/grpc/impl/codegen/byte_buffer.h include/grpc/impl/codegen/byte_buffer_reader.h include/grpc/impl/codegen/compression_types.h include/grpc/impl/codegen/connectivity_state.h include/grpc/impl/codegen/fork.h include/grpc/impl/codegen/gpr_slice.h include/grpc/impl/codegen/gpr_types.h include/grpc/impl/codegen/grpc_types.h include/grpc/impl/codegen/log.h include/grpc/impl/codegen/port_platform.h include/grpc/impl/codegen/propagation_bits.h include/grpc/impl/codegen/slice.h include/grpc/impl/codegen/status.h include/grpc/impl/codegen/sync.h include/grpc/impl/codegen/sync_abseil.h include/grpc/impl/codegen/sync_custom.h include/grpc/impl/codegen/sync_generic.h include/grpc/impl/codegen/sync_posix.h include/grpc/impl/codegen/sync_windows.h include/grpc/support/alloc.h include/grpc/support/atm.h include/grpc/support/atm_gcc_atomic.h include/grpc/support/atm_gcc_sync.h include/grpc/support/atm_windows.h include/grpc/support/cpu.h include/grpc/support/log.h include/grpc/support/log_windows.h include/grpc/support/port_platform.h include/grpc/support/string_util.h include/grpc/support/sync.h include/grpc/support/sync_abseil.h include/grpc/support/sync_custom.h include/grpc/support/sync_generic.h include/grpc/support/sync_posix.h include/grpc/support/sync_windows.h include/grpc/support/thd_id.h include/grpc/support/time.h ) string(REPLACE "include/" "" _path ${_hdr}) get_filename_component(_path ${_path} PATH) install(FILES ${_hdr} DESTINATION "${gRPC_INSTALL_INCLUDEDIR}/${_path}" ) endforeach() if(gRPC_INSTALL) install(TARGETS gpr EXPORT gRPCTargets RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} ) endif() add_library(grpc src/core/ext/filters/census/grpc_context.cc src/core/ext/filters/client_channel/backend_metric.cc src/core/ext/filters/client_channel/backup_poller.cc src/core/ext/filters/client_channel/channel_connectivity.cc src/core/ext/filters/client_channel/client_channel.cc src/core/ext/filters/client_channel/client_channel_channelz.cc src/core/ext/filters/client_channel/client_channel_factory.cc src/core/ext/filters/client_channel/client_channel_plugin.cc src/core/ext/filters/client_channel/global_subchannel_pool.cc src/core/ext/filters/client_channel/health/health_check_client.cc src/core/ext/filters/client_channel/http_connect_handshaker.cc src/core/ext/filters/client_channel/http_proxy.cc src/core/ext/filters/client_channel/lb_policy.cc src/core/ext/filters/client_channel/lb_policy/address_filtering.cc src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc src/core/ext/filters/client_channel/lb_policy/priority/priority.cc src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc src/core/ext/filters/client_channel/lb_policy/xds/cds.cc src/core/ext/filters/client_channel/lb_policy/xds/eds.cc src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc src/core/ext/filters/client_channel/lb_policy_registry.cc src/core/ext/filters/client_channel/local_subchannel_pool.cc src/core/ext/filters/client_channel/parse_address.cc src/core/ext/filters/client_channel/proxy_mapper_registry.cc src/core/ext/filters/client_channel/resolver.cc src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc src/core/ext/filters/client_channel/resolver_registry.cc src/core/ext/filters/client_channel/resolver_result_parsing.cc src/core/ext/filters/client_channel/resolving_lb_policy.cc src/core/ext/filters/client_channel/retry_throttle.cc src/core/ext/filters/client_channel/server_address.cc src/core/ext/filters/client_channel/service_config.cc src/core/ext/filters/client_channel/service_config_parser.cc src/core/ext/filters/client_channel/subchannel.cc src/core/ext/filters/client_channel/subchannel_pool_interface.cc src/core/ext/filters/client_channel/xds/xds_api.cc src/core/ext/filters/client_channel/xds/xds_bootstrap.cc src/core/ext/filters/client_channel/xds/xds_channel_secure.cc src/core/ext/filters/client_channel/xds/xds_client.cc src/core/ext/filters/client_channel/xds/xds_client_stats.cc src/core/ext/filters/client_idle/client_idle_filter.cc src/core/ext/filters/deadline/deadline_filter.cc src/core/ext/filters/http/client/http_client_filter.cc src/core/ext/filters/http/client_authority_filter.cc src/core/ext/filters/http/http_filters_plugin.cc src/core/ext/filters/http/message_compress/message_compress_filter.cc src/core/ext/filters/http/message_compress/message_decompress_filter.cc src/core/ext/filters/http/server/http_server_filter.cc src/core/ext/filters/max_age/max_age_filter.cc src/core/ext/filters/message_size/message_size_filter.cc src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc src/core/ext/filters/workarounds/workaround_utils.cc src/core/ext/transport/chttp2/alpn/alpn.cc src/core/ext/transport/chttp2/client/authority.cc src/core/ext/transport/chttp2/client/chttp2_connector.cc src/core/ext/transport/chttp2/client/insecure/channel_create.cc src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc src/core/ext/transport/chttp2/server/chttp2_server.cc src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc src/core/ext/transport/chttp2/transport/bin_decoder.cc src/core/ext/transport/chttp2/transport/bin_encoder.cc src/core/ext/transport/chttp2/transport/chttp2_plugin.cc src/core/ext/transport/chttp2/transport/chttp2_transport.cc src/core/ext/transport/chttp2/transport/context_list.cc src/core/ext/transport/chttp2/transport/flow_control.cc src/core/ext/transport/chttp2/transport/frame_data.cc src/core/ext/transport/chttp2/transport/frame_goaway.cc src/core/ext/transport/chttp2/transport/frame_ping.cc src/core/ext/transport/chttp2/transport/frame_rst_stream.cc src/core/ext/transport/chttp2/transport/frame_settings.cc src/core/ext/transport/chttp2/transport/frame_window_update.cc src/core/ext/transport/chttp2/transport/hpack_encoder.cc src/core/ext/transport/chttp2/transport/hpack_parser.cc src/core/ext/transport/chttp2/transport/hpack_table.cc src/core/ext/transport/chttp2/transport/http2_settings.cc src/core/ext/transport/chttp2/transport/huffsyms.cc src/core/ext/transport/chttp2/transport/incoming_metadata.cc src/core/ext/transport/chttp2/transport/parsing.cc src/core/ext/transport/chttp2/transport/stream_lists.cc src/core/ext/transport/chttp2/transport/stream_map.cc src/core/ext/transport/chttp2/transport/varint.cc src/core/ext/transport/chttp2/transport/writing.cc src/core/ext/transport/inproc/inproc_plugin.cc src/core/ext/transport/inproc/inproc_transport.cc src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c src/core/ext/upb-generated/envoy/annotations/resource.upb.c src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c src/core/ext/upb-generated/envoy/api/v2/cds.upb.c src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c src/core/ext/upb-generated/envoy/api/v2/eds.upb.c src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c src/core/ext/upb-generated/envoy/api/v2/lds.upb.c src/core/ext/upb-generated/envoy/api/v2/listener.upb.c src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c src/core/ext/upb-generated/envoy/api/v2/rds.upb.c src/core/ext/upb-generated/envoy/api/v2/route.upb.c src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c src/core/ext/upb-generated/envoy/api/v2/srds.upb.c src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c src/core/ext/upb-generated/envoy/type/http.upb.c src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c src/core/ext/upb-generated/envoy/type/matcher/string.upb.c src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c src/core/ext/upb-generated/envoy/type/percent.upb.c src/core/ext/upb-generated/envoy/type/range.upb.c src/core/ext/upb-generated/envoy/type/semantic_version.upb.c src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c src/core/ext/upb-generated/gogoproto/gogo.upb.c src/core/ext/upb-generated/google/api/annotations.upb.c src/core/ext/upb-generated/google/api/http.upb.c src/core/ext/upb-generated/google/protobuf/any.upb.c src/core/ext/upb-generated/google/protobuf/descriptor.upb.c src/core/ext/upb-generated/google/protobuf/duration.upb.c src/core/ext/upb-generated/google/protobuf/empty.upb.c src/core/ext/upb-generated/google/protobuf/struct.upb.c src/core/ext/upb-generated/google/protobuf/timestamp.upb.c src/core/ext/upb-generated/google/protobuf/wrappers.upb.c src/core/ext/upb-generated/google/rpc/status.upb.c src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c src/core/ext/upb-generated/udpa/annotations/migrate.upb.c src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c src/core/ext/upb-generated/udpa/annotations/status.upb.c src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c src/core/ext/upb-generated/validate/validate.upb.c src/core/lib/avl/avl.cc src/core/lib/backoff/backoff.cc src/core/lib/channel/channel_args.cc src/core/lib/channel/channel_stack.cc src/core/lib/channel/channel_stack_builder.cc src/core/lib/channel/channel_trace.cc src/core/lib/channel/channelz.cc src/core/lib/channel/channelz_registry.cc src/core/lib/channel/connected_channel.cc src/core/lib/channel/handshaker.cc src/core/lib/channel/handshaker_registry.cc src/core/lib/channel/status_util.cc src/core/lib/compression/compression.cc src/core/lib/compression/compression_args.cc src/core/lib/compression/compression_internal.cc src/core/lib/compression/message_compress.cc src/core/lib/compression/stream_compression.cc src/core/lib/compression/stream_compression_gzip.cc src/core/lib/compression/stream_compression_identity.cc src/core/lib/debug/stats.cc src/core/lib/debug/stats_data.cc src/core/lib/debug/trace.cc src/core/lib/http/format_request.cc src/core/lib/http/httpcli.cc src/core/lib/http/httpcli_security_connector.cc src/core/lib/http/parser.cc src/core/lib/iomgr/buffer_list.cc src/core/lib/iomgr/call_combiner.cc src/core/lib/iomgr/cfstream_handle.cc src/core/lib/iomgr/combiner.cc src/core/lib/iomgr/dualstack_socket_posix.cc src/core/lib/iomgr/endpoint.cc src/core/lib/iomgr/endpoint_cfstream.cc src/core/lib/iomgr/endpoint_pair_posix.cc src/core/lib/iomgr/endpoint_pair_uv.cc src/core/lib/iomgr/endpoint_pair_windows.cc src/core/lib/iomgr/error.cc src/core/lib/iomgr/error_cfstream.cc src/core/lib/iomgr/ev_apple.cc src/core/lib/iomgr/ev_epoll1_linux.cc src/core/lib/iomgr/ev_epollex_linux.cc src/core/lib/iomgr/ev_poll_posix.cc src/core/lib/iomgr/ev_posix.cc src/core/lib/iomgr/ev_windows.cc src/core/lib/iomgr/exec_ctx.cc src/core/lib/iomgr/executor.cc src/core/lib/iomgr/executor/mpmcqueue.cc src/core/lib/iomgr/executor/threadpool.cc src/core/lib/iomgr/fork_posix.cc src/core/lib/iomgr/fork_windows.cc src/core/lib/iomgr/gethostname_fallback.cc src/core/lib/iomgr/gethostname_host_name_max.cc src/core/lib/iomgr/gethostname_sysconf.cc src/core/lib/iomgr/grpc_if_nametoindex_posix.cc src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc src/core/lib/iomgr/internal_errqueue.cc src/core/lib/iomgr/iocp_windows.cc src/core/lib/iomgr/iomgr.cc src/core/lib/iomgr/iomgr_custom.cc src/core/lib/iomgr/iomgr_internal.cc src/core/lib/iomgr/iomgr_posix.cc src/core/lib/iomgr/iomgr_posix_cfstream.cc src/core/lib/iomgr/iomgr_uv.cc src/core/lib/iomgr/iomgr_windows.cc src/core/lib/iomgr/is_epollexclusive_available.cc src/core/lib/iomgr/load_file.cc src/core/lib/iomgr/lockfree_event.cc src/core/lib/iomgr/poller/eventmanager_libuv.cc src/core/lib/iomgr/polling_entity.cc src/core/lib/iomgr/pollset.cc src/core/lib/iomgr/pollset_custom.cc src/core/lib/iomgr/pollset_set.cc src/core/lib/iomgr/pollset_set_custom.cc src/core/lib/iomgr/pollset_set_windows.cc src/core/lib/iomgr/pollset_uv.cc src/core/lib/iomgr/pollset_windows.cc src/core/lib/iomgr/resolve_address.cc src/core/lib/iomgr/resolve_address_custom.cc src/core/lib/iomgr/resolve_address_posix.cc src/core/lib/iomgr/resolve_address_windows.cc src/core/lib/iomgr/resource_quota.cc src/core/lib/iomgr/sockaddr_utils.cc src/core/lib/iomgr/socket_factory_posix.cc src/core/lib/iomgr/socket_mutator.cc src/core/lib/iomgr/socket_utils_common_posix.cc src/core/lib/iomgr/socket_utils_linux.cc src/core/lib/iomgr/socket_utils_posix.cc src/core/lib/iomgr/socket_utils_uv.cc src/core/lib/iomgr/socket_utils_windows.cc src/core/lib/iomgr/socket_windows.cc src/core/lib/iomgr/tcp_client.cc src/core/lib/iomgr/tcp_client_cfstream.cc src/core/lib/iomgr/tcp_client_custom.cc src/core/lib/iomgr/tcp_client_posix.cc src/core/lib/iomgr/tcp_client_windows.cc src/core/lib/iomgr/tcp_custom.cc src/core/lib/iomgr/tcp_posix.cc src/core/lib/iomgr/tcp_server.cc src/core/lib/iomgr/tcp_server_custom.cc src/core/lib/iomgr/tcp_server_posix.cc src/core/lib/iomgr/tcp_server_utils_posix_common.cc src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc src/core/lib/iomgr/tcp_server_windows.cc src/core/lib/iomgr/tcp_uv.cc src/core/lib/iomgr/tcp_windows.cc src/core/lib/iomgr/time_averaged_stats.cc src/core/lib/iomgr/timer.cc src/core/lib/iomgr/timer_custom.cc src/core/lib/iomgr/timer_generic.cc src/core/lib/iomgr/timer_heap.cc src/core/lib/iomgr/timer_manager.cc src/core/lib/iomgr/timer_uv.cc src/core/lib/iomgr/udp_server.cc src/core/lib/iomgr/unix_sockets_posix.cc src/core/lib/iomgr/unix_sockets_posix_noop.cc src/core/lib/iomgr/wakeup_fd_eventfd.cc src/core/lib/iomgr/wakeup_fd_nospecial.cc src/core/lib/iomgr/wakeup_fd_pipe.cc src/core/lib/iomgr/wakeup_fd_posix.cc src/core/lib/iomgr/work_serializer.cc src/core/lib/json/json_reader.cc src/core/lib/json/json_writer.cc src/core/lib/security/context/security_context.cc src/core/lib/security/credentials/alts/alts_credentials.cc src/core/lib/security/credentials/alts/check_gcp_environment.cc src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc src/core/lib/security/credentials/composite/composite_credentials.cc src/core/lib/security/credentials/credentials.cc src/core/lib/security/credentials/credentials_metadata.cc src/core/lib/security/credentials/fake/fake_credentials.cc src/core/lib/security/credentials/google_default/credentials_generic.cc src/core/lib/security/credentials/google_default/google_default_credentials.cc src/core/lib/security/credentials/iam/iam_credentials.cc src/core/lib/security/credentials/jwt/json_token.cc src/core/lib/security/credentials/jwt/jwt_credentials.cc src/core/lib/security/credentials/jwt/jwt_verifier.cc src/core/lib/security/credentials/local/local_credentials.cc src/core/lib/security/credentials/oauth2/oauth2_credentials.cc src/core/lib/security/credentials/plugin/plugin_credentials.cc src/core/lib/security/credentials/ssl/ssl_credentials.cc src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc src/core/lib/security/credentials/tls/tls_credentials.cc src/core/lib/security/security_connector/alts/alts_security_connector.cc src/core/lib/security/security_connector/fake/fake_security_connector.cc src/core/lib/security/security_connector/load_system_roots_fallback.cc src/core/lib/security/security_connector/load_system_roots_linux.cc src/core/lib/security/security_connector/local/local_security_connector.cc src/core/lib/security/security_connector/security_connector.cc src/core/lib/security/security_connector/ssl/ssl_security_connector.cc src/core/lib/security/security_connector/ssl_utils.cc src/core/lib/security/security_connector/ssl_utils_config.cc src/core/lib/security/security_connector/tls/tls_security_connector.cc src/core/lib/security/transport/client_auth_filter.cc src/core/lib/security/transport/secure_endpoint.cc src/core/lib/security/transport/security_handshaker.cc src/core/lib/security/transport/server_auth_filter.cc src/core/lib/security/transport/target_authority_table.cc src/core/lib/security/transport/tsi_error.cc src/core/lib/security/util/json_util.cc src/core/lib/slice/b64.cc src/core/lib/slice/percent_encoding.cc src/core/lib/slice/slice.cc src/core/lib/slice/slice_buffer.cc src/core/lib/slice/slice_intern.cc src/core/lib/slice/slice_string_helpers.cc src/core/lib/surface/api_trace.cc src/core/lib/surface/byte_buffer.cc src/core/lib/surface/byte_buffer_reader.cc src/core/lib/surface/call.cc src/core/lib/surface/call_details.cc src/core/lib/surface/call_log_batch.cc src/core/lib/surface/channel.cc src/core/lib/surface/channel_init.cc src/core/lib/surface/channel_ping.cc src/core/lib/surface/channel_stack_type.cc src/core/lib/surface/completion_queue.cc src/core/lib/surface/completion_queue_factory.cc src/core/lib/surface/event_string.cc src/core/lib/surface/init.cc src/core/lib/surface/init_secure.cc src/core/lib/surface/lame_client.cc src/core/lib/surface/metadata_array.cc src/core/lib/surface/server.cc src/core/lib/surface/validate_metadata.cc src/core/lib/surface/version.cc src/core/lib/transport/bdp_estimator.cc src/core/lib/transport/byte_stream.cc src/core/lib/transport/connectivity_state.cc src/core/lib/transport/error_utils.cc src/core/lib/transport/metadata.cc src/core/lib/transport/metadata_batch.cc src/core/lib/transport/pid_controller.cc src/core/lib/transport/static_metadata.cc src/core/lib/transport/status_conversion.cc src/core/lib/transport/status_metadata.cc src/core/lib/transport/timeout_encoding.cc src/core/lib/transport/transport.cc src/core/lib/transport/transport_op_string.cc src/core/lib/uri/uri_parser.cc src/core/plugin_registry/grpc_plugin_registry.cc src/core/tsi/alts/crypt/aes_gcm.cc src/core/tsi/alts/crypt/gsec.cc src/core/tsi/alts/frame_protector/alts_counter.cc src/core/tsi/alts/frame_protector/alts_crypter.cc src/core/tsi/alts/frame_protector/alts_frame_protector.cc src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc src/core/tsi/alts/frame_protector/frame_handler.cc src/core/tsi/alts/handshaker/alts_handshaker_client.cc src/core/tsi/alts/handshaker/alts_shared_resource.cc src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc src/core/tsi/alts/handshaker/alts_tsi_utils.cc src/core/tsi/alts/handshaker/transport_security_common_api.cc src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc src/core/tsi/fake_transport_security.cc src/core/tsi/local_transport_security.cc src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc src/core/tsi/ssl/session_cache/ssl_session_cache.cc src/core/tsi/ssl/session_cache/ssl_session_openssl.cc src/core/tsi/ssl_transport_security.cc src/core/tsi/transport_security.cc src/core/tsi/transport_security_grpc.cc ) set_target_properties(grpc PROPERTIES VERSION ${gRPC_CORE_VERSION} SOVERSION ${gRPC_CORE_SOVERSION} ) if(WIN32 AND MSVC) set_target_properties(grpc PROPERTIES COMPILE_PDB_NAME "grpc" COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) if(gRPC_INSTALL) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/grpc.pdb DESTINATION ${gRPC_INSTALL_LIBDIR} OPTIONAL ) endif() endif() target_include_directories(grpc PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(grpc ${_gRPC_BASELIB_LIBRARIES} ${_gRPC_SSL_LIBRARIES} ${_gRPC_ZLIB_LIBRARIES} ${_gRPC_CARES_LIBRARIES} ${_gRPC_ADDRESS_SORTING_LIBRARIES} ${_gRPC_UPB_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} gpr address_sorting upb absl::optional absl::strings absl::inlined_vector ) if(_gRPC_PLATFORM_IOS OR _gRPC_PLATFORM_MAC) target_link_libraries(grpc "-framework CoreFoundation") endif() foreach(_hdr include/grpc/byte_buffer.h include/grpc/byte_buffer_reader.h include/grpc/census.h include/grpc/compression.h include/grpc/fork.h include/grpc/grpc.h include/grpc/grpc_posix.h include/grpc/grpc_security.h include/grpc/grpc_security_constants.h include/grpc/load_reporting.h include/grpc/slice.h include/grpc/slice_buffer.h include/grpc/status.h include/grpc/support/workaround_list.h ) string(REPLACE "include/" "" _path ${_hdr}) get_filename_component(_path ${_path} PATH) install(FILES ${_hdr} DESTINATION "${gRPC_INSTALL_INCLUDEDIR}/${_path}" ) endforeach() if(gRPC_INSTALL) install(TARGETS grpc EXPORT gRPCTargets RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} ) endif() if(gRPC_BUILD_CSHARP_EXT) add_library(grpc_csharp_ext SHARED src/csharp/ext/grpc_csharp_ext.c ) set_target_properties(grpc_csharp_ext PROPERTIES VERSION ${gRPC_CORE_VERSION} SOVERSION ${gRPC_CORE_SOVERSION} ) if(WIN32 AND MSVC) set_target_properties(grpc_csharp_ext PROPERTIES COMPILE_PDB_NAME "grpc_csharp_ext" COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) if(gRPC_INSTALL) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/grpc_csharp_ext.pdb DESTINATION ${gRPC_INSTALL_LIBDIR} OPTIONAL ) endif() endif() target_include_directories(grpc_csharp_ext PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(grpc_csharp_ext ${_gRPC_ALLTARGETS_LIBRARIES} grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_library(grpc_test_util test/core/util/cmdline.cc test/core/util/debugger_macros.cc test/core/util/fuzzer_util.cc test/core/util/grpc_profiler.cc test/core/util/histogram.cc test/core/util/memory_counters.cc test/core/util/mock_endpoint.cc test/core/util/parse_hexstring.cc test/core/util/passthru_endpoint.cc test/core/util/port.cc test/core/util/port_isolated_runtime_environment.cc test/core/util/port_server_client.cc test/core/util/reconnect_server.cc test/core/util/slice_splitter.cc test/core/util/subprocess_posix.cc test/core/util/subprocess_windows.cc test/core/util/test_config.cc test/core/util/test_tcp_server.cc test/core/util/tracer_util.cc test/core/util/trickle_endpoint.cc ) set_target_properties(grpc_test_util PROPERTIES VERSION ${gRPC_CORE_VERSION} SOVERSION ${gRPC_CORE_SOVERSION} ) if(WIN32 AND MSVC) set_target_properties(grpc_test_util PROPERTIES COMPILE_PDB_NAME "grpc_test_util" COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) if(gRPC_INSTALL) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/grpc_test_util.pdb DESTINATION ${gRPC_INSTALL_LIBDIR} OPTIONAL ) endif() endif() target_include_directories(grpc_test_util PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(grpc_test_util ${_gRPC_ALLTARGETS_LIBRARIES} grpc gpr address_sorting upb ) if(_gRPC_PLATFORM_IOS OR _gRPC_PLATFORM_MAC) target_link_libraries(grpc_test_util "-framework CoreFoundation") endif() endif() if(gRPC_BUILD_TESTS) add_library(grpc_test_util_unsecure test/core/util/cmdline.cc test/core/util/debugger_macros.cc test/core/util/fuzzer_util.cc test/core/util/grpc_profiler.cc test/core/util/histogram.cc test/core/util/memory_counters.cc test/core/util/mock_endpoint.cc test/core/util/parse_hexstring.cc test/core/util/passthru_endpoint.cc test/core/util/port.cc test/core/util/port_isolated_runtime_environment.cc test/core/util/port_server_client.cc test/core/util/reconnect_server.cc test/core/util/slice_splitter.cc test/core/util/subprocess_posix.cc test/core/util/subprocess_windows.cc test/core/util/test_config.cc test/core/util/test_tcp_server.cc test/core/util/tracer_util.cc test/core/util/trickle_endpoint.cc ) set_target_properties(grpc_test_util_unsecure PROPERTIES VERSION ${gRPC_CORE_VERSION} SOVERSION ${gRPC_CORE_SOVERSION} ) if(WIN32 AND MSVC) set_target_properties(grpc_test_util_unsecure PROPERTIES COMPILE_PDB_NAME "grpc_test_util_unsecure" COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) if(gRPC_INSTALL) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/grpc_test_util_unsecure.pdb DESTINATION ${gRPC_INSTALL_LIBDIR} OPTIONAL ) endif() endif() target_include_directories(grpc_test_util_unsecure PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(grpc_test_util_unsecure ${_gRPC_ALLTARGETS_LIBRARIES} grpc_unsecure gpr address_sorting upb ) if(_gRPC_PLATFORM_IOS OR _gRPC_PLATFORM_MAC) target_link_libraries(grpc_test_util_unsecure "-framework CoreFoundation") endif() endif() add_library(grpc_unsecure src/core/ext/filters/census/grpc_context.cc src/core/ext/filters/client_channel/backend_metric.cc src/core/ext/filters/client_channel/backup_poller.cc src/core/ext/filters/client_channel/channel_connectivity.cc src/core/ext/filters/client_channel/client_channel.cc src/core/ext/filters/client_channel/client_channel_channelz.cc src/core/ext/filters/client_channel/client_channel_factory.cc src/core/ext/filters/client_channel/client_channel_plugin.cc src/core/ext/filters/client_channel/global_subchannel_pool.cc src/core/ext/filters/client_channel/health/health_check_client.cc src/core/ext/filters/client_channel/http_connect_handshaker.cc src/core/ext/filters/client_channel/http_proxy.cc src/core/ext/filters/client_channel/lb_policy.cc src/core/ext/filters/client_channel/lb_policy/address_filtering.cc src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.cc src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc src/core/ext/filters/client_channel/lb_policy/priority/priority.cc src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc src/core/ext/filters/client_channel/lb_policy/xds/cds.cc src/core/ext/filters/client_channel/lb_policy/xds/eds.cc src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc src/core/ext/filters/client_channel/lb_policy_registry.cc src/core/ext/filters/client_channel/local_subchannel_pool.cc src/core/ext/filters/client_channel/parse_address.cc src/core/ext/filters/client_channel/proxy_mapper_registry.cc src/core/ext/filters/client_channel/resolver.cc src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc src/core/ext/filters/client_channel/resolver_registry.cc src/core/ext/filters/client_channel/resolver_result_parsing.cc src/core/ext/filters/client_channel/resolving_lb_policy.cc src/core/ext/filters/client_channel/retry_throttle.cc src/core/ext/filters/client_channel/server_address.cc src/core/ext/filters/client_channel/service_config.cc src/core/ext/filters/client_channel/service_config_parser.cc src/core/ext/filters/client_channel/subchannel.cc src/core/ext/filters/client_channel/subchannel_pool_interface.cc src/core/ext/filters/client_channel/xds/xds_api.cc src/core/ext/filters/client_channel/xds/xds_bootstrap.cc src/core/ext/filters/client_channel/xds/xds_channel.cc src/core/ext/filters/client_channel/xds/xds_client.cc src/core/ext/filters/client_channel/xds/xds_client_stats.cc src/core/ext/filters/client_idle/client_idle_filter.cc src/core/ext/filters/deadline/deadline_filter.cc src/core/ext/filters/http/client/http_client_filter.cc src/core/ext/filters/http/client_authority_filter.cc src/core/ext/filters/http/http_filters_plugin.cc src/core/ext/filters/http/message_compress/message_compress_filter.cc src/core/ext/filters/http/message_compress/message_decompress_filter.cc src/core/ext/filters/http/server/http_server_filter.cc src/core/ext/filters/max_age/max_age_filter.cc src/core/ext/filters/message_size/message_size_filter.cc src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc src/core/ext/filters/workarounds/workaround_utils.cc src/core/ext/transport/chttp2/alpn/alpn.cc src/core/ext/transport/chttp2/client/authority.cc src/core/ext/transport/chttp2/client/chttp2_connector.cc src/core/ext/transport/chttp2/client/insecure/channel_create.cc src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc src/core/ext/transport/chttp2/server/chttp2_server.cc src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc src/core/ext/transport/chttp2/transport/bin_decoder.cc src/core/ext/transport/chttp2/transport/bin_encoder.cc src/core/ext/transport/chttp2/transport/chttp2_plugin.cc src/core/ext/transport/chttp2/transport/chttp2_transport.cc src/core/ext/transport/chttp2/transport/context_list.cc src/core/ext/transport/chttp2/transport/flow_control.cc src/core/ext/transport/chttp2/transport/frame_data.cc src/core/ext/transport/chttp2/transport/frame_goaway.cc src/core/ext/transport/chttp2/transport/frame_ping.cc src/core/ext/transport/chttp2/transport/frame_rst_stream.cc src/core/ext/transport/chttp2/transport/frame_settings.cc src/core/ext/transport/chttp2/transport/frame_window_update.cc src/core/ext/transport/chttp2/transport/hpack_encoder.cc src/core/ext/transport/chttp2/transport/hpack_parser.cc src/core/ext/transport/chttp2/transport/hpack_table.cc src/core/ext/transport/chttp2/transport/http2_settings.cc src/core/ext/transport/chttp2/transport/huffsyms.cc src/core/ext/transport/chttp2/transport/incoming_metadata.cc src/core/ext/transport/chttp2/transport/parsing.cc src/core/ext/transport/chttp2/transport/stream_lists.cc src/core/ext/transport/chttp2/transport/stream_map.cc src/core/ext/transport/chttp2/transport/varint.cc src/core/ext/transport/chttp2/transport/writing.cc src/core/ext/transport/inproc/inproc_plugin.cc src/core/ext/transport/inproc/inproc_transport.cc src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c src/core/ext/upb-generated/envoy/annotations/resource.upb.c src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c src/core/ext/upb-generated/envoy/api/v2/cds.upb.c src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c src/core/ext/upb-generated/envoy/api/v2/eds.upb.c src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c src/core/ext/upb-generated/envoy/api/v2/lds.upb.c src/core/ext/upb-generated/envoy/api/v2/listener.upb.c src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c src/core/ext/upb-generated/envoy/api/v2/rds.upb.c src/core/ext/upb-generated/envoy/api/v2/route.upb.c src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c src/core/ext/upb-generated/envoy/api/v2/srds.upb.c src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c src/core/ext/upb-generated/envoy/type/http.upb.c src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c src/core/ext/upb-generated/envoy/type/matcher/string.upb.c src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c src/core/ext/upb-generated/envoy/type/percent.upb.c src/core/ext/upb-generated/envoy/type/range.upb.c src/core/ext/upb-generated/envoy/type/semantic_version.upb.c src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c src/core/ext/upb-generated/gogoproto/gogo.upb.c src/core/ext/upb-generated/google/api/annotations.upb.c src/core/ext/upb-generated/google/api/http.upb.c src/core/ext/upb-generated/google/protobuf/any.upb.c src/core/ext/upb-generated/google/protobuf/descriptor.upb.c src/core/ext/upb-generated/google/protobuf/duration.upb.c src/core/ext/upb-generated/google/protobuf/empty.upb.c src/core/ext/upb-generated/google/protobuf/struct.upb.c src/core/ext/upb-generated/google/protobuf/timestamp.upb.c src/core/ext/upb-generated/google/protobuf/wrappers.upb.c src/core/ext/upb-generated/google/rpc/status.upb.c src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c src/core/ext/upb-generated/udpa/annotations/migrate.upb.c src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c src/core/ext/upb-generated/udpa/annotations/status.upb.c src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c src/core/ext/upb-generated/validate/validate.upb.c src/core/lib/avl/avl.cc src/core/lib/backoff/backoff.cc src/core/lib/channel/channel_args.cc src/core/lib/channel/channel_stack.cc src/core/lib/channel/channel_stack_builder.cc src/core/lib/channel/channel_trace.cc src/core/lib/channel/channelz.cc src/core/lib/channel/channelz_registry.cc src/core/lib/channel/connected_channel.cc src/core/lib/channel/handshaker.cc src/core/lib/channel/handshaker_registry.cc src/core/lib/channel/status_util.cc src/core/lib/compression/compression.cc src/core/lib/compression/compression_args.cc src/core/lib/compression/compression_internal.cc src/core/lib/compression/message_compress.cc src/core/lib/compression/stream_compression.cc src/core/lib/compression/stream_compression_gzip.cc src/core/lib/compression/stream_compression_identity.cc src/core/lib/debug/stats.cc src/core/lib/debug/stats_data.cc src/core/lib/debug/trace.cc src/core/lib/http/format_request.cc src/core/lib/http/httpcli.cc src/core/lib/http/parser.cc src/core/lib/iomgr/buffer_list.cc src/core/lib/iomgr/call_combiner.cc src/core/lib/iomgr/cfstream_handle.cc src/core/lib/iomgr/combiner.cc src/core/lib/iomgr/dualstack_socket_posix.cc src/core/lib/iomgr/endpoint.cc src/core/lib/iomgr/endpoint_cfstream.cc src/core/lib/iomgr/endpoint_pair_posix.cc src/core/lib/iomgr/endpoint_pair_uv.cc src/core/lib/iomgr/endpoint_pair_windows.cc src/core/lib/iomgr/error.cc src/core/lib/iomgr/error_cfstream.cc src/core/lib/iomgr/ev_apple.cc src/core/lib/iomgr/ev_epoll1_linux.cc src/core/lib/iomgr/ev_epollex_linux.cc src/core/lib/iomgr/ev_poll_posix.cc src/core/lib/iomgr/ev_posix.cc src/core/lib/iomgr/ev_windows.cc src/core/lib/iomgr/exec_ctx.cc src/core/lib/iomgr/executor.cc src/core/lib/iomgr/executor/mpmcqueue.cc src/core/lib/iomgr/executor/threadpool.cc src/core/lib/iomgr/fork_posix.cc src/core/lib/iomgr/fork_windows.cc src/core/lib/iomgr/gethostname_fallback.cc src/core/lib/iomgr/gethostname_host_name_max.cc src/core/lib/iomgr/gethostname_sysconf.cc src/core/lib/iomgr/grpc_if_nametoindex_posix.cc src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc src/core/lib/iomgr/internal_errqueue.cc src/core/lib/iomgr/iocp_windows.cc src/core/lib/iomgr/iomgr.cc src/core/lib/iomgr/iomgr_custom.cc src/core/lib/iomgr/iomgr_internal.cc src/core/lib/iomgr/iomgr_posix.cc src/core/lib/iomgr/iomgr_posix_cfstream.cc src/core/lib/iomgr/iomgr_uv.cc src/core/lib/iomgr/iomgr_windows.cc src/core/lib/iomgr/is_epollexclusive_available.cc src/core/lib/iomgr/load_file.cc src/core/lib/iomgr/lockfree_event.cc src/core/lib/iomgr/poller/eventmanager_libuv.cc src/core/lib/iomgr/polling_entity.cc src/core/lib/iomgr/pollset.cc src/core/lib/iomgr/pollset_custom.cc src/core/lib/iomgr/pollset_set.cc src/core/lib/iomgr/pollset_set_custom.cc src/core/lib/iomgr/pollset_set_windows.cc src/core/lib/iomgr/pollset_uv.cc src/core/lib/iomgr/pollset_windows.cc src/core/lib/iomgr/resolve_address.cc src/core/lib/iomgr/resolve_address_custom.cc src/core/lib/iomgr/resolve_address_posix.cc src/core/lib/iomgr/resolve_address_windows.cc src/core/lib/iomgr/resource_quota.cc src/core/lib/iomgr/sockaddr_utils.cc src/core/lib/iomgr/socket_factory_posix.cc src/core/lib/iomgr/socket_mutator.cc src/core/lib/iomgr/socket_utils_common_posix.cc src/core/lib/iomgr/socket_utils_linux.cc src/core/lib/iomgr/socket_utils_posix.cc src/core/lib/iomgr/socket_utils_uv.cc src/core/lib/iomgr/socket_utils_windows.cc src/core/lib/iomgr/socket_windows.cc src/core/lib/iomgr/tcp_client.cc src/core/lib/iomgr/tcp_client_cfstream.cc src/core/lib/iomgr/tcp_client_custom.cc src/core/lib/iomgr/tcp_client_posix.cc src/core/lib/iomgr/tcp_client_windows.cc src/core/lib/iomgr/tcp_custom.cc src/core/lib/iomgr/tcp_posix.cc src/core/lib/iomgr/tcp_server.cc src/core/lib/iomgr/tcp_server_custom.cc src/core/lib/iomgr/tcp_server_posix.cc src/core/lib/iomgr/tcp_server_utils_posix_common.cc src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc src/core/lib/iomgr/tcp_server_windows.cc src/core/lib/iomgr/tcp_uv.cc src/core/lib/iomgr/tcp_windows.cc src/core/lib/iomgr/time_averaged_stats.cc src/core/lib/iomgr/timer.cc src/core/lib/iomgr/timer_custom.cc src/core/lib/iomgr/timer_generic.cc src/core/lib/iomgr/timer_heap.cc src/core/lib/iomgr/timer_manager.cc src/core/lib/iomgr/timer_uv.cc src/core/lib/iomgr/udp_server.cc src/core/lib/iomgr/unix_sockets_posix.cc src/core/lib/iomgr/unix_sockets_posix_noop.cc src/core/lib/iomgr/wakeup_fd_eventfd.cc src/core/lib/iomgr/wakeup_fd_nospecial.cc src/core/lib/iomgr/wakeup_fd_pipe.cc src/core/lib/iomgr/wakeup_fd_posix.cc src/core/lib/iomgr/work_serializer.cc src/core/lib/json/json_reader.cc src/core/lib/json/json_writer.cc src/core/lib/slice/b64.cc src/core/lib/slice/percent_encoding.cc src/core/lib/slice/slice.cc src/core/lib/slice/slice_buffer.cc src/core/lib/slice/slice_intern.cc src/core/lib/slice/slice_string_helpers.cc src/core/lib/surface/api_trace.cc src/core/lib/surface/byte_buffer.cc src/core/lib/surface/byte_buffer_reader.cc src/core/lib/surface/call.cc src/core/lib/surface/call_details.cc src/core/lib/surface/call_log_batch.cc src/core/lib/surface/channel.cc src/core/lib/surface/channel_init.cc src/core/lib/surface/channel_ping.cc src/core/lib/surface/channel_stack_type.cc src/core/lib/surface/completion_queue.cc src/core/lib/surface/completion_queue_factory.cc src/core/lib/surface/event_string.cc src/core/lib/surface/init.cc src/core/lib/surface/init_unsecure.cc src/core/lib/surface/lame_client.cc src/core/lib/surface/metadata_array.cc src/core/lib/surface/server.cc src/core/lib/surface/validate_metadata.cc src/core/lib/surface/version.cc src/core/lib/transport/bdp_estimator.cc src/core/lib/transport/byte_stream.cc src/core/lib/transport/connectivity_state.cc src/core/lib/transport/error_utils.cc src/core/lib/transport/metadata.cc src/core/lib/transport/metadata_batch.cc src/core/lib/transport/pid_controller.cc src/core/lib/transport/static_metadata.cc src/core/lib/transport/status_conversion.cc src/core/lib/transport/status_metadata.cc src/core/lib/transport/timeout_encoding.cc src/core/lib/transport/transport.cc src/core/lib/transport/transport_op_string.cc src/core/lib/uri/uri_parser.cc src/core/plugin_registry/grpc_unsecure_plugin_registry.cc ) set_target_properties(grpc_unsecure PROPERTIES VERSION ${gRPC_CORE_VERSION} SOVERSION ${gRPC_CORE_SOVERSION} ) if(WIN32 AND MSVC) set_target_properties(grpc_unsecure PROPERTIES COMPILE_PDB_NAME "grpc_unsecure" COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) if(gRPC_INSTALL) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/grpc_unsecure.pdb DESTINATION ${gRPC_INSTALL_LIBDIR} OPTIONAL ) endif() endif() target_include_directories(grpc_unsecure PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(grpc_unsecure ${_gRPC_BASELIB_LIBRARIES} ${_gRPC_ZLIB_LIBRARIES} ${_gRPC_CARES_LIBRARIES} ${_gRPC_ADDRESS_SORTING_LIBRARIES} ${_gRPC_UPB_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} gpr address_sorting upb absl::optional absl::strings absl::inlined_vector ) if(_gRPC_PLATFORM_IOS OR _gRPC_PLATFORM_MAC) target_link_libraries(grpc_unsecure "-framework CoreFoundation") endif() foreach(_hdr include/grpc/byte_buffer.h include/grpc/byte_buffer_reader.h include/grpc/census.h include/grpc/compression.h include/grpc/fork.h include/grpc/grpc.h include/grpc/grpc_posix.h include/grpc/grpc_security_constants.h include/grpc/load_reporting.h include/grpc/slice.h include/grpc/slice_buffer.h include/grpc/status.h include/grpc/support/workaround_list.h ) string(REPLACE "include/" "" _path ${_hdr}) get_filename_component(_path ${_path} PATH) install(FILES ${_hdr} DESTINATION "${gRPC_INSTALL_INCLUDEDIR}/${_path}" ) endforeach() if(gRPC_INSTALL) install(TARGETS grpc_unsecure EXPORT gRPCTargets RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} ) endif() if(gRPC_BUILD_TESTS) if(gRPC_BUILD_CODEGEN) add_library(benchmark_helpers ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_mock.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/microbenchmarks/helpers.cc ) set_target_properties(benchmark_helpers PROPERTIES VERSION ${gRPC_CPP_VERSION} SOVERSION ${gRPC_CPP_SOVERSION} ) if(WIN32 AND MSVC) set_target_properties(benchmark_helpers PROPERTIES COMPILE_PDB_NAME "benchmark_helpers" COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) if(gRPC_INSTALL) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/benchmark_helpers.pdb DESTINATION ${gRPC_INSTALL_LIBDIR} OPTIONAL ) endif() endif() target_include_directories(benchmark_helpers PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(benchmark_helpers ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util_unsecure grpc++_unsecure grpc_unsecure grpc++_test_config gpr address_sorting upb ${_gRPC_BENCHMARK_LIBRARIES} ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() add_library(grpc++ src/cpp/client/channel_cc.cc src/cpp/client/client_context.cc src/cpp/client/client_interceptor.cc src/cpp/client/create_channel.cc src/cpp/client/create_channel_internal.cc src/cpp/client/create_channel_posix.cc src/cpp/client/credentials_cc.cc src/cpp/client/insecure_credentials.cc src/cpp/client/secure_credentials.cc src/cpp/codegen/codegen_init.cc src/cpp/common/alarm.cc src/cpp/common/auth_property_iterator.cc src/cpp/common/channel_arguments.cc src/cpp/common/channel_filter.cc src/cpp/common/completion_queue_cc.cc src/cpp/common/core_codegen.cc src/cpp/common/resource_quota_cc.cc src/cpp/common/rpc_method.cc src/cpp/common/secure_auth_context.cc src/cpp/common/secure_channel_arguments.cc src/cpp/common/secure_create_auth_context.cc src/cpp/common/tls_credentials_options.cc src/cpp/common/tls_credentials_options_util.cc src/cpp/common/validate_service_config.cc src/cpp/common/version_cc.cc src/cpp/server/async_generic_service.cc src/cpp/server/channel_argument_option.cc src/cpp/server/create_default_thread_pool.cc src/cpp/server/dynamic_thread_pool.cc src/cpp/server/external_connection_acceptor_impl.cc src/cpp/server/health/default_health_check_service.cc src/cpp/server/health/health_check_service.cc src/cpp/server/health/health_check_service_server_builder_option.cc src/cpp/server/insecure_server_credentials.cc src/cpp/server/secure_server_credentials.cc src/cpp/server/server_builder.cc src/cpp/server/server_callback.cc src/cpp/server/server_cc.cc src/cpp/server/server_context.cc src/cpp/server/server_credentials.cc src/cpp/server/server_posix.cc src/cpp/thread_manager/thread_manager.cc src/cpp/util/byte_buffer_cc.cc src/cpp/util/status.cc src/cpp/util/string_ref.cc src/cpp/util/time_cc.cc ) set_target_properties(grpc++ PROPERTIES VERSION ${gRPC_CPP_VERSION} SOVERSION ${gRPC_CPP_SOVERSION} ) if(WIN32 AND MSVC) set_target_properties(grpc++ PROPERTIES COMPILE_PDB_NAME "grpc++" COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) if(gRPC_INSTALL) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/grpc++.pdb DESTINATION ${gRPC_INSTALL_LIBDIR} OPTIONAL ) endif() endif() target_include_directories(grpc++ PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(grpc++ ${_gRPC_BASELIB_LIBRARIES} ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc gpr address_sorting upb ) foreach(_hdr include/grpc++/alarm.h include/grpc++/channel.h include/grpc++/client_context.h include/grpc++/completion_queue.h include/grpc++/create_channel.h include/grpc++/create_channel_posix.h include/grpc++/ext/health_check_service_server_builder_option.h include/grpc++/generic/async_generic_service.h include/grpc++/generic/generic_stub.h include/grpc++/grpc++.h include/grpc++/health_check_service_interface.h include/grpc++/impl/call.h include/grpc++/impl/channel_argument_option.h include/grpc++/impl/client_unary_call.h include/grpc++/impl/codegen/async_stream.h include/grpc++/impl/codegen/async_unary_call.h include/grpc++/impl/codegen/byte_buffer.h include/grpc++/impl/codegen/call.h include/grpc++/impl/codegen/call_hook.h include/grpc++/impl/codegen/channel_interface.h include/grpc++/impl/codegen/client_context.h include/grpc++/impl/codegen/client_unary_call.h include/grpc++/impl/codegen/completion_queue.h include/grpc++/impl/codegen/completion_queue_tag.h include/grpc++/impl/codegen/config.h include/grpc++/impl/codegen/config_protobuf.h include/grpc++/impl/codegen/core_codegen.h include/grpc++/impl/codegen/core_codegen_interface.h include/grpc++/impl/codegen/create_auth_context.h include/grpc++/impl/codegen/grpc_library.h include/grpc++/impl/codegen/metadata_map.h include/grpc++/impl/codegen/method_handler_impl.h include/grpc++/impl/codegen/proto_utils.h include/grpc++/impl/codegen/rpc_method.h include/grpc++/impl/codegen/rpc_service_method.h include/grpc++/impl/codegen/security/auth_context.h include/grpc++/impl/codegen/serialization_traits.h include/grpc++/impl/codegen/server_context.h include/grpc++/impl/codegen/server_interface.h include/grpc++/impl/codegen/service_type.h include/grpc++/impl/codegen/slice.h include/grpc++/impl/codegen/status.h include/grpc++/impl/codegen/status_code_enum.h include/grpc++/impl/codegen/string_ref.h include/grpc++/impl/codegen/stub_options.h include/grpc++/impl/codegen/sync_stream.h include/grpc++/impl/codegen/time.h include/grpc++/impl/grpc_library.h include/grpc++/impl/method_handler_impl.h include/grpc++/impl/rpc_method.h include/grpc++/impl/rpc_service_method.h include/grpc++/impl/serialization_traits.h include/grpc++/impl/server_builder_option.h include/grpc++/impl/server_builder_plugin.h include/grpc++/impl/server_initializer.h include/grpc++/impl/service_type.h include/grpc++/resource_quota.h include/grpc++/security/auth_context.h include/grpc++/security/auth_metadata_processor.h include/grpc++/security/credentials.h include/grpc++/security/server_credentials.h include/grpc++/server.h include/grpc++/server_builder.h include/grpc++/server_context.h include/grpc++/server_posix.h include/grpc++/support/async_stream.h include/grpc++/support/async_unary_call.h include/grpc++/support/byte_buffer.h include/grpc++/support/channel_arguments.h include/grpc++/support/config.h include/grpc++/support/slice.h include/grpc++/support/status.h include/grpc++/support/status_code_enum.h include/grpc++/support/string_ref.h include/grpc++/support/stub_options.h include/grpc++/support/sync_stream.h include/grpc++/support/time.h include/grpcpp/alarm.h include/grpcpp/alarm_impl.h include/grpcpp/channel.h include/grpcpp/channel_impl.h include/grpcpp/client_context.h include/grpcpp/completion_queue.h include/grpcpp/completion_queue_impl.h include/grpcpp/create_channel.h include/grpcpp/create_channel_impl.h include/grpcpp/create_channel_posix.h include/grpcpp/create_channel_posix_impl.h include/grpcpp/ext/health_check_service_server_builder_option.h include/grpcpp/generic/async_generic_service.h include/grpcpp/generic/generic_stub.h include/grpcpp/generic/generic_stub_impl.h include/grpcpp/grpcpp.h include/grpcpp/health_check_service_interface.h include/grpcpp/health_check_service_interface_impl.h include/grpcpp/impl/call.h include/grpcpp/impl/channel_argument_option.h include/grpcpp/impl/client_unary_call.h include/grpcpp/impl/codegen/async_generic_service.h include/grpcpp/impl/codegen/async_stream.h include/grpcpp/impl/codegen/async_stream_impl.h include/grpcpp/impl/codegen/async_unary_call.h include/grpcpp/impl/codegen/async_unary_call_impl.h include/grpcpp/impl/codegen/byte_buffer.h include/grpcpp/impl/codegen/call.h include/grpcpp/impl/codegen/call_hook.h include/grpcpp/impl/codegen/call_op_set.h include/grpcpp/impl/codegen/call_op_set_interface.h include/grpcpp/impl/codegen/callback_common.h include/grpcpp/impl/codegen/channel_interface.h include/grpcpp/impl/codegen/client_callback.h include/grpcpp/impl/codegen/client_callback_impl.h include/grpcpp/impl/codegen/client_context.h include/grpcpp/impl/codegen/client_context_impl.h include/grpcpp/impl/codegen/client_interceptor.h include/grpcpp/impl/codegen/client_unary_call.h include/grpcpp/impl/codegen/completion_queue.h include/grpcpp/impl/codegen/completion_queue_impl.h include/grpcpp/impl/codegen/completion_queue_tag.h include/grpcpp/impl/codegen/config.h include/grpcpp/impl/codegen/config_protobuf.h include/grpcpp/impl/codegen/core_codegen.h include/grpcpp/impl/codegen/core_codegen_interface.h include/grpcpp/impl/codegen/create_auth_context.h include/grpcpp/impl/codegen/delegating_channel.h include/grpcpp/impl/codegen/grpc_library.h include/grpcpp/impl/codegen/intercepted_channel.h include/grpcpp/impl/codegen/interceptor.h include/grpcpp/impl/codegen/interceptor_common.h include/grpcpp/impl/codegen/message_allocator.h include/grpcpp/impl/codegen/metadata_map.h include/grpcpp/impl/codegen/method_handler.h include/grpcpp/impl/codegen/method_handler_impl.h include/grpcpp/impl/codegen/proto_buffer_reader.h include/grpcpp/impl/codegen/proto_buffer_writer.h include/grpcpp/impl/codegen/proto_utils.h include/grpcpp/impl/codegen/rpc_method.h include/grpcpp/impl/codegen/rpc_service_method.h include/grpcpp/impl/codegen/security/auth_context.h include/grpcpp/impl/codegen/serialization_traits.h include/grpcpp/impl/codegen/server_callback.h include/grpcpp/impl/codegen/server_callback_handlers.h include/grpcpp/impl/codegen/server_callback_impl.h include/grpcpp/impl/codegen/server_context.h include/grpcpp/impl/codegen/server_context_impl.h include/grpcpp/impl/codegen/server_interceptor.h include/grpcpp/impl/codegen/server_interface.h include/grpcpp/impl/codegen/service_type.h include/grpcpp/impl/codegen/slice.h include/grpcpp/impl/codegen/status.h include/grpcpp/impl/codegen/status_code_enum.h include/grpcpp/impl/codegen/string_ref.h include/grpcpp/impl/codegen/stub_options.h include/grpcpp/impl/codegen/sync.h include/grpcpp/impl/codegen/sync_stream.h include/grpcpp/impl/codegen/sync_stream_impl.h include/grpcpp/impl/codegen/time.h include/grpcpp/impl/grpc_library.h include/grpcpp/impl/method_handler_impl.h include/grpcpp/impl/rpc_method.h include/grpcpp/impl/rpc_service_method.h include/grpcpp/impl/serialization_traits.h include/grpcpp/impl/server_builder_option.h include/grpcpp/impl/server_builder_option_impl.h include/grpcpp/impl/server_builder_plugin.h include/grpcpp/impl/server_initializer.h include/grpcpp/impl/server_initializer_impl.h include/grpcpp/impl/service_type.h include/grpcpp/resource_quota.h include/grpcpp/resource_quota_impl.h include/grpcpp/security/auth_context.h include/grpcpp/security/auth_metadata_processor.h include/grpcpp/security/auth_metadata_processor_impl.h include/grpcpp/security/credentials.h include/grpcpp/security/credentials_impl.h include/grpcpp/security/server_credentials.h include/grpcpp/security/server_credentials_impl.h include/grpcpp/security/tls_credentials_options.h include/grpcpp/server.h include/grpcpp/server_builder.h include/grpcpp/server_builder_impl.h include/grpcpp/server_context.h include/grpcpp/server_impl.h include/grpcpp/server_posix.h include/grpcpp/server_posix_impl.h include/grpcpp/support/async_stream.h include/grpcpp/support/async_stream_impl.h include/grpcpp/support/async_unary_call.h include/grpcpp/support/async_unary_call_impl.h include/grpcpp/support/byte_buffer.h include/grpcpp/support/channel_arguments.h include/grpcpp/support/channel_arguments_impl.h include/grpcpp/support/client_callback.h include/grpcpp/support/client_callback_impl.h include/grpcpp/support/client_interceptor.h include/grpcpp/support/config.h include/grpcpp/support/interceptor.h include/grpcpp/support/message_allocator.h include/grpcpp/support/method_handler.h include/grpcpp/support/proto_buffer_reader.h include/grpcpp/support/proto_buffer_writer.h include/grpcpp/support/server_callback.h include/grpcpp/support/server_callback_impl.h include/grpcpp/support/server_interceptor.h include/grpcpp/support/slice.h include/grpcpp/support/status.h include/grpcpp/support/status_code_enum.h include/grpcpp/support/string_ref.h include/grpcpp/support/stub_options.h include/grpcpp/support/sync_stream.h include/grpcpp/support/sync_stream_impl.h include/grpcpp/support/time.h include/grpcpp/support/validate_service_config.h ) string(REPLACE "include/" "" _path ${_hdr}) get_filename_component(_path ${_path} PATH) install(FILES ${_hdr} DESTINATION "${gRPC_INSTALL_INCLUDEDIR}/${_path}" ) endforeach() if(gRPC_INSTALL) install(TARGETS grpc++ EXPORT gRPCTargets RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} ) endif() add_library(grpc++_alts src/cpp/common/alts_context.cc src/cpp/common/alts_util.cc ) set_target_properties(grpc++_alts PROPERTIES VERSION ${gRPC_CPP_VERSION} SOVERSION ${gRPC_CPP_SOVERSION} ) if(WIN32 AND MSVC) set_target_properties(grpc++_alts PROPERTIES COMPILE_PDB_NAME "grpc++_alts" COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) if(gRPC_INSTALL) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/grpc++_alts.pdb DESTINATION ${gRPC_INSTALL_LIBDIR} OPTIONAL ) endif() endif() target_include_directories(grpc++_alts PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(grpc++_alts ${_gRPC_BASELIB_LIBRARIES} ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++ grpc gpr address_sorting upb ) foreach(_hdr include/grpcpp/security/alts_context.h include/grpcpp/security/alts_util.h ) string(REPLACE "include/" "" _path ${_hdr}) get_filename_component(_path ${_path} PATH) install(FILES ${_hdr} DESTINATION "${gRPC_INSTALL_INCLUDEDIR}/${_path}" ) endforeach() if(gRPC_INSTALL) install(TARGETS grpc++_alts EXPORT gRPCTargets RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} ) endif() if(gRPC_BUILD_CODEGEN) add_library(grpc++_error_details ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/status/status.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/status/status.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/status/status.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/status/status.grpc.pb.h src/cpp/util/error_details.cc ) set_target_properties(grpc++_error_details PROPERTIES VERSION ${gRPC_CPP_VERSION} SOVERSION ${gRPC_CPP_SOVERSION} ) if(WIN32 AND MSVC) set_target_properties(grpc++_error_details PROPERTIES COMPILE_PDB_NAME "grpc++_error_details" COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) if(gRPC_INSTALL) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/grpc++_error_details.pdb DESTINATION ${gRPC_INSTALL_LIBDIR} OPTIONAL ) endif() endif() target_include_directories(grpc++_error_details PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(grpc++_error_details ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++ grpc gpr address_sorting upb ) foreach(_hdr include/grpc++/support/error_details.h include/grpcpp/support/error_details.h include/grpcpp/support/error_details_impl.h ) string(REPLACE "include/" "" _path ${_hdr}) get_filename_component(_path ${_path} PATH) install(FILES ${_hdr} DESTINATION "${gRPC_INSTALL_INCLUDEDIR}/${_path}" ) endforeach() endif() if(gRPC_BUILD_CODEGEN) if(gRPC_INSTALL) install(TARGETS grpc++_error_details EXPORT gRPCTargets RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} ) endif() endif() if(gRPC_BUILD_CODEGEN) add_library(grpc++_reflection ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.h src/cpp/ext/proto_server_reflection.cc src/cpp/ext/proto_server_reflection_plugin.cc ) set_target_properties(grpc++_reflection PROPERTIES VERSION ${gRPC_CPP_VERSION} SOVERSION ${gRPC_CPP_SOVERSION} ) if(WIN32 AND MSVC) set_target_properties(grpc++_reflection PROPERTIES COMPILE_PDB_NAME "grpc++_reflection" COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) if(gRPC_INSTALL) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/grpc++_reflection.pdb DESTINATION ${gRPC_INSTALL_LIBDIR} OPTIONAL ) endif() endif() target_include_directories(grpc++_reflection PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(grpc++_reflection ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++ grpc gpr address_sorting upb ) foreach(_hdr include/grpc++/ext/proto_server_reflection_plugin.h include/grpcpp/ext/proto_server_reflection_plugin.h include/grpcpp/ext/proto_server_reflection_plugin_impl.h ) string(REPLACE "include/" "" _path ${_hdr}) get_filename_component(_path ${_path} PATH) install(FILES ${_hdr} DESTINATION "${gRPC_INSTALL_INCLUDEDIR}/${_path}" ) endforeach() endif() if(gRPC_BUILD_CODEGEN) if(gRPC_INSTALL) install(TARGETS grpc++_reflection EXPORT gRPCTargets RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} ) endif() endif() if(gRPC_BUILD_TESTS) add_library(grpc++_test src/cpp/client/channel_test_peer.cc ) set_target_properties(grpc++_test PROPERTIES VERSION ${gRPC_CPP_VERSION} SOVERSION ${gRPC_CPP_SOVERSION} ) if(WIN32 AND MSVC) set_target_properties(grpc++_test PROPERTIES COMPILE_PDB_NAME "grpc++_test" COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) if(gRPC_INSTALL) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/grpc++_test.pdb DESTINATION ${gRPC_INSTALL_LIBDIR} OPTIONAL ) endif() endif() target_include_directories(grpc++_test PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(grpc++_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) foreach(_hdr include/grpc++/test/mock_stream.h include/grpc++/test/server_context_test_spouse.h include/grpcpp/test/channel_test_peer.h include/grpcpp/test/default_reactor_test_peer.h include/grpcpp/test/mock_stream.h include/grpcpp/test/server_context_test_spouse.h ) string(REPLACE "include/" "" _path ${_hdr}) get_filename_component(_path ${_path} PATH) install(FILES ${_hdr} DESTINATION "${gRPC_INSTALL_INCLUDEDIR}/${_path}" ) endforeach() endif() if(gRPC_BUILD_TESTS) add_library(grpc++_test_config test/cpp/util/test_config_cc.cc ) set_target_properties(grpc++_test_config PROPERTIES VERSION ${gRPC_CPP_VERSION} SOVERSION ${gRPC_CPP_SOVERSION} ) if(WIN32 AND MSVC) set_target_properties(grpc++_test_config PROPERTIES COMPILE_PDB_NAME "grpc++_test_config" COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) if(gRPC_INSTALL) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/grpc++_test_config.pdb DESTINATION ${gRPC_INSTALL_LIBDIR} OPTIONAL ) endif() endif() target_include_directories(grpc++_test_config PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(grpc++_test_config ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} gpr ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_library(grpc++_test_util test/core/end2end/data/client_certs.cc test/core/end2end/data/server1_cert.cc test/core/end2end/data/server1_key.cc test/core/end2end/data/test_root_cert.cc test/cpp/util/byte_buffer_proto_helper.cc test/cpp/util/create_test_channel.cc test/cpp/util/string_ref_helper.cc test/cpp/util/subprocess.cc test/cpp/util/test_credentials_provider.cc ) set_target_properties(grpc++_test_util PROPERTIES VERSION ${gRPC_CPP_VERSION} SOVERSION ${gRPC_CPP_SOVERSION} ) if(WIN32 AND MSVC) set_target_properties(grpc++_test_util PROPERTIES COMPILE_PDB_NAME "grpc++_test_util" COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) if(gRPC_INSTALL) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/grpc++_test_util.pdb DESTINATION ${gRPC_INSTALL_LIBDIR} OPTIONAL ) endif() endif() target_include_directories(grpc++_test_util PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(grpc++_test_util ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() add_library(grpc++_unsecure src/cpp/client/channel_cc.cc src/cpp/client/client_context.cc src/cpp/client/client_interceptor.cc src/cpp/client/create_channel.cc src/cpp/client/create_channel_internal.cc src/cpp/client/create_channel_posix.cc src/cpp/client/credentials_cc.cc src/cpp/client/insecure_credentials.cc src/cpp/codegen/codegen_init.cc src/cpp/common/alarm.cc src/cpp/common/channel_arguments.cc src/cpp/common/channel_filter.cc src/cpp/common/completion_queue_cc.cc src/cpp/common/core_codegen.cc src/cpp/common/insecure_create_auth_context.cc src/cpp/common/resource_quota_cc.cc src/cpp/common/rpc_method.cc src/cpp/common/validate_service_config.cc src/cpp/common/version_cc.cc src/cpp/server/async_generic_service.cc src/cpp/server/channel_argument_option.cc src/cpp/server/create_default_thread_pool.cc src/cpp/server/dynamic_thread_pool.cc src/cpp/server/external_connection_acceptor_impl.cc src/cpp/server/health/default_health_check_service.cc src/cpp/server/health/health_check_service.cc src/cpp/server/health/health_check_service_server_builder_option.cc src/cpp/server/insecure_server_credentials.cc src/cpp/server/server_builder.cc src/cpp/server/server_callback.cc src/cpp/server/server_cc.cc src/cpp/server/server_context.cc src/cpp/server/server_credentials.cc src/cpp/server/server_posix.cc src/cpp/thread_manager/thread_manager.cc src/cpp/util/byte_buffer_cc.cc src/cpp/util/status.cc src/cpp/util/string_ref.cc src/cpp/util/time_cc.cc ) set_target_properties(grpc++_unsecure PROPERTIES VERSION ${gRPC_CPP_VERSION} SOVERSION ${gRPC_CPP_SOVERSION} ) if(WIN32 AND MSVC) set_target_properties(grpc++_unsecure PROPERTIES COMPILE_PDB_NAME "grpc++_unsecure" COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) if(gRPC_INSTALL) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/grpc++_unsecure.pdb DESTINATION ${gRPC_INSTALL_LIBDIR} OPTIONAL ) endif() endif() target_include_directories(grpc++_unsecure PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(grpc++_unsecure ${_gRPC_BASELIB_LIBRARIES} ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_unsecure gpr address_sorting upb ) foreach(_hdr include/grpc++/alarm.h include/grpc++/channel.h include/grpc++/client_context.h include/grpc++/completion_queue.h include/grpc++/create_channel.h include/grpc++/create_channel_posix.h include/grpc++/ext/health_check_service_server_builder_option.h include/grpc++/generic/async_generic_service.h include/grpc++/generic/generic_stub.h include/grpc++/grpc++.h include/grpc++/health_check_service_interface.h include/grpc++/impl/call.h include/grpc++/impl/channel_argument_option.h include/grpc++/impl/client_unary_call.h include/grpc++/impl/codegen/async_stream.h include/grpc++/impl/codegen/async_unary_call.h include/grpc++/impl/codegen/byte_buffer.h include/grpc++/impl/codegen/call.h include/grpc++/impl/codegen/call_hook.h include/grpc++/impl/codegen/channel_interface.h include/grpc++/impl/codegen/client_context.h include/grpc++/impl/codegen/client_unary_call.h include/grpc++/impl/codegen/completion_queue.h include/grpc++/impl/codegen/completion_queue_tag.h include/grpc++/impl/codegen/config.h include/grpc++/impl/codegen/config_protobuf.h include/grpc++/impl/codegen/core_codegen.h include/grpc++/impl/codegen/core_codegen_interface.h include/grpc++/impl/codegen/create_auth_context.h include/grpc++/impl/codegen/grpc_library.h include/grpc++/impl/codegen/metadata_map.h include/grpc++/impl/codegen/method_handler_impl.h include/grpc++/impl/codegen/proto_utils.h include/grpc++/impl/codegen/rpc_method.h include/grpc++/impl/codegen/rpc_service_method.h include/grpc++/impl/codegen/security/auth_context.h include/grpc++/impl/codegen/serialization_traits.h include/grpc++/impl/codegen/server_context.h include/grpc++/impl/codegen/server_interface.h include/grpc++/impl/codegen/service_type.h include/grpc++/impl/codegen/slice.h include/grpc++/impl/codegen/status.h include/grpc++/impl/codegen/status_code_enum.h include/grpc++/impl/codegen/string_ref.h include/grpc++/impl/codegen/stub_options.h include/grpc++/impl/codegen/sync_stream.h include/grpc++/impl/codegen/time.h include/grpc++/impl/grpc_library.h include/grpc++/impl/method_handler_impl.h include/grpc++/impl/rpc_method.h include/grpc++/impl/rpc_service_method.h include/grpc++/impl/serialization_traits.h include/grpc++/impl/server_builder_option.h include/grpc++/impl/server_builder_plugin.h include/grpc++/impl/server_initializer.h include/grpc++/impl/service_type.h include/grpc++/resource_quota.h include/grpc++/security/auth_context.h include/grpc++/security/auth_metadata_processor.h include/grpc++/security/credentials.h include/grpc++/security/server_credentials.h include/grpc++/server.h include/grpc++/server_builder.h include/grpc++/server_context.h include/grpc++/server_posix.h include/grpc++/support/async_stream.h include/grpc++/support/async_unary_call.h include/grpc++/support/byte_buffer.h include/grpc++/support/channel_arguments.h include/grpc++/support/config.h include/grpc++/support/slice.h include/grpc++/support/status.h include/grpc++/support/status_code_enum.h include/grpc++/support/string_ref.h include/grpc++/support/stub_options.h include/grpc++/support/sync_stream.h include/grpc++/support/time.h include/grpcpp/alarm.h include/grpcpp/alarm_impl.h include/grpcpp/channel.h include/grpcpp/channel_impl.h include/grpcpp/client_context.h include/grpcpp/completion_queue.h include/grpcpp/completion_queue_impl.h include/grpcpp/create_channel.h include/grpcpp/create_channel_impl.h include/grpcpp/create_channel_posix.h include/grpcpp/create_channel_posix_impl.h include/grpcpp/ext/health_check_service_server_builder_option.h include/grpcpp/generic/async_generic_service.h include/grpcpp/generic/generic_stub.h include/grpcpp/generic/generic_stub_impl.h include/grpcpp/grpcpp.h include/grpcpp/health_check_service_interface.h include/grpcpp/health_check_service_interface_impl.h include/grpcpp/impl/call.h include/grpcpp/impl/channel_argument_option.h include/grpcpp/impl/client_unary_call.h include/grpcpp/impl/codegen/async_generic_service.h include/grpcpp/impl/codegen/async_stream.h include/grpcpp/impl/codegen/async_stream_impl.h include/grpcpp/impl/codegen/async_unary_call.h include/grpcpp/impl/codegen/async_unary_call_impl.h include/grpcpp/impl/codegen/byte_buffer.h include/grpcpp/impl/codegen/call.h include/grpcpp/impl/codegen/call_hook.h include/grpcpp/impl/codegen/call_op_set.h include/grpcpp/impl/codegen/call_op_set_interface.h include/grpcpp/impl/codegen/callback_common.h include/grpcpp/impl/codegen/channel_interface.h include/grpcpp/impl/codegen/client_callback.h include/grpcpp/impl/codegen/client_callback_impl.h include/grpcpp/impl/codegen/client_context.h include/grpcpp/impl/codegen/client_context_impl.h include/grpcpp/impl/codegen/client_interceptor.h include/grpcpp/impl/codegen/client_unary_call.h include/grpcpp/impl/codegen/completion_queue.h include/grpcpp/impl/codegen/completion_queue_impl.h include/grpcpp/impl/codegen/completion_queue_tag.h include/grpcpp/impl/codegen/config.h include/grpcpp/impl/codegen/config_protobuf.h include/grpcpp/impl/codegen/core_codegen.h include/grpcpp/impl/codegen/core_codegen_interface.h include/grpcpp/impl/codegen/create_auth_context.h include/grpcpp/impl/codegen/delegating_channel.h include/grpcpp/impl/codegen/grpc_library.h include/grpcpp/impl/codegen/intercepted_channel.h include/grpcpp/impl/codegen/interceptor.h include/grpcpp/impl/codegen/interceptor_common.h include/grpcpp/impl/codegen/message_allocator.h include/grpcpp/impl/codegen/metadata_map.h include/grpcpp/impl/codegen/method_handler.h include/grpcpp/impl/codegen/method_handler_impl.h include/grpcpp/impl/codegen/proto_buffer_reader.h include/grpcpp/impl/codegen/proto_buffer_writer.h include/grpcpp/impl/codegen/proto_utils.h include/grpcpp/impl/codegen/rpc_method.h include/grpcpp/impl/codegen/rpc_service_method.h include/grpcpp/impl/codegen/security/auth_context.h include/grpcpp/impl/codegen/serialization_traits.h include/grpcpp/impl/codegen/server_callback.h include/grpcpp/impl/codegen/server_callback_handlers.h include/grpcpp/impl/codegen/server_callback_impl.h include/grpcpp/impl/codegen/server_context.h include/grpcpp/impl/codegen/server_context_impl.h include/grpcpp/impl/codegen/server_interceptor.h include/grpcpp/impl/codegen/server_interface.h include/grpcpp/impl/codegen/service_type.h include/grpcpp/impl/codegen/slice.h include/grpcpp/impl/codegen/status.h include/grpcpp/impl/codegen/status_code_enum.h include/grpcpp/impl/codegen/string_ref.h include/grpcpp/impl/codegen/stub_options.h include/grpcpp/impl/codegen/sync.h include/grpcpp/impl/codegen/sync_stream.h include/grpcpp/impl/codegen/sync_stream_impl.h include/grpcpp/impl/codegen/time.h include/grpcpp/impl/grpc_library.h include/grpcpp/impl/method_handler_impl.h include/grpcpp/impl/rpc_method.h include/grpcpp/impl/rpc_service_method.h include/grpcpp/impl/serialization_traits.h include/grpcpp/impl/server_builder_option.h include/grpcpp/impl/server_builder_option_impl.h include/grpcpp/impl/server_builder_plugin.h include/grpcpp/impl/server_initializer.h include/grpcpp/impl/server_initializer_impl.h include/grpcpp/impl/service_type.h include/grpcpp/resource_quota.h include/grpcpp/resource_quota_impl.h include/grpcpp/security/auth_context.h include/grpcpp/security/auth_metadata_processor.h include/grpcpp/security/auth_metadata_processor_impl.h include/grpcpp/security/credentials.h include/grpcpp/security/credentials_impl.h include/grpcpp/security/server_credentials.h include/grpcpp/security/server_credentials_impl.h include/grpcpp/security/tls_credentials_options.h include/grpcpp/server.h include/grpcpp/server_builder.h include/grpcpp/server_builder_impl.h include/grpcpp/server_context.h include/grpcpp/server_impl.h include/grpcpp/server_posix.h include/grpcpp/server_posix_impl.h include/grpcpp/support/async_stream.h include/grpcpp/support/async_stream_impl.h include/grpcpp/support/async_unary_call.h include/grpcpp/support/async_unary_call_impl.h include/grpcpp/support/byte_buffer.h include/grpcpp/support/channel_arguments.h include/grpcpp/support/channel_arguments_impl.h include/grpcpp/support/client_callback.h include/grpcpp/support/client_callback_impl.h include/grpcpp/support/client_interceptor.h include/grpcpp/support/config.h include/grpcpp/support/interceptor.h include/grpcpp/support/message_allocator.h include/grpcpp/support/method_handler.h include/grpcpp/support/proto_buffer_reader.h include/grpcpp/support/proto_buffer_writer.h include/grpcpp/support/server_callback.h include/grpcpp/support/server_callback_impl.h include/grpcpp/support/server_interceptor.h include/grpcpp/support/slice.h include/grpcpp/support/status.h include/grpcpp/support/status_code_enum.h include/grpcpp/support/string_ref.h include/grpcpp/support/stub_options.h include/grpcpp/support/sync_stream.h include/grpcpp/support/sync_stream_impl.h include/grpcpp/support/time.h include/grpcpp/support/validate_service_config.h ) string(REPLACE "include/" "" _path ${_hdr}) get_filename_component(_path ${_path} PATH) install(FILES ${_hdr} DESTINATION "${gRPC_INSTALL_INCLUDEDIR}/${_path}" ) endforeach() if(gRPC_INSTALL) install(TARGETS grpc++_unsecure EXPORT gRPCTargets RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} ) endif() add_library(grpc_plugin_support src/compiler/cpp_generator.cc src/compiler/csharp_generator.cc src/compiler/node_generator.cc src/compiler/objective_c_generator.cc src/compiler/php_generator.cc src/compiler/python_generator.cc src/compiler/ruby_generator.cc ) set_target_properties(grpc_plugin_support PROPERTIES VERSION ${gRPC_CPP_VERSION} SOVERSION ${gRPC_CPP_SOVERSION} ) if(WIN32 AND MSVC) set_target_properties(grpc_plugin_support PROPERTIES COMPILE_PDB_NAME "grpc_plugin_support" COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) if(gRPC_INSTALL) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/grpc_plugin_support.pdb DESTINATION ${gRPC_INSTALL_LIBDIR} OPTIONAL ) endif() endif() target_include_directories(grpc_plugin_support PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(grpc_plugin_support ${_gRPC_PROTOBUF_PROTOC_LIBRARIES} ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} ) foreach(_hdr include/grpc++/impl/codegen/config_protobuf.h include/grpcpp/impl/codegen/config_protobuf.h ) string(REPLACE "include/" "" _path ${_hdr}) get_filename_component(_path ${_path} PATH) install(FILES ${_hdr} DESTINATION "${gRPC_INSTALL_INCLUDEDIR}/${_path}" ) endforeach() if(gRPC_INSTALL) install(TARGETS grpc_plugin_support EXPORT gRPCTargets RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} ) endif() # grpcpp_channelz doesn't build with protobuf-lite # See https://github.com/grpc/grpc/issues/19473 if(gRPC_BUILD_CODEGEN AND NOT gRPC_USE_PROTO_LITE) add_library(grpcpp_channelz ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/channelz/channelz.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/channelz/channelz.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/channelz/channelz.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/channelz/channelz.grpc.pb.h src/cpp/server/channelz/channelz_service.cc src/cpp/server/channelz/channelz_service_plugin.cc ) set_target_properties(grpcpp_channelz PROPERTIES VERSION ${gRPC_CPP_VERSION} SOVERSION ${gRPC_CPP_SOVERSION} ) if(WIN32 AND MSVC) set_target_properties(grpcpp_channelz PROPERTIES COMPILE_PDB_NAME "grpcpp_channelz" COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) if(gRPC_INSTALL) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/grpcpp_channelz.pdb DESTINATION ${gRPC_INSTALL_LIBDIR} OPTIONAL ) endif() endif() target_include_directories(grpcpp_channelz PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(grpcpp_channelz ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++ grpc gpr address_sorting upb ) foreach(_hdr include/grpcpp/ext/channelz_service_plugin.h include/grpcpp/ext/channelz_service_plugin_impl.h ) string(REPLACE "include/" "" _path ${_hdr}) get_filename_component(_path ${_path} PATH) install(FILES ${_hdr} DESTINATION "${gRPC_INSTALL_INCLUDEDIR}/${_path}" ) endforeach() endif() if(gRPC_BUILD_CODEGEN) if(gRPC_INSTALL) install(TARGETS grpcpp_channelz EXPORT gRPCTargets RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} ) endif() endif() add_library(upb third_party/upb/upb/decode.c third_party/upb/upb/encode.c third_party/upb/upb/msg.c third_party/upb/upb/port.c third_party/upb/upb/table.c third_party/upb/upb/upb.c ) set_target_properties(upb PROPERTIES VERSION ${gRPC_CORE_VERSION} SOVERSION ${gRPC_CORE_SOVERSION} ) if(WIN32 AND MSVC) set_target_properties(upb PROPERTIES COMPILE_PDB_NAME "upb" COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) if(gRPC_INSTALL) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/upb.pdb DESTINATION ${gRPC_INSTALL_LIBDIR} OPTIONAL ) endif() endif() target_include_directories(upb PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(upb ${_gRPC_ALLTARGETS_LIBRARIES} ) if(gRPC_INSTALL) install(TARGETS upb EXPORT gRPCTargets RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} ) endif() add_executable(check_epollexclusive test/build/check_epollexclusive.c ) target_include_directories(check_epollexclusive PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(check_epollexclusive ${_gRPC_ALLTARGETS_LIBRARIES} grpc gpr ) add_executable(gen_hpack_tables tools/codegen/core/gen_hpack_tables.cc ) target_include_directories(gen_hpack_tables PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(gen_hpack_tables ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc gpr ) add_executable(gen_legal_metadata_characters tools/codegen/core/gen_legal_metadata_characters.cc ) target_include_directories(gen_legal_metadata_characters PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(gen_legal_metadata_characters ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} ) add_executable(gen_percent_encoding_tables tools/codegen/core/gen_percent_encoding_tables.cc ) target_include_directories(gen_percent_encoding_tables PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(gen_percent_encoding_tables ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} ) if(gRPC_BUILD_TESTS) add_executable(algorithm_test test/core/compression/algorithm_test.cc ) target_include_directories(algorithm_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(algorithm_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(alloc_test test/core/gpr/alloc_test.cc ) target_include_directories(alloc_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(alloc_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(alpn_test test/core/transport/chttp2/alpn_test.cc ) target_include_directories(alpn_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(alpn_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(alts_counter_test test/core/tsi/alts/crypt/gsec_test_util.cc test/core/tsi/alts/frame_protector/alts_counter_test.cc ) target_include_directories(alts_counter_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(alts_counter_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(alts_crypt_test test/core/tsi/alts/crypt/aes_gcm_test.cc test/core/tsi/alts/crypt/gsec_test_util.cc ) target_include_directories(alts_crypt_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(alts_crypt_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(alts_crypter_test test/core/tsi/alts/crypt/gsec_test_util.cc test/core/tsi/alts/frame_protector/alts_crypter_test.cc ) target_include_directories(alts_crypter_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(alts_crypter_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(alts_frame_protector_test test/core/tsi/alts/crypt/gsec_test_util.cc test/core/tsi/alts/frame_protector/alts_frame_protector_test.cc test/core/tsi/transport_security_test_lib.cc ) target_include_directories(alts_frame_protector_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(alts_frame_protector_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(alts_grpc_record_protocol_test test/core/tsi/alts/crypt/gsec_test_util.cc test/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_test.cc ) target_include_directories(alts_grpc_record_protocol_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(alts_grpc_record_protocol_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(alts_handshaker_client_test test/core/tsi/alts/handshaker/alts_handshaker_client_test.cc test/core/tsi/alts/handshaker/alts_handshaker_service_api_test_lib.cc ) target_include_directories(alts_handshaker_client_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(alts_handshaker_client_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(alts_iovec_record_protocol_test test/core/tsi/alts/crypt/gsec_test_util.cc test/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol_test.cc ) target_include_directories(alts_iovec_record_protocol_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(alts_iovec_record_protocol_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(alts_security_connector_test test/core/security/alts_security_connector_test.cc ) target_include_directories(alts_security_connector_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(alts_security_connector_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(alts_tsi_handshaker_test test/core/tsi/alts/handshaker/alts_handshaker_service_api_test_lib.cc test/core/tsi/alts/handshaker/alts_tsi_handshaker_test.cc ) target_include_directories(alts_tsi_handshaker_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(alts_tsi_handshaker_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(alts_tsi_utils_test test/core/tsi/alts/handshaker/alts_handshaker_service_api_test_lib.cc test/core/tsi/alts/handshaker/alts_tsi_utils_test.cc ) target_include_directories(alts_tsi_utils_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(alts_tsi_utils_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(alts_zero_copy_grpc_protector_test test/core/tsi/alts/crypt/gsec_test_util.cc test/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector_test.cc ) target_include_directories(alts_zero_copy_grpc_protector_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(alts_zero_copy_grpc_protector_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(arena_test test/core/gpr/arena_test.cc ) target_include_directories(arena_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(arena_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(auth_context_test test/core/security/auth_context_test.cc ) target_include_directories(auth_context_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(auth_context_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(avl_test test/core/avl/avl_test.cc ) target_include_directories(avl_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(avl_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(b64_test test/core/slice/b64_test.cc ) target_include_directories(b64_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(b64_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(bad_server_response_test test/core/end2end/bad_server_response_test.cc test/core/end2end/cq_verifier.cc ) target_include_directories(bad_server_response_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(bad_server_response_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(bad_ssl_alpn_test test/core/bad_ssl/bad_ssl_test.cc test/core/end2end/cq_verifier.cc ) target_include_directories(bad_ssl_alpn_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(bad_ssl_alpn_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(bad_ssl_cert_test test/core/bad_ssl/bad_ssl_test.cc test/core/end2end/cq_verifier.cc ) target_include_directories(bad_ssl_cert_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(bad_ssl_cert_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(bin_decoder_test test/core/transport/chttp2/bin_decoder_test.cc ) target_include_directories(bin_decoder_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(bin_decoder_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(bin_encoder_test test/core/transport/chttp2/bin_encoder_test.cc ) target_include_directories(bin_encoder_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(bin_encoder_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(buffer_list_test test/core/iomgr/buffer_list_test.cc ) target_include_directories(buffer_list_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(buffer_list_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(channel_args_test test/core/channel/channel_args_test.cc ) target_include_directories(channel_args_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(channel_args_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(channel_create_test test/core/surface/channel_create_test.cc ) target_include_directories(channel_create_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(channel_create_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(channel_stack_builder_test test/core/channel/channel_stack_builder_test.cc ) target_include_directories(channel_stack_builder_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(channel_stack_builder_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(channel_stack_test test/core/channel/channel_stack_test.cc ) target_include_directories(channel_stack_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(channel_stack_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(check_gcp_environment_linux_test test/core/security/check_gcp_environment_linux_test.cc ) target_include_directories(check_gcp_environment_linux_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(check_gcp_environment_linux_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(check_gcp_environment_windows_test test/core/security/check_gcp_environment_windows_test.cc ) target_include_directories(check_gcp_environment_windows_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(check_gcp_environment_windows_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(client_ssl_test test/core/handshake/client_ssl.cc ) target_include_directories(client_ssl_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(client_ssl_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(cmdline_test test/core/util/cmdline_test.cc ) target_include_directories(cmdline_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(cmdline_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(combiner_test test/core/iomgr/combiner_test.cc ) target_include_directories(combiner_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(combiner_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(completion_queue_threading_test test/core/surface/completion_queue_threading_test.cc ) target_include_directories(completion_queue_threading_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(completion_queue_threading_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(compression_test test/core/compression/compression_test.cc ) target_include_directories(compression_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(compression_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(concurrent_connectivity_test test/core/surface/concurrent_connectivity_test.cc ) target_include_directories(concurrent_connectivity_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(concurrent_connectivity_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(connection_refused_test test/core/end2end/connection_refused_test.cc test/core/end2end/cq_verifier.cc ) target_include_directories(connection_refused_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(connection_refused_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(cpu_test test/core/gpr/cpu_test.cc ) target_include_directories(cpu_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(cpu_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(dns_resolver_connectivity_using_ares_resolver_test test/core/client_channel/resolvers/dns_resolver_connectivity_test.cc ) target_include_directories(dns_resolver_connectivity_using_ares_resolver_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(dns_resolver_connectivity_using_ares_resolver_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(dns_resolver_connectivity_using_native_resolver_test test/core/client_channel/resolvers/dns_resolver_connectivity_test.cc ) target_include_directories(dns_resolver_connectivity_using_native_resolver_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(dns_resolver_connectivity_using_native_resolver_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(dns_resolver_cooldown_test test/core/client_channel/resolvers/dns_resolver_cooldown_test.cc ) target_include_directories(dns_resolver_cooldown_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(dns_resolver_cooldown_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(dns_resolver_test test/core/client_channel/resolvers/dns_resolver_test.cc ) target_include_directories(dns_resolver_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(dns_resolver_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(dualstack_socket_test test/core/end2end/cq_verifier.cc test/core/end2end/dualstack_socket_test.cc ) target_include_directories(dualstack_socket_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(dualstack_socket_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(endpoint_pair_test test/core/iomgr/endpoint_pair_test.cc test/core/iomgr/endpoint_tests.cc ) target_include_directories(endpoint_pair_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(endpoint_pair_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(env_test test/core/gpr/env_test.cc ) target_include_directories(env_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(env_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(error_test test/core/iomgr/endpoint_tests.cc test/core/iomgr/error_test.cc ) target_include_directories(error_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(error_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(ev_epollex_linux_test test/core/iomgr/ev_epollex_linux_test.cc ) target_include_directories(ev_epollex_linux_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(ev_epollex_linux_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(fake_resolver_test test/core/client_channel/resolvers/fake_resolver_test.cc ) target_include_directories(fake_resolver_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(fake_resolver_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(fake_transport_security_test test/core/tsi/fake_transport_security_test.cc test/core/tsi/transport_security_test_lib.cc ) target_include_directories(fake_transport_security_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(fake_transport_security_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(fd_conservation_posix_test test/core/iomgr/fd_conservation_posix_test.cc ) target_include_directories(fd_conservation_posix_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(fd_conservation_posix_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(fd_posix_test test/core/iomgr/fd_posix_test.cc ) target_include_directories(fd_posix_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(fd_posix_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(fling_stream_test test/core/end2end/data/client_certs.cc test/core/end2end/data/server1_cert.cc test/core/end2end/data/server1_key.cc test/core/end2end/data/test_root_cert.cc test/core/fling/fling_stream_test.cc ) target_include_directories(fling_stream_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(fling_stream_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(fling_test test/core/end2end/data/client_certs.cc test/core/end2end/data/server1_cert.cc test/core/end2end/data/server1_key.cc test/core/end2end/data/test_root_cert.cc test/core/fling/fling_test.cc ) target_include_directories(fling_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(fling_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(fork_test test/core/gprpp/fork_test.cc ) target_include_directories(fork_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(fork_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(format_request_test test/core/end2end/data/client_certs.cc test/core/end2end/data/server1_cert.cc test/core/end2end/data/server1_key.cc test/core/end2end/data/test_root_cert.cc test/core/http/format_request_test.cc ) target_include_directories(format_request_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(format_request_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(frame_handler_test test/core/tsi/alts/crypt/gsec_test_util.cc test/core/tsi/alts/frame_protector/frame_handler_test.cc ) target_include_directories(frame_handler_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(frame_handler_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(goaway_server_test test/core/end2end/cq_verifier.cc test/core/end2end/goaway_server_test.cc ) target_include_directories(goaway_server_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(goaway_server_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(grpc_alts_credentials_options_test test/core/security/grpc_alts_credentials_options_test.cc ) target_include_directories(grpc_alts_credentials_options_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(grpc_alts_credentials_options_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(grpc_byte_buffer_reader_test test/core/surface/byte_buffer_reader_test.cc ) target_include_directories(grpc_byte_buffer_reader_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(grpc_byte_buffer_reader_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(grpc_completion_queue_test test/core/surface/completion_queue_test.cc ) target_include_directories(grpc_completion_queue_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(grpc_completion_queue_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(grpc_ipv6_loopback_available_test test/core/iomgr/grpc_ipv6_loopback_available_test.cc ) target_include_directories(grpc_ipv6_loopback_available_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(grpc_ipv6_loopback_available_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(handshake_server_with_readahead_handshaker_test test/core/handshake/readahead_handshaker_server_ssl.cc test/core/handshake/server_ssl_common.cc ) target_include_directories(handshake_server_with_readahead_handshaker_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(handshake_server_with_readahead_handshaker_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(handshake_verify_peer_options_test test/core/handshake/verify_peer_options.cc ) target_include_directories(handshake_verify_peer_options_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(handshake_verify_peer_options_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(histogram_test test/core/util/histogram_test.cc ) target_include_directories(histogram_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(histogram_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(host_port_test test/core/gprpp/host_port_test.cc ) target_include_directories(host_port_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(host_port_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(hpack_encoder_test test/core/transport/chttp2/hpack_encoder_test.cc ) target_include_directories(hpack_encoder_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(hpack_encoder_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(hpack_parser_test test/core/transport/chttp2/hpack_parser_test.cc ) target_include_directories(hpack_parser_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(hpack_parser_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(hpack_table_test test/core/transport/chttp2/hpack_table_test.cc ) target_include_directories(hpack_table_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(hpack_table_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(httpcli_test test/core/end2end/data/client_certs.cc test/core/end2end/data/server1_cert.cc test/core/end2end/data/server1_key.cc test/core/end2end/data/test_root_cert.cc test/core/http/httpcli_test.cc ) target_include_directories(httpcli_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(httpcli_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(httpscli_test test/core/end2end/data/client_certs.cc test/core/end2end/data/server1_cert.cc test/core/end2end/data/server1_key.cc test/core/end2end/data/test_root_cert.cc test/core/http/httpscli_test.cc ) target_include_directories(httpscli_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(httpscli_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(init_test test/core/surface/init_test.cc ) target_include_directories(init_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(init_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(inproc_callback_test test/core/end2end/inproc_callback_test.cc ) target_include_directories(inproc_callback_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(inproc_callback_test ${_gRPC_ALLTARGETS_LIBRARIES} end2end_tests grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(invalid_call_argument_test test/core/end2end/cq_verifier.cc test/core/end2end/invalid_call_argument_test.cc ) target_include_directories(invalid_call_argument_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(invalid_call_argument_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(json_token_test test/core/security/json_token_test.cc ) target_include_directories(json_token_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(json_token_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(jwt_verifier_test test/core/security/jwt_verifier_test.cc ) target_include_directories(jwt_verifier_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(jwt_verifier_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(lame_client_test test/core/end2end/cq_verifier.cc test/core/surface/lame_client_test.cc ) target_include_directories(lame_client_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(lame_client_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(load_file_test test/core/iomgr/load_file_test.cc ) target_include_directories(load_file_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(load_file_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(log_test test/core/gpr/log_test.cc ) target_include_directories(log_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(log_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(manual_constructor_test test/core/gprpp/manual_constructor_test.cc ) target_include_directories(manual_constructor_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(manual_constructor_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(message_compress_test test/core/compression/message_compress_test.cc ) target_include_directories(message_compress_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(message_compress_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(metadata_test test/core/transport/metadata_test.cc ) target_include_directories(metadata_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(metadata_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(minimal_stack_is_minimal_test test/core/channel/minimal_stack_is_minimal_test.cc ) target_include_directories(minimal_stack_is_minimal_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(minimal_stack_is_minimal_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(mpmcqueue_test test/core/iomgr/mpmcqueue_test.cc ) target_include_directories(mpmcqueue_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(mpmcqueue_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(mpscq_test test/core/gprpp/mpscq_test.cc ) target_include_directories(mpscq_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(mpscq_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(multiple_server_queues_test test/core/end2end/cq_verifier.cc test/core/end2end/multiple_server_queues_test.cc ) target_include_directories(multiple_server_queues_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(multiple_server_queues_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(murmur_hash_test test/core/gpr/murmur_hash_test.cc ) target_include_directories(murmur_hash_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(murmur_hash_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(no_server_test test/core/end2end/cq_verifier.cc test/core/end2end/no_server_test.cc ) target_include_directories(no_server_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(no_server_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(num_external_connectivity_watchers_test test/core/surface/num_external_connectivity_watchers_test.cc ) target_include_directories(num_external_connectivity_watchers_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(num_external_connectivity_watchers_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(parse_address_test test/core/client_channel/parse_address_test.cc ) target_include_directories(parse_address_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(parse_address_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(parse_address_with_named_scope_id_test test/core/client_channel/parse_address_with_named_scope_id_test.cc ) target_include_directories(parse_address_with_named_scope_id_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(parse_address_with_named_scope_id_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(parser_test test/core/end2end/data/client_certs.cc test/core/end2end/data/server1_cert.cc test/core/end2end/data/server1_key.cc test/core/end2end/data/test_root_cert.cc test/core/http/parser_test.cc ) target_include_directories(parser_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(parser_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(percent_encoding_test test/core/slice/percent_encoding_test.cc ) target_include_directories(percent_encoding_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(percent_encoding_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(public_headers_must_be_c89 test/core/surface/public_headers_must_be_c89.c ) target_include_directories(public_headers_must_be_c89 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(public_headers_must_be_c89 ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(resolve_address_using_ares_resolver_posix_test test/core/iomgr/resolve_address_posix_test.cc ) target_include_directories(resolve_address_using_ares_resolver_posix_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(resolve_address_using_ares_resolver_posix_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(resolve_address_using_ares_resolver_test test/core/iomgr/resolve_address_test.cc ) target_include_directories(resolve_address_using_ares_resolver_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(resolve_address_using_ares_resolver_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(resolve_address_using_native_resolver_posix_test test/core/iomgr/resolve_address_posix_test.cc ) target_include_directories(resolve_address_using_native_resolver_posix_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(resolve_address_using_native_resolver_posix_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(resolve_address_using_native_resolver_test test/core/iomgr/resolve_address_test.cc ) target_include_directories(resolve_address_using_native_resolver_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(resolve_address_using_native_resolver_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(resource_quota_test test/core/iomgr/resource_quota_test.cc ) target_include_directories(resource_quota_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(resource_quota_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(secure_channel_create_test test/core/surface/secure_channel_create_test.cc ) target_include_directories(secure_channel_create_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(secure_channel_create_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(secure_endpoint_test test/core/iomgr/endpoint_tests.cc test/core/security/secure_endpoint_test.cc ) target_include_directories(secure_endpoint_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(secure_endpoint_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(security_connector_test test/core/security/security_connector_test.cc ) target_include_directories(security_connector_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(security_connector_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(sequential_connectivity_test test/core/surface/sequential_connectivity_test.cc ) target_include_directories(sequential_connectivity_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(sequential_connectivity_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(server_chttp2_test test/core/surface/server_chttp2_test.cc ) target_include_directories(server_chttp2_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(server_chttp2_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(server_ssl_test test/core/handshake/server_ssl.cc test/core/handshake/server_ssl_common.cc ) target_include_directories(server_ssl_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(server_ssl_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(server_test test/core/surface/server_test.cc ) target_include_directories(server_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(server_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(slice_buffer_test test/core/slice/slice_buffer_test.cc ) target_include_directories(slice_buffer_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(slice_buffer_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(slice_string_helpers_test test/core/slice/slice_string_helpers_test.cc ) target_include_directories(slice_string_helpers_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(slice_string_helpers_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(sockaddr_resolver_test test/core/client_channel/resolvers/sockaddr_resolver_test.cc ) target_include_directories(sockaddr_resolver_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(sockaddr_resolver_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(sockaddr_utils_test test/core/iomgr/sockaddr_utils_test.cc ) target_include_directories(sockaddr_utils_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(sockaddr_utils_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(socket_utils_test test/core/iomgr/socket_utils_test.cc ) target_include_directories(socket_utils_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(socket_utils_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(spinlock_test test/core/gpr/spinlock_test.cc ) target_include_directories(spinlock_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(spinlock_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(ssl_credentials_test test/core/security/ssl_credentials_test.cc ) target_include_directories(ssl_credentials_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(ssl_credentials_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(ssl_transport_security_test test/core/tsi/ssl_transport_security_test.cc test/core/tsi/transport_security_test_lib.cc ) target_include_directories(ssl_transport_security_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(ssl_transport_security_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(status_conversion_test test/core/transport/status_conversion_test.cc ) target_include_directories(status_conversion_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(status_conversion_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(stream_compression_test test/core/compression/stream_compression_test.cc ) target_include_directories(stream_compression_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(stream_compression_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(stream_map_test test/core/transport/chttp2/stream_map_test.cc ) target_include_directories(stream_map_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(stream_map_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(stream_owned_slice_test test/core/transport/stream_owned_slice_test.cc ) target_include_directories(stream_owned_slice_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(stream_owned_slice_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(string_test test/core/gpr/string_test.cc ) target_include_directories(string_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(string_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(sync_test test/core/gpr/sync_test.cc ) target_include_directories(sync_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(sync_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(tcp_client_posix_test test/core/iomgr/tcp_client_posix_test.cc ) target_include_directories(tcp_client_posix_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(tcp_client_posix_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_executable(tcp_posix_test test/core/iomgr/endpoint_tests.cc test/core/iomgr/tcp_posix_test.cc ) target_include_directories(tcp_posix_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(tcp_posix_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(tcp_server_posix_test test/core/iomgr/tcp_server_posix_test.cc ) target_include_directories(tcp_server_posix_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(tcp_server_posix_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(test_core_gpr_time_test test/core/gpr/time_test.cc ) target_include_directories(test_core_gpr_time_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(test_core_gpr_time_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(test_core_security_credentials_test test/core/security/credentials_test.cc ) target_include_directories(test_core_security_credentials_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(test_core_security_credentials_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(test_core_slice_slice_test test/core/slice/slice_test.cc ) target_include_directories(test_core_slice_slice_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(test_core_slice_slice_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(thd_test test/core/gprpp/thd_test.cc ) target_include_directories(thd_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(thd_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(threadpool_test test/core/iomgr/threadpool_test.cc ) target_include_directories(threadpool_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(threadpool_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(time_averaged_stats_test test/core/iomgr/time_averaged_stats_test.cc ) target_include_directories(time_averaged_stats_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(time_averaged_stats_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(timeout_encoding_test test/core/transport/timeout_encoding_test.cc ) target_include_directories(timeout_encoding_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(timeout_encoding_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(timer_heap_test test/core/iomgr/timer_heap_test.cc ) target_include_directories(timer_heap_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(timer_heap_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(timer_list_test test/core/iomgr/timer_list_test.cc ) target_include_directories(timer_list_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(timer_list_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(tls_test test/core/gpr/tls_test.cc ) target_include_directories(tls_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(tls_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(transport_security_common_api_test test/core/tsi/alts/handshaker/transport_security_common_api_test.cc ) target_include_directories(transport_security_common_api_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(transport_security_common_api_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(transport_security_test test/core/tsi/transport_security_test.cc ) target_include_directories(transport_security_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(transport_security_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(udp_server_test test/core/iomgr/udp_server_test.cc ) target_include_directories(udp_server_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(udp_server_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(uri_parser_test test/core/client_channel/uri_parser_test.cc ) target_include_directories(uri_parser_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(uri_parser_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(useful_test test/core/gpr/useful_test.cc ) target_include_directories(useful_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(useful_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) add_executable(varint_test test/core/transport/chttp2/varint_test.cc ) target_include_directories(varint_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ) target_link_libraries(varint_test ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(address_sorting_test test/cpp/naming/address_sorting_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(address_sorting_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(address_sorting_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(address_sorting_test_unsecure test/cpp/naming/address_sorting_test.cc test/cpp/util/byte_buffer_proto_helper.cc test/cpp/util/string_ref_helper.cc test/cpp/util/subprocess.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(address_sorting_test_unsecure PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(address_sorting_test_unsecure ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util_unsecure grpc++_unsecure grpc_unsecure grpc++_test_config gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(alarm_test test/cpp/common/alarm_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(alarm_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(alarm_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util_unsecure grpc++_unsecure grpc_unsecure gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(alts_concurrent_connectivity_test ${_gRPC_PROTO_GENS_DIR}/test/core/tsi/alts/fake_handshaker/handshaker.pb.cc ${_gRPC_PROTO_GENS_DIR}/test/core/tsi/alts/fake_handshaker/handshaker.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/test/core/tsi/alts/fake_handshaker/handshaker.pb.h ${_gRPC_PROTO_GENS_DIR}/test/core/tsi/alts/fake_handshaker/handshaker.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/test/core/tsi/alts/fake_handshaker/transport_security_common.pb.cc ${_gRPC_PROTO_GENS_DIR}/test/core/tsi/alts/fake_handshaker/transport_security_common.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/test/core/tsi/alts/fake_handshaker/transport_security_common.pb.h ${_gRPC_PROTO_GENS_DIR}/test/core/tsi/alts/fake_handshaker/transport_security_common.grpc.pb.h test/core/end2end/cq_verifier.cc test/core/tsi/alts/fake_handshaker/fake_handshaker_server.cc test/core/tsi/alts/handshaker/alts_concurrent_connectivity_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(alts_concurrent_connectivity_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(alts_concurrent_connectivity_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(alts_util_test test/cpp/common/alts_util_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(alts_util_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(alts_util_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc++_alts grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(async_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/health/v1/health.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/health/v1/health.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/health/v1/health.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/health/v1/health.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/async_end2end_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(async_end2end_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(async_end2end_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(auth_property_iterator_test test/cpp/common/auth_property_iterator_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(auth_property_iterator_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(auth_property_iterator_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(backoff_test test/core/backoff/backoff_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(backoff_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(backoff_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(bad_streaming_id_bad_client_test test/core/bad_client/bad_client.cc test/core/bad_client/tests/bad_streaming_id.cc test/core/end2end/cq_verifier.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(bad_streaming_id_bad_client_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(bad_streaming_id_bad_client_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(badreq_bad_client_test test/core/bad_client/bad_client.cc test/core/bad_client/tests/badreq.cc test/core/end2end/cq_verifier.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(badreq_bad_client_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(badreq_bad_client_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(bdp_estimator_test test/core/transport/bdp_estimator_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(bdp_estimator_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(bdp_estimator_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_executable(bm_alarm test/cpp/microbenchmarks/bm_alarm.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(bm_alarm PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(bm_alarm ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} benchmark_helpers grpc_test_util_unsecure grpc++_unsecure grpc_unsecure grpc++_test_config gpr address_sorting upb ${_gRPC_BENCHMARK_LIBRARIES} ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_executable(bm_arena test/cpp/microbenchmarks/bm_arena.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(bm_arena PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(bm_arena ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} benchmark_helpers grpc_test_util_unsecure grpc++_unsecure grpc_unsecure grpc++_test_config gpr address_sorting upb ${_gRPC_BENCHMARK_LIBRARIES} ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_executable(bm_byte_buffer test/cpp/microbenchmarks/bm_byte_buffer.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(bm_byte_buffer PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(bm_byte_buffer ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} benchmark_helpers grpc_test_util_unsecure grpc++_unsecure grpc_unsecure grpc++_test_config gpr address_sorting upb ${_gRPC_BENCHMARK_LIBRARIES} ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_executable(bm_call_create test/cpp/microbenchmarks/bm_call_create.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(bm_call_create PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(bm_call_create ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} benchmark_helpers grpc_test_util_unsecure grpc++_unsecure grpc_unsecure grpc++_test_config gpr address_sorting upb ${_gRPC_BENCHMARK_LIBRARIES} ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_executable(bm_callback_streaming_ping_pong test/cpp/microbenchmarks/bm_callback_streaming_ping_pong.cc test/cpp/microbenchmarks/callback_test_service.cc test/cpp/util/byte_buffer_proto_helper.cc test/cpp/util/string_ref_helper.cc test/cpp/util/subprocess.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(bm_callback_streaming_ping_pong PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(bm_callback_streaming_ping_pong ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} benchmark_helpers grpc_test_util_unsecure grpc++_unsecure grpc_unsecure grpc++_test_config gpr address_sorting upb ${_gRPC_BENCHMARK_LIBRARIES} ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_executable(bm_callback_unary_ping_pong test/cpp/microbenchmarks/bm_callback_unary_ping_pong.cc test/cpp/microbenchmarks/callback_test_service.cc test/cpp/util/byte_buffer_proto_helper.cc test/cpp/util/string_ref_helper.cc test/cpp/util/subprocess.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(bm_callback_unary_ping_pong PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(bm_callback_unary_ping_pong ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} benchmark_helpers grpc_test_util_unsecure grpc++_unsecure grpc_unsecure grpc++_test_config gpr address_sorting upb ${_gRPC_BENCHMARK_LIBRARIES} ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_executable(bm_channel test/cpp/microbenchmarks/bm_channel.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(bm_channel PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(bm_channel ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} benchmark_helpers grpc_test_util_unsecure grpc++_unsecure grpc_unsecure grpc++_test_config gpr address_sorting upb ${_gRPC_BENCHMARK_LIBRARIES} ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_executable(bm_chttp2_hpack test/cpp/microbenchmarks/bm_chttp2_hpack.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(bm_chttp2_hpack PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(bm_chttp2_hpack ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} benchmark_helpers grpc_test_util_unsecure grpc++_unsecure grpc_unsecure grpc++_test_config gpr address_sorting upb ${_gRPC_BENCHMARK_LIBRARIES} ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_executable(bm_chttp2_transport test/cpp/microbenchmarks/bm_chttp2_transport.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(bm_chttp2_transport PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(bm_chttp2_transport ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} benchmark_helpers grpc_test_util_unsecure grpc++_unsecure grpc_unsecure grpc++_test_config gpr address_sorting upb ${_gRPC_BENCHMARK_LIBRARIES} ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_executable(bm_closure test/cpp/microbenchmarks/bm_closure.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(bm_closure PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(bm_closure ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} benchmark_helpers grpc_test_util_unsecure grpc++_unsecure grpc_unsecure grpc++_test_config gpr address_sorting upb ${_gRPC_BENCHMARK_LIBRARIES} ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_executable(bm_cq test/cpp/microbenchmarks/bm_cq.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(bm_cq PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(bm_cq ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} benchmark_helpers grpc_test_util_unsecure grpc++_unsecure grpc_unsecure grpc++_test_config gpr address_sorting upb ${_gRPC_BENCHMARK_LIBRARIES} ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_executable(bm_cq_multiple_threads test/cpp/microbenchmarks/bm_cq_multiple_threads.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(bm_cq_multiple_threads PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(bm_cq_multiple_threads ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} benchmark_helpers grpc_test_util_unsecure grpc++_unsecure grpc_unsecure grpc++_test_config gpr address_sorting upb ${_gRPC_BENCHMARK_LIBRARIES} ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_executable(bm_error test/cpp/microbenchmarks/bm_error.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(bm_error PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(bm_error ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} benchmark_helpers grpc_test_util_unsecure grpc++_unsecure grpc_unsecure grpc++_test_config gpr address_sorting upb ${_gRPC_BENCHMARK_LIBRARIES} ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_executable(bm_fullstack_streaming_ping_pong test/cpp/microbenchmarks/bm_fullstack_streaming_ping_pong.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(bm_fullstack_streaming_ping_pong PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(bm_fullstack_streaming_ping_pong ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} benchmark_helpers grpc_test_util_unsecure grpc++_unsecure grpc_unsecure grpc++_test_config gpr address_sorting upb ${_gRPC_BENCHMARK_LIBRARIES} ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_executable(bm_fullstack_streaming_pump test/cpp/microbenchmarks/bm_fullstack_streaming_pump.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(bm_fullstack_streaming_pump PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(bm_fullstack_streaming_pump ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} benchmark_helpers grpc_test_util_unsecure grpc++_unsecure grpc_unsecure grpc++_test_config gpr address_sorting upb ${_gRPC_BENCHMARK_LIBRARIES} ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(bm_fullstack_trickle test/cpp/microbenchmarks/bm_fullstack_trickle.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(bm_fullstack_trickle PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(bm_fullstack_trickle ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} benchmark_helpers grpc_test_util_unsecure grpc++_unsecure grpc_unsecure grpc++_test_config gpr address_sorting upb ${_gRPC_BENCHMARK_LIBRARIES} ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_executable(bm_fullstack_unary_ping_pong test/cpp/microbenchmarks/bm_fullstack_unary_ping_pong.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(bm_fullstack_unary_ping_pong PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(bm_fullstack_unary_ping_pong ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} benchmark_helpers grpc_test_util_unsecure grpc++_unsecure grpc_unsecure grpc++_test_config gpr address_sorting upb ${_gRPC_BENCHMARK_LIBRARIES} ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_executable(bm_metadata test/cpp/microbenchmarks/bm_metadata.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(bm_metadata PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(bm_metadata ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} benchmark_helpers grpc_test_util_unsecure grpc++_unsecure grpc_unsecure grpc++_test_config gpr address_sorting upb ${_gRPC_BENCHMARK_LIBRARIES} ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_executable(bm_pollset test/cpp/microbenchmarks/bm_pollset.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(bm_pollset PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(bm_pollset ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} benchmark_helpers grpc_test_util_unsecure grpc++_unsecure grpc_unsecure grpc++_test_config gpr address_sorting upb ${_gRPC_BENCHMARK_LIBRARIES} ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(bm_threadpool test/cpp/microbenchmarks/bm_threadpool.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(bm_threadpool PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(bm_threadpool ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} benchmark_helpers grpc_test_util_unsecure grpc++_unsecure grpc_unsecure grpc++_test_config gpr address_sorting upb ${_gRPC_BENCHMARK_LIBRARIES} ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_executable(bm_timer test/cpp/microbenchmarks/bm_timer.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(bm_timer PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(bm_timer ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} benchmark_helpers grpc_test_util_unsecure grpc++_unsecure grpc_unsecure grpc++_test_config gpr address_sorting upb ${_gRPC_BENCHMARK_LIBRARIES} ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(byte_buffer_test test/cpp/util/byte_buffer_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(byte_buffer_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(byte_buffer_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(byte_stream_test test/core/transport/byte_stream_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(byte_stream_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(byte_stream_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(cancel_ares_query_test test/core/end2end/cq_verifier.cc test/cpp/naming/cancel_ares_query_test.cc test/cpp/naming/dns_test_util.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(cancel_ares_query_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(cancel_ares_query_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(cfstream_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/cfstream_test.cc test/cpp/end2end/test_service_impl.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(cfstream_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(cfstream_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(channel_arguments_test test/cpp/common/channel_arguments_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(channel_arguments_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(channel_arguments_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(channel_filter_test test/cpp/common/channel_filter_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(channel_filter_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(channel_filter_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(channel_trace_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/channelz/channelz.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/channelz/channelz.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/channelz/channelz.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/channelz/channelz.grpc.pb.h test/core/channel/channel_trace_test.cc test/cpp/util/channel_trace_proto_helper.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(channel_trace_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(channel_trace_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(channelz_registry_test test/core/channel/channelz_registry_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(channelz_registry_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(channelz_registry_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(channelz_service_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/channelz_service_test.cc test/cpp/end2end/test_service_impl.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(channelz_service_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(channelz_service_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpcpp_channelz grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(channelz_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/channelz/channelz.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/channelz/channelz.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/channelz/channelz.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/channelz/channelz.grpc.pb.h test/core/channel/channelz_test.cc test/cpp/util/channel_trace_proto_helper.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(channelz_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(channelz_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(cli_call_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/util/cli_call.cc test/cpp/util/cli_call_test.cc test/cpp/util/cli_credentials.cc test/cpp/util/grpc_tool.cc test/cpp/util/proto_file_parser.cc test/cpp/util/proto_reflection_descriptor_database.cc test/cpp/util/service_describer.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(cli_call_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(cli_call_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(client_callback_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/client_callback_end2end_test.cc test/cpp/end2end/interceptors_util.cc test/cpp/end2end/test_service_impl.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(client_callback_end2end_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(client_callback_end2end_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(client_channel_stress_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/lb/v1/load_balancer.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/lb/v1/load_balancer.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/lb/v1/load_balancer.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/client/client_channel_stress_test.cc test/cpp/end2end/test_service_impl.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(client_channel_stress_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(client_channel_stress_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(client_interceptors_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/client_interceptors_end2end_test.cc test/cpp/end2end/interceptors_util.cc test/cpp/end2end/test_service_impl.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(client_interceptors_end2end_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(client_interceptors_end2end_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(client_lb_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/orca_load_report_for_test.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/orca_load_report_for_test.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/orca_load_report_for_test.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/orca_load_report_for_test.grpc.pb.h test/core/util/test_lb_policies.cc test/cpp/end2end/client_lb_end2end_test.cc test/cpp/end2end/test_service_impl.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(client_lb_end2end_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(client_lb_end2end_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(codegen_test_full test/cpp/codegen/codegen_test_full.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(codegen_test_full PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(codegen_test_full ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(codegen_test_minimal test/cpp/codegen/codegen_test_minimal.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(codegen_test_minimal PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(codegen_test_minimal ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(connection_prefix_bad_client_test test/core/bad_client/bad_client.cc test/core/bad_client/tests/connection_prefix.cc test/core/end2end/cq_verifier.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(connection_prefix_bad_client_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(connection_prefix_bad_client_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(connectivity_state_test test/core/transport/connectivity_state_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(connectivity_state_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(connectivity_state_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(context_list_test test/core/transport/chttp2/context_list_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(context_list_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(context_list_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(delegating_channel_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/delegating_channel_test.cc test/cpp/end2end/test_service_impl.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(delegating_channel_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(delegating_channel_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(destroy_grpclb_channel_with_active_connect_stress_test test/cpp/client/destroy_grpclb_channel_with_active_connect_stress_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(destroy_grpclb_channel_with_active_connect_stress_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(destroy_grpclb_channel_with_active_connect_stress_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(duplicate_header_bad_client_test test/core/bad_client/bad_client.cc test/core/bad_client/tests/duplicate_header.cc test/core/end2end/cq_verifier.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(duplicate_header_bad_client_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(duplicate_header_bad_client_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/end2end_test.cc test/cpp/end2end/interceptors_util.cc test/cpp/end2end/test_service_impl.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(end2end_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(end2end_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc++_test grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(error_details_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h test/cpp/util/error_details_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(error_details_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(error_details_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_error_details grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(eventmanager_libuv_test test/core/iomgr/poller/eventmanager_libuv_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(eventmanager_libuv_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(eventmanager_libuv_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(exception_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/exception_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(exception_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(exception_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(filter_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/filter_end2end_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(filter_end2end_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(filter_end2end_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(flaky_network_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/flaky_network_test.cc test/cpp/end2end/test_service_impl.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(flaky_network_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(flaky_network_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(generic_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/generic_end2end_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(generic_end2end_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(generic_end2end_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(global_config_env_test test/core/gprpp/global_config_env_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(global_config_env_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(global_config_env_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(global_config_test test/core/gprpp/global_config_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(global_config_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(global_config_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(grpc_cli ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.h test/cpp/util/cli_call.cc test/cpp/util/cli_credentials.cc test/cpp/util/grpc_cli.cc test/cpp/util/grpc_tool.cc test/cpp/util/proto_file_parser.cc test/cpp/util/proto_reflection_descriptor_database.cc test/cpp/util/service_describer.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(grpc_cli PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(grpc_cli ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++ grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_CODEGEN AND gRPC_BUILD_GRPC_CPP_PLUGIN) add_executable(grpc_cpp_plugin src/compiler/cpp_plugin.cc ) target_include_directories(grpc_cpp_plugin PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(grpc_cpp_plugin ${_gRPC_PROTOBUF_PROTOC_LIBRARIES} ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_plugin_support ) if(gRPC_INSTALL) install(TARGETS grpc_cpp_plugin EXPORT gRPCTargets RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} ) endif() endif() if(gRPC_BUILD_CODEGEN AND gRPC_BUILD_GRPC_CSHARP_PLUGIN) add_executable(grpc_csharp_plugin src/compiler/csharp_plugin.cc ) target_include_directories(grpc_csharp_plugin PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(grpc_csharp_plugin ${_gRPC_PROTOBUF_PROTOC_LIBRARIES} ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_plugin_support ) if(gRPC_INSTALL) install(TARGETS grpc_csharp_plugin EXPORT gRPCTargets RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} ) endif() endif() if(gRPC_BUILD_CODEGEN AND gRPC_BUILD_GRPC_NODE_PLUGIN) add_executable(grpc_node_plugin src/compiler/node_plugin.cc ) target_include_directories(grpc_node_plugin PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(grpc_node_plugin ${_gRPC_PROTOBUF_PROTOC_LIBRARIES} ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_plugin_support ) if(gRPC_INSTALL) install(TARGETS grpc_node_plugin EXPORT gRPCTargets RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} ) endif() endif() if(gRPC_BUILD_CODEGEN AND gRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN) add_executable(grpc_objective_c_plugin src/compiler/objective_c_plugin.cc ) target_include_directories(grpc_objective_c_plugin PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(grpc_objective_c_plugin ${_gRPC_PROTOBUF_PROTOC_LIBRARIES} ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_plugin_support ) if(gRPC_INSTALL) install(TARGETS grpc_objective_c_plugin EXPORT gRPCTargets RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} ) endif() endif() if(gRPC_BUILD_CODEGEN AND gRPC_BUILD_GRPC_PHP_PLUGIN) add_executable(grpc_php_plugin src/compiler/php_plugin.cc ) target_include_directories(grpc_php_plugin PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(grpc_php_plugin ${_gRPC_PROTOBUF_PROTOC_LIBRARIES} ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_plugin_support ) if(gRPC_INSTALL) install(TARGETS grpc_php_plugin EXPORT gRPCTargets RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} ) endif() endif() if(gRPC_BUILD_CODEGEN AND gRPC_BUILD_GRPC_PYTHON_PLUGIN) add_executable(grpc_python_plugin src/compiler/python_plugin.cc ) target_include_directories(grpc_python_plugin PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(grpc_python_plugin ${_gRPC_PROTOBUF_PROTOC_LIBRARIES} ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_plugin_support ) if(gRPC_INSTALL) install(TARGETS grpc_python_plugin EXPORT gRPCTargets RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} ) endif() endif() if(gRPC_BUILD_CODEGEN AND gRPC_BUILD_GRPC_RUBY_PLUGIN) add_executable(grpc_ruby_plugin src/compiler/ruby_plugin.cc ) target_include_directories(grpc_ruby_plugin PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(grpc_ruby_plugin ${_gRPC_PROTOBUF_PROTOC_LIBRARIES} ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_plugin_support ) if(gRPC_INSTALL) install(TARGETS grpc_ruby_plugin EXPORT gRPCTargets RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(grpc_tls_credentials_options_test test/core/security/grpc_tls_credentials_options_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(grpc_tls_credentials_options_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(grpc_tls_credentials_options_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(grpc_tool_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/util/cli_call.cc test/cpp/util/cli_credentials.cc test/cpp/util/grpc_tool.cc test/cpp/util/grpc_tool_test.cc test/cpp/util/proto_file_parser.cc test/cpp/util/proto_reflection_descriptor_database.cc test/cpp/util/service_describer.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(grpc_tool_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(grpc_tool_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc++_reflection grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(grpclb_api_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/lb/v1/load_balancer.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/lb/v1/load_balancer.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/lb/v1/load_balancer.grpc.pb.h test/cpp/grpclb/grpclb_api_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(grpclb_api_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(grpclb_api_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(grpclb_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/lb/v1/load_balancer.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/lb/v1/load_balancer.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/lb/v1/load_balancer.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/grpclb_end2end_test.cc test/cpp/end2end/test_service_impl.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(grpclb_end2end_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(grpclb_end2end_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(h2_ssl_session_reuse_test test/core/end2end/h2_ssl_session_reuse_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(h2_ssl_session_reuse_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(h2_ssl_session_reuse_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} end2end_tests grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(head_of_line_blocking_bad_client_test test/core/bad_client/bad_client.cc test/core/bad_client/tests/head_of_line_blocking.cc test/core/end2end/cq_verifier.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(head_of_line_blocking_bad_client_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(head_of_line_blocking_bad_client_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(headers_bad_client_test test/core/bad_client/bad_client.cc test/core/bad_client/tests/headers.cc test/core/end2end/cq_verifier.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(headers_bad_client_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(headers_bad_client_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(health_service_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/health/v1/health.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/health/v1/health.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/health/v1/health.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/health/v1/health.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/health_service_end2end_test.cc test/cpp/end2end/test_health_check_service_impl.cc test/cpp/end2end/test_service_impl.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(health_service_end2end_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(health_service_end2end_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(http2_client ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/empty.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/empty.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/empty.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/empty.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.grpc.pb.h test/cpp/interop/http2_client.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(http2_client PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(http2_client ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(hybrid_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/hybrid_end2end_test.cc test/cpp/end2end/test_service_impl.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(hybrid_end2end_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(hybrid_end2end_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(initial_settings_frame_bad_client_test test/core/bad_client/bad_client.cc test/core/bad_client/tests/initial_settings_frame.cc test/core/end2end/cq_verifier.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(initial_settings_frame_bad_client_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(initial_settings_frame_bad_client_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(interop_client ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/empty.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/empty.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/empty.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/empty.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.grpc.pb.h test/core/security/oauth2_utils.cc test/cpp/interop/client.cc test/cpp/interop/client_helper.cc test/cpp/interop/interop_client.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(interop_client PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(interop_client ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(interop_server ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/empty.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/empty.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/empty.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/empty.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.grpc.pb.h test/cpp/interop/interop_server.cc test/cpp/interop/interop_server_bootstrap.cc test/cpp/interop/server_helper.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(interop_server PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(interop_server ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(interop_test test/cpp/interop/interop_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(interop_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(interop_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(json_test test/core/json/json_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(json_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(json_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(large_metadata_bad_client_test test/core/bad_client/bad_client.cc test/core/bad_client/tests/large_metadata.cc test/core/end2end/cq_verifier.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(large_metadata_bad_client_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(large_metadata_bad_client_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(lb_get_cpu_stats_test src/cpp/server/load_reporter/get_cpu_stats_linux.cc src/cpp/server/load_reporter/get_cpu_stats_macos.cc src/cpp/server/load_reporter/get_cpu_stats_unsupported.cc src/cpp/server/load_reporter/get_cpu_stats_windows.cc test/cpp/server/load_reporter/get_cpu_stats_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(lb_get_cpu_stats_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(lb_get_cpu_stats_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(lb_load_data_store_test src/cpp/server/load_reporter/load_data_store.cc test/cpp/server/load_reporter/load_data_store_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(lb_load_data_store_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(lb_load_data_store_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(linux_system_roots_test test/core/security/linux_system_roots_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(linux_system_roots_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(linux_system_roots_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(message_allocator_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/message_allocator_end2end_test.cc test/cpp/end2end/test_service_impl.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(message_allocator_end2end_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(message_allocator_end2end_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(mock_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/mock_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(mock_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(mock_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc++_test grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(nonblocking_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/nonblocking_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(nonblocking_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(nonblocking_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(noop-benchmark test/cpp/microbenchmarks/noop-benchmark.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(noop-benchmark PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(noop-benchmark ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_BENCHMARK_LIBRARIES} ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(orphanable_test test/core/gprpp/orphanable_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(orphanable_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(orphanable_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(out_of_bounds_bad_client_test test/core/bad_client/bad_client.cc test/core/bad_client/tests/out_of_bounds.cc test/core/end2end/cq_verifier.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(out_of_bounds_bad_client_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(out_of_bounds_bad_client_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(pid_controller_test test/core/transport/pid_controller_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(pid_controller_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(pid_controller_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(port_sharing_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/port_sharing_end2end_test.cc test/cpp/end2end/test_service_impl.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(port_sharing_end2end_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(port_sharing_end2end_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(proto_server_reflection_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/proto_server_reflection_test.cc test/cpp/end2end/test_service_impl.cc test/cpp/util/proto_reflection_descriptor_database.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(proto_server_reflection_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(proto_server_reflection_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc++_reflection grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(proto_utils_test test/cpp/codegen/proto_utils_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(proto_utils_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(proto_utils_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(qps_json_driver ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/core/stats.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/core/stats.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/core/stats.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/core/stats.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/benchmark_service.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/benchmark_service.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/benchmark_service.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/benchmark_service.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/control.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/control.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/control.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/control.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/payloads.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/payloads.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/payloads.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/payloads.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/report_qps_scenario_service.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/report_qps_scenario_service.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/report_qps_scenario_service.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/report_qps_scenario_service.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/stats.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/stats.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/stats.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/stats.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/worker_service.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/worker_service.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/worker_service.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/worker_service.grpc.pb.h src/cpp/util/core_stats.cc test/cpp/qps/benchmark_config.cc test/cpp/qps/client_async.cc test/cpp/qps/client_callback.cc test/cpp/qps/client_sync.cc test/cpp/qps/driver.cc test/cpp/qps/parse_json.cc test/cpp/qps/qps_json_driver.cc test/cpp/qps/qps_server_builder.cc test/cpp/qps/qps_worker.cc test/cpp/qps/report.cc test/cpp/qps/server_async.cc test/cpp/qps/server_callback.cc test/cpp/qps/server_sync.cc test/cpp/qps/usage_timer.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(qps_json_driver PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(qps_json_driver ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(qps_worker ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/core/stats.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/core/stats.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/core/stats.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/core/stats.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/benchmark_service.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/benchmark_service.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/benchmark_service.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/benchmark_service.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/control.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/control.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/control.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/control.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/payloads.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/payloads.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/payloads.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/payloads.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/stats.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/stats.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/stats.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/stats.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/worker_service.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/worker_service.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/worker_service.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/worker_service.grpc.pb.h src/cpp/util/core_stats.cc test/cpp/qps/client_async.cc test/cpp/qps/client_callback.cc test/cpp/qps/client_sync.cc test/cpp/qps/qps_server_builder.cc test/cpp/qps/qps_worker.cc test/cpp/qps/server_async.cc test/cpp/qps/server_callback.cc test/cpp/qps/server_sync.cc test/cpp/qps/usage_timer.cc test/cpp/qps/worker.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(qps_worker PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(qps_worker ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(raw_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/raw_end2end_test.cc test/cpp/end2end/test_service_impl.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(raw_end2end_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(raw_end2end_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(ref_counted_ptr_test test/core/gprpp/ref_counted_ptr_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(ref_counted_ptr_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(ref_counted_ptr_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(ref_counted_test test/core/gprpp/ref_counted_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(ref_counted_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(ref_counted_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(retry_throttle_test test/core/client_channel/retry_throttle_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(retry_throttle_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(retry_throttle_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(secure_auth_context_test test/cpp/common/secure_auth_context_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(secure_auth_context_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(secure_auth_context_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(server_builder_plugin_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/server_builder_plugin_test.cc test/cpp/end2end/test_service_impl.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(server_builder_plugin_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(server_builder_plugin_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(server_builder_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/server/server_builder_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(server_builder_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(server_builder_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util_unsecure grpc++_unsecure grpc_unsecure gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(server_builder_with_socket_mutator_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/server/server_builder_with_socket_mutator_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(server_builder_with_socket_mutator_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(server_builder_with_socket_mutator_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util_unsecure grpc++_unsecure grpc_unsecure gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(server_context_test_spouse_test test/cpp/test/server_context_test_spouse_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(server_context_test_spouse_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(server_context_test_spouse_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc++_test grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(server_early_return_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/server_early_return_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(server_early_return_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(server_early_return_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(server_interceptors_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/interceptors_util.cc test/cpp/end2end/server_interceptors_end2end_test.cc test/cpp/end2end/test_service_impl.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(server_interceptors_end2end_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(server_interceptors_end2end_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(server_registered_method_bad_client_test test/core/bad_client/bad_client.cc test/core/bad_client/tests/server_registered_method.cc test/core/end2end/cq_verifier.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(server_registered_method_bad_client_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(server_registered_method_bad_client_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(server_request_call_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/server/server_request_call_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(server_request_call_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(server_request_call_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util_unsecure grpc++_unsecure grpc_unsecure gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(service_config_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/service_config_end2end_test.cc test/cpp/end2end/test_service_impl.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(service_config_end2end_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(service_config_end2end_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(service_config_test test/core/client_channel/service_config_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(service_config_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(service_config_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(settings_timeout_test test/core/transport/chttp2/settings_timeout_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(settings_timeout_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(settings_timeout_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(shutdown_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/shutdown_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(shutdown_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(shutdown_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(simple_request_bad_client_test test/core/bad_client/bad_client.cc test/core/bad_client/tests/simple_request.cc test/core/end2end/cq_verifier.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(simple_request_bad_client_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(simple_request_bad_client_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(slice_hash_table_test test/core/slice/slice_hash_table_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(slice_hash_table_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(slice_hash_table_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(slice_weak_hash_table_test test/core/slice/slice_weak_hash_table_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(slice_weak_hash_table_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(slice_weak_hash_table_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(static_metadata_test test/core/transport/static_metadata_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(static_metadata_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(static_metadata_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(stats_test test/core/debug/stats_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(stats_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(stats_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(status_metadata_test test/core/transport/status_metadata_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(status_metadata_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(status_metadata_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(status_util_test test/core/channel/status_util_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(status_util_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(status_util_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(streaming_throughput_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/streaming_throughput_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(streaming_throughput_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(streaming_throughput_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(string_ref_test test/cpp/util/string_ref_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(string_ref_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(string_ref_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(test_cpp_client_credentials_test test/cpp/client/credentials_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(test_cpp_client_credentials_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(test_cpp_client_credentials_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(test_cpp_util_slice_test test/cpp/util/slice_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(test_cpp_util_slice_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(test_cpp_util_slice_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(test_cpp_util_time_test test/cpp/util/time_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(test_cpp_util_time_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(test_cpp_util_time_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(thread_manager_test test/cpp/thread_manager/thread_manager_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(thread_manager_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(thread_manager_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(thread_stress_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/cpp/end2end/thread_stress_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(thread_stress_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(thread_stress_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(time_jump_test test/cpp/common/time_jump_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(time_jump_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(time_jump_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(timer_test test/cpp/common/timer_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(timer_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(timer_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(tls_security_connector_test test/core/security/tls_security_connector_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(tls_security_connector_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(tls_security_connector_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(unknown_frame_bad_client_test test/core/bad_client/bad_client.cc test/core/bad_client/tests/unknown_frame.cc test/core/end2end/cq_verifier.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(unknown_frame_bad_client_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(unknown_frame_bad_client_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(window_overflow_bad_client_test test/core/bad_client/bad_client.cc test/core/bad_client/tests/window_overflow.cc test/core/end2end/cq_verifier.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(window_overflow_bad_client_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(window_overflow_bad_client_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(work_serializer_test test/core/iomgr/work_serializer_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(work_serializer_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(work_serializer_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(writes_per_rpc_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h test/core/util/cmdline.cc test/core/util/debugger_macros.cc test/core/util/fuzzer_util.cc test/core/util/grpc_profiler.cc test/core/util/histogram.cc test/core/util/memory_counters.cc test/core/util/mock_endpoint.cc test/core/util/parse_hexstring.cc test/core/util/passthru_endpoint.cc test/core/util/port.cc test/core/util/port_isolated_runtime_environment.cc test/core/util/port_server_client.cc test/core/util/reconnect_server.cc test/core/util/slice_splitter.cc test/core/util/subprocess_posix.cc test/core/util/subprocess_windows.cc test/core/util/test_config.cc test/core/util/test_tcp_server.cc test/core/util/tracer_util.cc test/core/util/trickle_endpoint.cc test/cpp/performance/writes_per_rpc_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(writes_per_rpc_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(writes_per_rpc_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(xds_bootstrap_test test/core/client_channel/xds_bootstrap_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(xds_bootstrap_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(xds_bootstrap_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(xds_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/ads_for_test.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/ads_for_test.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/ads_for_test.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/ads_for_test.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/cds_for_test.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/cds_for_test.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/cds_for_test.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/cds_for_test.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/eds_for_test.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/eds_for_test.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/eds_for_test.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/eds_for_test.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/lds_rds_for_test.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/lds_rds_for_test.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/lds_rds_for_test.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/lds_rds_for_test.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/lrs_for_test.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/lrs_for_test.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/lrs_for_test.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/lrs_for_test.grpc.pb.h test/cpp/end2end/test_service_impl.cc test/cpp/end2end/xds_end2end_test.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(xds_end2end_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(xds_end2end_test ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc++_test_util grpc_test_util grpc++ grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() endif() if(gRPC_BUILD_TESTS) add_executable(xds_interop_client ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/empty.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/empty.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/empty.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/empty.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.grpc.pb.h test/cpp/interop/xds_interop_client.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(xds_interop_client PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(xds_interop_client ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++ grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(xds_interop_server ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/empty.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/empty.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/empty.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/empty.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.grpc.pb.h test/cpp/interop/xds_interop_server.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(xds_interop_server PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(xds_interop_server ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++ grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(alts_credentials_fuzzer_one_entry test/core/security/alts_credentials_fuzzer.cc test/core/util/one_corpus_entry_fuzzer.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(alts_credentials_fuzzer_one_entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(alts_credentials_fuzzer_one_entry ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(client_fuzzer_one_entry test/core/end2end/fuzzers/client_fuzzer.cc test/core/util/one_corpus_entry_fuzzer.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(client_fuzzer_one_entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(client_fuzzer_one_entry ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(hpack_parser_fuzzer_test_one_entry test/core/transport/chttp2/hpack_parser_fuzzer_test.cc test/core/util/one_corpus_entry_fuzzer.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(hpack_parser_fuzzer_test_one_entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(hpack_parser_fuzzer_test_one_entry ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(http_request_fuzzer_test_one_entry test/core/http/request_fuzzer.cc test/core/util/one_corpus_entry_fuzzer.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(http_request_fuzzer_test_one_entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(http_request_fuzzer_test_one_entry ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(http_response_fuzzer_test_one_entry test/core/http/response_fuzzer.cc test/core/util/one_corpus_entry_fuzzer.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(http_response_fuzzer_test_one_entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(http_response_fuzzer_test_one_entry ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(json_fuzzer_test_one_entry test/core/json/fuzzer.cc test/core/util/one_corpus_entry_fuzzer.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(json_fuzzer_test_one_entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(json_fuzzer_test_one_entry ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(nanopb_fuzzer_response_test_one_entry test/core/nanopb/fuzzer_response.cc test/core/util/one_corpus_entry_fuzzer.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(nanopb_fuzzer_response_test_one_entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(nanopb_fuzzer_response_test_one_entry ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(nanopb_fuzzer_serverlist_test_one_entry test/core/nanopb/fuzzer_serverlist.cc test/core/util/one_corpus_entry_fuzzer.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(nanopb_fuzzer_serverlist_test_one_entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(nanopb_fuzzer_serverlist_test_one_entry ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(percent_decode_fuzzer_one_entry test/core/slice/percent_decode_fuzzer.cc test/core/util/one_corpus_entry_fuzzer.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(percent_decode_fuzzer_one_entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(percent_decode_fuzzer_one_entry ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(percent_encode_fuzzer_one_entry test/core/slice/percent_encode_fuzzer.cc test/core/util/one_corpus_entry_fuzzer.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(percent_encode_fuzzer_one_entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(percent_encode_fuzzer_one_entry ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(server_fuzzer_one_entry test/core/end2end/fuzzers/server_fuzzer.cc test/core/util/one_corpus_entry_fuzzer.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(server_fuzzer_one_entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(server_fuzzer_one_entry ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(ssl_server_fuzzer_one_entry test/core/security/ssl_server_fuzzer.cc test/core/util/one_corpus_entry_fuzzer.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(ssl_server_fuzzer_one_entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(ssl_server_fuzzer_one_entry ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_BUILD_TESTS) add_executable(uri_fuzzer_test_one_entry test/core/client_channel/uri_fuzzer_test.cc test/core/util/one_corpus_entry_fuzzer.cc third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googlemock/src/gmock-all.cc ) target_include_directories(uri_fuzzer_test_one_entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} ${_gRPC_SSL_INCLUDE_DIR} ${_gRPC_UPB_GENERATED_DIR} ${_gRPC_UPB_GRPC_GENERATED_DIR} ${_gRPC_UPB_INCLUDE_DIR} ${_gRPC_ZLIB_INCLUDE_DIR} third_party/googletest/googletest/include third_party/googletest/googletest third_party/googletest/googlemock/include third_party/googletest/googlemock ${_gRPC_PROTO_GENS_DIR} ) target_link_libraries(uri_fuzzer_test_one_entry ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_test_util grpc++_test_config grpc gpr address_sorting upb ${_gRPC_GFLAGS_LIBRARIES} ) endif() if(gRPC_INSTALL) install(EXPORT gRPCTargets DESTINATION ${gRPC_INSTALL_CMAKEDIR} NAMESPACE gRPC:: ) endif() include(CMakePackageConfigHelpers) configure_file(cmake/gRPCConfig.cmake.in gRPCConfig.cmake @ONLY) write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/gRPCConfigVersion.cmake VERSION ${PACKAGE_VERSION} COMPATIBILITY AnyNewerVersion) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/gRPCConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/gRPCConfigVersion.cmake DESTINATION ${gRPC_INSTALL_CMAKEDIR} ) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/Findc-ares.cmake DESTINATION ${gRPC_INSTALL_CMAKEDIR}/modules ) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/etc/roots.pem DESTINATION ${gRPC_INSTALL_SHAREDIR}) # Function to generate pkg-config files. function(generate_pkgconfig name description version requires libs libs_private output_filename) set(PC_NAME "${name}") set(PC_DESCRIPTION "${description}") set(PC_VERSION "${version}") set(PC_REQUIRES "${requires}") set(PC_LIB "${libs}") set(PC_LIBS_PRIVATE "${libs_private}") set(output_filepath "${grpc_BINARY_DIR}/libs/opt/pkgconfig/${output_filename}") configure_file( "${grpc_SOURCE_DIR}/cmake/pkg-config-template.pc.in" "${output_filepath}" @ONLY) install(FILES "${output_filepath}" DESTINATION "lib/pkgconfig/") endfunction() # gpr .pc file generate_pkgconfig( "gpr" "gRPC platform support library" "${gRPC_CORE_VERSION}" "" "-lgpr -labsl_str_format_internal -labsl_time -labsl_time_zone -labsl_civil_time -labsl_strings -labsl_strings_internal -labsl_throw_delegate -labsl_int128 -labsl_base -labsl_spinlock_wait -labsl_raw_logging_internal -labsl_log_severity -labsl_dynamic_annotations" "" "gpr.pc") # grpc .pc file generate_pkgconfig( "gRPC" "high performance general RPC framework" "${gRPC_CORE_VERSION}" "gpr openssl" "-lgrpc -laddress_sorting -lupb -lcares -lz -labsl_bad_optional_access -labsl_str_format_internal -labsl_time -labsl_time_zone -labsl_civil_time -labsl_strings -labsl_strings_internal -labsl_throw_delegate -labsl_int128 -labsl_base -labsl_spinlock_wait -labsl_raw_logging_internal -labsl_log_severity -labsl_dynamic_annotations" "" "grpc.pc") # grpc_unsecure .pc file generate_pkgconfig( "gRPC unsecure" "high performance general RPC framework without SSL" "${gRPC_CORE_VERSION}" "gpr" "-lgrpc_unsecure -labsl_bad_optional_access -labsl_str_format_internal -labsl_time -labsl_time_zone -labsl_civil_time -labsl_strings -labsl_strings_internal -labsl_throw_delegate -labsl_int128 -labsl_base -labsl_spinlock_wait -labsl_raw_logging_internal -labsl_log_severity -labsl_dynamic_annotations" "" "grpc_unsecure.pc") # grpc++ .pc file generate_pkgconfig( "gRPC++" "C++ wrapper for gRPC" "${PACKAGE_VERSION}" "grpc" "-lgrpc++ -labsl_bad_optional_access -labsl_str_format_internal -labsl_time -labsl_time_zone -labsl_civil_time -labsl_strings -labsl_strings_internal -labsl_throw_delegate -labsl_int128 -labsl_base -labsl_spinlock_wait -labsl_raw_logging_internal -labsl_log_severity -labsl_dynamic_annotations" "" "grpc++.pc") # grpc++_unsecure .pc file generate_pkgconfig( "gRPC++ unsecure" "C++ wrapper for gRPC without SSL" "${PACKAGE_VERSION}" "grpc_unsecure" "-lgrpc++_unsecure -labsl_bad_optional_access -labsl_str_format_internal -labsl_time -labsl_time_zone -labsl_civil_time -labsl_strings -labsl_strings_internal -labsl_throw_delegate -labsl_int128 -labsl_base -labsl_spinlock_wait -labsl_raw_logging_internal -labsl_log_severity -labsl_dynamic_annotations" "" "grpc++_unsecure.pc") grpc-1.30.2/CODE-OF-CONDUCT.md000066400000000000000000000002121370425124100151550ustar00rootroot00000000000000## Community Code of Conduct gRPC follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md). grpc-1.30.2/CONCEPTS.md000066400000000000000000000067601370425124100143000ustar00rootroot00000000000000# gRPC Concepts Overview Remote Procedure Calls (RPCs) provide a useful abstraction for building distributed applications and services. The libraries in this repository provide a concrete implementation of the gRPC protocol, layered over HTTP/2. These libraries enable communication between clients and servers using any combination of the supported languages. ## Interface Developers using gRPC start with a language agnostic description of an RPC service (a collection of methods). From this description, gRPC will generate client and server side interfaces in any of the supported languages. The server implements the service interface, which can be remotely invoked by the client interface. By default, gRPC uses [Protocol Buffers](https://github.com/google/protobuf) as the Interface Definition Language (IDL) for describing both the service interface and the structure of the payload messages. It is possible to use other alternatives if desired. ### Invoking & handling remote calls Starting from an interface definition in a .proto file, gRPC provides Protocol Compiler plugins that generate Client- and Server-side APIs. gRPC users call into these APIs on the Client side and implement the corresponding API on the server side. #### Synchronous vs. asynchronous Synchronous RPC calls, that block until a response arrives from the server, are the closest approximation to the abstraction of a procedure call that RPC aspires to. On the other hand, networks are inherently asynchronous and in many scenarios, it is desirable to have the ability to start RPCs without blocking the current thread. The gRPC programming surface in most languages comes in both synchronous and asynchronous flavors. ## Streaming gRPC supports streaming semantics, where either the client or the server (or both) send a stream of messages on a single RPC call. The most general case is Bidirectional Streaming where a single gRPC call establishes a stream in which both the client and the server can send a stream of messages to each other. The streamed messages are delivered in the order they were sent. # Protocol The [gRPC protocol](doc/PROTOCOL-HTTP2.md) specifies the abstract requirements for communication between clients and servers. A concrete embedding over HTTP/2 completes the picture by fleshing out the details of each of the required operations. ## Abstract gRPC protocol A gRPC call comprises of a bidirectional stream of messages, initiated by the client. In the client-to-server direction, this stream begins with a mandatory `Call Header`, followed by optional `Initial-Metadata`, followed by zero or more `Payload Messages`. The server-to-client direction contains an optional `Initial-Metadata`, followed by zero or more `Payload Messages` terminated with a mandatory `Status` and optional `Status-Metadata` (a.k.a.,`Trailing-Metadata`). ## Implementation over HTTP/2 The abstract protocol defined above is implemented over [HTTP/2](https://http2.github.io/). gRPC bidirectional streams are mapped to HTTP/2 streams. The contents of `Call Header` and `Initial Metadata` are sent as HTTP/2 headers and subject to HPACK compression. `Payload Messages` are serialized into a byte stream of length prefixed gRPC frames which are then fragmented into HTTP/2 frames at the sender and reassembled at the receiver. `Status` and `Trailing-Metadata` are sent as HTTP/2 trailing headers (a.k.a., trailers). ## Flow Control gRPC uses the flow control mechanism in HTTP/2. This enables fine-grained control of memory used for buffering in-flight messages. grpc-1.30.2/CONTRIBUTING.md000066400000000000000000000163341370425124100147670ustar00rootroot00000000000000# How to contribute We definitely welcome your patches and contributions to gRPC! Please read the gRPC organization's [governance rules](https://github.com/grpc/grpc-community/blob/master/governance.md) and [contribution guidelines](https://github.com/grpc/grpc-community/blob/master/CONTRIBUTING.md) before proceeding. If you are new to github, please start by reading [Pull Request howto](https://help.github.com/articles/about-pull-requests/) If you are looking for features to work on, please filter the issues list with the label ["disposition/help wanted"](https://github.com/grpc/grpc/issues?q=label%3A%22disposition%2Fhelp+wanted%22). Please note that some of these feature requests might have been closed in the past as a result of them being marked as stale due to there being no activity, but these are still valid feature requests. ## Legal requirements In order to protect both you and ourselves, you will need to sign the [Contributor License Agreement](https://identity.linuxfoundation.org/projects/cncf). ## Cloning the repository Before starting any development work you will need a local copy of the gRPC repository. Please follow the instructions in [Building gRPC C++: Clone the repository](BUILDING.md#clone-the-repository-including-submodules). ## Building & Running tests Different languages use different build systems. To hide the complexity of needing to build with many different build systems, a portable python script that unifies the experience of building and testing gRPC in different languages and on different platforms is provided. To build gRPC in the language of choice (e.g. `c++`, `csharp`, `php`, `python`, `ruby`, ...) - Prepare your development environment based on language-specific instructions in `src/YOUR-LANGUAGE` directory. - The language-specific instructions might involve installing C/C++ prerequisites listed in [Building gRPC C++: Prerequisites](BUILDING.md#pre-requisites). This is because gRPC implementations in this repository are using the native gRPC "core" library internally. - Run ``` python tools/run_tests/run_tests.py -l YOUR_LANGUAGE --build_only ``` - To also run all the unit tests after building ``` python tools/run_tests/run_tests.py -l YOUR_LANGUAGE ``` You can also run `python tools/run_tests/run_tests.py --help` to discover useful command line flags supported. For more details, see [tools/run_tests](tools/run_tests) where you will also find guidance on how to run various other test suites (e.g. interop tests, benchmarks). ## Generated project files To ease maintenance of language- and platform- specific build systems, many projects files are generated using templates and should not be edited by hand. Run `tools/buildgen/generate_projects.sh` to regenerate. See [templates](templates) for details. As a rule of thumb, if you see the "sanity tests" failing you've most likely edited generated files or you didn't regenerate the projects properly (or your code formatting doesn't match our code style). ## Guidelines for Pull Requests How to get your contributions merged smoothly and quickly. - Create **small PRs** that are narrowly focused on **addressing a single concern**. We often times receive PRs that are trying to fix several things at a time, but only one fix is considered acceptable, nothing gets merged and both author's & review's time is wasted. Create more PRs to address different concerns and everyone will be happy. - For speculative changes, consider opening an issue and discussing it first. If you are suggesting a behavioral or API change, consider starting with a [gRFC proposal](https://github.com/grpc/proposal). - Provide a good **PR description** as a record of **what** change is being made and **why** it was made. Link to a GitHub issue if it exists. - Don't fix code style and formatting unless you are already changing that line to address an issue. PRs with irrelevant changes won't be merged. If you do want to fix formatting or style, do that in a separate PR. - If you are adding a new file, make sure it has the copyright message template at the top as a comment. You can copy over the message from an existing file and update the year. - Unless your PR is trivial, you should expect there will be reviewer comments that you'll need to address before merging. We expect you to be reasonably responsive to those comments, otherwise the PR will be closed after 2-3 weeks of inactivity. - If you have non-trivial contributions, please consider adding an entry to [the AUTHORS file](https://github.com/grpc/grpc/blob/master/AUTHORS) listing the copyright holder for the contribution (yourself, if you are signing the individual CLA, or your company, for corporate CLAs) in the same PR as your contribution. This needs to be done only once, for each company, or individual. Please keep this file in alphabetical order. - Maintain **clean commit history** and use **meaningful commit messages**. PRs with messy commit history are difficult to review and won't be merged. Use `rebase -i upstream/master` to curate your commit history and/or to bring in latest changes from master (but avoid rebasing in the middle of a code review). - Keep your PR up to date with upstream/master (if there are merge conflicts, we can't really merge your change). - If you are regenerating the projects using `tools/buildgen/generate_projects.sh`, make changes to generated files a separate commit with commit message `regenerate projects`. Mixing changes to generated and hand-written files make your PR difficult to review. Note that running this script requires the installation of Python packages `pyyaml` and `mako` (typically installed using `pip`) as well as a recent version of [`go`](https://golang.org/doc/install#install). - **All tests need to be passing** before your change can be merged. We recommend you **run tests locally** before creating your PR to catch breakages early on (see [tools/run_tests](tools/run_tests). Ultimately, the green signal will be provided by our testing infrastructure. The reviewer will help you if there are test failures that seem not related to the change you are making. - Exceptions to the rules can be made if there's a compelling reason for doing so. ## Obtaining Commit Access We grant Commit Access to contributors based on the following criteria: * Sustained contribution to the gRPC project. * Deep understanding of the areas contributed to, and good consideration of various reliability, usability and performance tradeoffs. * Contributions demonstrate that obtaining Commit Access will significantly reduce friction for the contributors or others. In addition to submitting PRs, a Contributor with Commit Access can: * Review PRs and merge once other checks and criteria pass. * Triage bugs and PRs and assign appropriate labels and reviewers. ### Obtaining Commit Access without Code Contributions The [gRPC organization](https://github.com/grpc) is comprised of multiple repositories and commit access is usually restricted to one or more of these repositories. Some repositories such as the [grpc.github.io](https://github.com/grpc/grpc.github.io/) do not have code, but the same principle of sustained, high quality contributions, with a good understanding of the fundamentals, apply. grpc-1.30.2/GOVERNANCE.md000066400000000000000000000002151370425124100144760ustar00rootroot00000000000000This repository is governed by the gRPC organization's [governance rules](https://github.com/grpc/grpc-community/blob/master/governance.md). grpc-1.30.2/Gemfile000077500000000000000000000001311370425124100140200ustar00rootroot00000000000000source 'https://rubygems.org' # Specify your gem's dependencies in grpc.gemspec gemspec grpc-1.30.2/LICENSE000066400000000000000000000261361370425124100135440ustar00rootroot00000000000000 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. grpc-1.30.2/MAINTAINERS.md000066400000000000000000000107121370425124100146240ustar00rootroot00000000000000This page lists all active maintainers of this repository. If you were a maintainer and would like to add your name to the Emeritus list, please send us a PR. See [GOVERNANCE.md](https://github.com/grpc/grpc-community/blob/master/governance.md) for governance guidelines and how to become a maintainer. See [CONTRIBUTING.md](https://github.com/grpc/grpc-community/blob/master/CONTRIBUTING.md) for general contribution guidelines. ## Maintainers (in alphabetical order) - [a11r](https://github.com/a11r), Google LLC - [apolcyn](https://github.com/apolcyn), Google LLC - [arjunroy](https://github.com/arjunroy), Google LLC - [AspirinSJL](https://github.com/AspirinSJL), Google LLC - [bogdandrutu](https://github.com/bogdandrutu), Google LLC - [daniel-j-born](https://github.com/daniel-j-born), Google LLC - [dapengzhang0](https://github.com/dapengzhang0), Google LLC - [dfawley](https://github.com/dfawley), Google LLC - [dklempner](https://github.com/dklempner), Google LLC - [ejona86](https://github.com/ejona86), Google LLC - [ericgribkoff](https://github.com/ericgribkoff), Google LLC - [gnossen](https://github.com/gnossen), Google LLC - [guantaol](https://github.com/guantaol), Google LLC - [hcaseyal](https://github.com/hcaseyal), Google LLC - [jboeuf](https://github.com/jboeuf), Google LLC - [jiangtaoli2016](https://github.com/jiangtaoli2016), Google LLC - [jkolhe](https://github.com/jkolhe), Google LLC - [jtattermusch](https://github.com/jtattermusch), Google LLC - [karthikravis](https://github.com/karthikravis), Google LLC - [kumaralokgithub](https://github.com/kumaralokgithub), Google LLC - [lidizheng](https://github.com/lidizheng), Google LLC - [markdroth](https://github.com/markdroth), Google LLC - [matthewstevenson88](https://github.com/matthewstevenson88), Google LLC - [mehrdada](https://github.com/mehrdada), Dropbox, Inc. - [mhaidrygoog](https://github.com/mhaidrygoog), Google LLC - [murgatroid99](https://github.com/murgatroid99), Google LLC - [muxi](https://github.com/muxi), Google LLC - [nanahpang](https://github.com/nanahpang), Google LLC - [nathanielmanistaatgoogle](https://github.com/nathanielmanistaatgoogle), Google LLC - [nicolasnoble](https://github.com/nicolasnoble), Google LLC - [pfreixes](https://github.com/pfreixes), Skyscanner Ltd - [qixuanl1](https://github.com/qixuanl1), Google LLC - [ran-su](https://github.com/ran-su), Google LLC - [rmstar](https://github.com/rmstar), Google LLC - [sanjaypujare](https://github.com/sanjaypujare), Google LLC - [sheenaqotj](https://github.com/sheenaqotj), Google LLC - [soheilhy](https://github.com/soheilhy), Google LLC - [sreecha](https://github.com/sreecha), LinkedIn - [srini100](https://github.com/srini100), Google LLC - [stanley-cheung](https://github.com/stanley-cheung), Google LLC - [veblush](https://github.com/veblush), Google LLC - [vishalpowar](https://github.com/vishalpowar), Google LLC - [Vizerai](https://github.com/Vizerai), Google LLC - [vjpai](https://github.com/vjpai), Google LLC - [wcevans](https://github.com/wcevans), Google LLC - [wenbozhu](https://github.com/wenbozhu), Google LLC - [yang-g](https://github.com/yang-g), Google LLC - [yashykt](https://github.com/yashykt), Google LLC - [yihuazhang](https://github.com/yihuazhang), Google LLC - [ZhenLian](https://github.com/ZhenLian), Google LLC - [ZhouyihaiDing](https://github.com/ZhouyihaiDing), Google LLC ## Emeritus Maintainers (in alphabetical order) - [adelez](https://github.com/adelez), Google LLC - [billfeng327](https://github.com/billfeng327), Google LLC - [ctiller](https://github.com/ctiller), Google LLC - [dgquintas](https://github.com/dgquintas), Google LLC - [fengli79](https://github.com/fengli79), Google LLC - [jcanizales](https://github.com/jcanizales), Google LLC - [jpalmerLinuxFoundation](https://github.com/jpalmerLinuxFoundation), Linux Foundation - [justinburke](https://github.com/justinburke), Google LLC - [kpayson64](https://github.com/kpayson64), Google LLC - [lyuxuan](https://github.com/lyuxuan), Google LLC - [matt-kwong](https://github.com/matt-kwong), Google LLC - [mit-mit](https://github.com/mit-mit), Google LLC - [mpwarres](https://github.com/mpwarres), Google LLC - [ncteisen](https://github.com/ncteisen), Google LLC - [pmarks-net](https://github.com/pmarks-net), Google LLC - [slash-lib](https://github.com/slash-lib), Google LLC - [soltanmm](https://github.com/soltanmm), Google LLC - [summerxyt](https://github.com/summerxyt), Google LLC - [y-zeng](https://github.com/y-zeng), Google LLC - [zpencer](https://github.com/zpencer), Google LLC grpc-1.30.2/MANIFEST.md000066400000000000000000000006561370425124100142660ustar00rootroot00000000000000# Top-level Items by language ## Bazel * [grpc.bzl](grpc.bzl) ## Objective-C * [gRPC.podspec](gRPC.podspec) ## PHP * [composer.json](composer.json) * [config.m4](config.m4) * [package.xml](package.xml) ## Python * [requirements.txt](requirements.txt) * [setup.cfg](setup.cfg) * [setup.py](setup.py) * [PYTHON-MANIFEST.in](PYTHON-MANIFEST.in) ## Ruby * [Gemfile](Gemfile) * [grpc.gemspec](grpc.gemspec) * [Rakefile](Rakefile) grpc-1.30.2/Makefile000066400000000000000000041035411370425124100141770ustar00rootroot00000000000000# GRPC global makefile # This currently builds C and C++ code. # This file has been automatically generated from a template file. # Please look at the templates directory instead. # This file can be regenerated from the template by running # tools/buildgen/generate_projects.sh # Copyright 2015 gRPC 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 # # 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. comma := , # Basic platform detection HOST_SYSTEM = $(shell uname | cut -f 1 -d_) SYSTEM ?= $(HOST_SYSTEM) ifeq ($(SYSTEM),MSYS) SYSTEM = MINGW32 endif ifeq ($(SYSTEM),MINGW64) SYSTEM = MINGW32 endif MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) ifndef BUILDDIR BUILDDIR_ABSOLUTE = $(patsubst %/,%,$(dir $(MAKEFILE_PATH))) else BUILDDIR_ABSOLUTE = $(abspath $(BUILDDIR)) endif HAS_GCC = $(shell which gcc > /dev/null 2> /dev/null && echo true || echo false) HAS_CC = $(shell which cc > /dev/null 2> /dev/null && echo true || echo false) HAS_CLANG = $(shell which clang > /dev/null 2> /dev/null && echo true || echo false) ifeq ($(HAS_CC),true) DEFAULT_CC = cc DEFAULT_CXX = c++ else ifeq ($(HAS_GCC),true) DEFAULT_CC = gcc DEFAULT_CXX = g++ else ifeq ($(HAS_CLANG),true) DEFAULT_CC = clang DEFAULT_CXX = clang++ else DEFAULT_CC = no_c_compiler DEFAULT_CXX = no_c++_compiler endif endif endif BINDIR = $(BUILDDIR_ABSOLUTE)/bins OBJDIR = $(BUILDDIR_ABSOLUTE)/objs LIBDIR = $(BUILDDIR_ABSOLUTE)/libs GENDIR = $(BUILDDIR_ABSOLUTE)/gens # Configurations VALID_CONFIG_opt = 1 CC_opt = $(DEFAULT_CC) CXX_opt = $(DEFAULT_CXX) LD_opt = $(DEFAULT_CC) LDXX_opt = $(DEFAULT_CXX) CPPFLAGS_opt = -O2 -Wframe-larger-than=16384 DEFINES_opt = NDEBUG VALID_CONFIG_asan-trace-cmp = 1 REQUIRE_CUSTOM_LIBRARIES_asan-trace-cmp = 1 CC_asan-trace-cmp = clang CXX_asan-trace-cmp = clang++ LD_asan-trace-cmp = clang++ LDXX_asan-trace-cmp = clang++ CPPFLAGS_asan-trace-cmp = -O0 -fsanitize-coverage=edge,trace-pc-guard -fsanitize-coverage=trace-cmp -fsanitize=address -fno-omit-frame-pointer -Wno-unused-command-line-argument -DGPR_NO_DIRECT_SYSCALLS LDFLAGS_asan-trace-cmp = -fsanitize=address VALID_CONFIG_dbg = 1 CC_dbg = $(DEFAULT_CC) CXX_dbg = $(DEFAULT_CXX) LD_dbg = $(DEFAULT_CC) LDXX_dbg = $(DEFAULT_CXX) CPPFLAGS_dbg = -O0 DEFINES_dbg = _DEBUG DEBUG VALID_CONFIG_asan = 1 REQUIRE_CUSTOM_LIBRARIES_asan = 1 CC_asan = clang CXX_asan = clang++ LD_asan = clang++ LDXX_asan = clang++ CPPFLAGS_asan = -O0 -fsanitize-coverage=edge,trace-pc-guard -fsanitize=address -fno-omit-frame-pointer -Wno-unused-command-line-argument -DGPR_NO_DIRECT_SYSCALLS LDFLAGS_asan = -fsanitize=address VALID_CONFIG_msan = 1 REQUIRE_CUSTOM_LIBRARIES_msan = 1 CC_msan = clang CXX_msan = clang++ LD_msan = clang++ LDXX_msan = clang++ CPPFLAGS_msan = -O0 -stdlib=libc++ -fsanitize-coverage=edge,trace-pc-guard -fsanitize=memory -fsanitize-memory-track-origins -fsanitize-memory-use-after-dtor -fno-omit-frame-pointer -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -Wno-unused-command-line-argument -fPIE -pie -DGPR_NO_DIRECT_SYSCALLS LDFLAGS_msan = -stdlib=libc++ -fsanitize=memory -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -fPIE -pie $(if $(JENKINS_BUILD),-Wl$(comma)-Ttext-segment=0x7e0000000000,) DEFINES_msan = NDEBUG VALID_CONFIG_basicprof = 1 CC_basicprof = $(DEFAULT_CC) CXX_basicprof = $(DEFAULT_CXX) LD_basicprof = $(DEFAULT_CC) LDXX_basicprof = $(DEFAULT_CXX) CPPFLAGS_basicprof = -O2 -DGRPC_BASIC_PROFILER -DGRPC_TIMERS_RDTSC DEFINES_basicprof = NDEBUG VALID_CONFIG_helgrind = 1 CC_helgrind = $(DEFAULT_CC) CXX_helgrind = $(DEFAULT_CXX) LD_helgrind = $(DEFAULT_CC) LDXX_helgrind = $(DEFAULT_CXX) CPPFLAGS_helgrind = -O0 LDFLAGS_helgrind = -rdynamic DEFINES_helgrind = _DEBUG DEBUG VALID_CONFIG_asan-noleaks = 1 REQUIRE_CUSTOM_LIBRARIES_asan-noleaks = 1 CC_asan-noleaks = clang CXX_asan-noleaks = clang++ LD_asan-noleaks = clang++ LDXX_asan-noleaks = clang++ CPPFLAGS_asan-noleaks = -O0 -fsanitize-coverage=edge,trace-pc-guard -fsanitize=address -fno-omit-frame-pointer -Wno-unused-command-line-argument -DGPR_NO_DIRECT_SYSCALLS LDFLAGS_asan-noleaks = fsanitize=address VALID_CONFIG_noexcept = 1 CC_noexcept = $(DEFAULT_CC) CXX_noexcept = $(DEFAULT_CXX) LD_noexcept = $(DEFAULT_CC) LDXX_noexcept = $(DEFAULT_CXX) CXXFLAGS_noexcept = -fno-exceptions CPPFLAGS_noexcept = -O2 -Wframe-larger-than=16384 DEFINES_noexcept = NDEBUG VALID_CONFIG_ubsan = 1 REQUIRE_CUSTOM_LIBRARIES_ubsan = 1 CC_ubsan = clang CXX_ubsan = clang++ LD_ubsan = clang++ LDXX_ubsan = clang++ CPPFLAGS_ubsan = -O0 -stdlib=libc++ -fsanitize-coverage=edge,trace-pc-guard -fsanitize=undefined -fno-omit-frame-pointer -Wno-unused-command-line-argument -Wvarargs LDFLAGS_ubsan = -stdlib=libc++ -fsanitize=undefined,unsigned-integer-overflow DEFINES_ubsan = NDEBUG GRPC_UBSAN VALID_CONFIG_tsan = 1 REQUIRE_CUSTOM_LIBRARIES_tsan = 1 CC_tsan = clang CXX_tsan = clang++ LD_tsan = clang++ LDXX_tsan = clang++ CPPFLAGS_tsan = -O0 -fsanitize=thread -fno-omit-frame-pointer -Wno-unused-command-line-argument -DGPR_NO_DIRECT_SYSCALLS LDFLAGS_tsan = -fsanitize=thread DEFINES_tsan = GRPC_TSAN VALID_CONFIG_counters_with_memory_counter = 1 CC_counters_with_memory_counter = $(DEFAULT_CC) CXX_counters_with_memory_counter = $(DEFAULT_CXX) LD_counters_with_memory_counter = $(DEFAULT_CC) LDXX_counters_with_memory_counter = $(DEFAULT_CXX) CPPFLAGS_counters_with_memory_counter = -O2 -DGPR_LOW_LEVEL_COUNTERS -DGPR_WRAP_MEMORY_COUNTER LDFLAGS_counters_with_memory_counter = -Wl,--wrap=malloc -Wl,--wrap=calloc -Wl,--wrap=realloc -Wl,--wrap=free DEFINES_counters_with_memory_counter = NDEBUG VALID_CONFIG_stapprof = 1 CC_stapprof = $(DEFAULT_CC) CXX_stapprof = $(DEFAULT_CXX) LD_stapprof = $(DEFAULT_CC) LDXX_stapprof = $(DEFAULT_CXX) CPPFLAGS_stapprof = -O2 -DGRPC_STAP_PROFILER DEFINES_stapprof = NDEBUG VALID_CONFIG_gcov = 1 CC_gcov = gcc CXX_gcov = g++ LD_gcov = gcc LDXX_gcov = g++ CPPFLAGS_gcov = -O0 -fprofile-arcs -ftest-coverage -Wno-return-type LDFLAGS_gcov = -fprofile-arcs -ftest-coverage -rdynamic -lstdc++ DEFINES_gcov = _DEBUG DEBUG GPR_GCOV VALID_CONFIG_memcheck = 1 CC_memcheck = $(DEFAULT_CC) CXX_memcheck = $(DEFAULT_CXX) LD_memcheck = $(DEFAULT_CC) LDXX_memcheck = $(DEFAULT_CXX) CPPFLAGS_memcheck = -O0 LDFLAGS_memcheck = -rdynamic DEFINES_memcheck = _DEBUG DEBUG VALID_CONFIG_lto = 1 CC_lto = $(DEFAULT_CC) CXX_lto = $(DEFAULT_CXX) LD_lto = $(DEFAULT_CC) LDXX_lto = $(DEFAULT_CXX) CPPFLAGS_lto = -O2 DEFINES_lto = NDEBUG VALID_CONFIG_c++-compat = 1 CC_c++-compat = $(DEFAULT_CC) CXX_c++-compat = $(DEFAULT_CXX) LD_c++-compat = $(DEFAULT_CC) LDXX_c++-compat = $(DEFAULT_CXX) CFLAGS_c++-compat = -Wc++-compat CPPFLAGS_c++-compat = -O0 DEFINES_c++-compat = _DEBUG DEBUG VALID_CONFIG_mutrace = 1 CC_mutrace = $(DEFAULT_CC) CXX_mutrace = $(DEFAULT_CXX) LD_mutrace = $(DEFAULT_CC) LDXX_mutrace = $(DEFAULT_CXX) CPPFLAGS_mutrace = -O3 -fno-omit-frame-pointer LDFLAGS_mutrace = -rdynamic DEFINES_mutrace = NDEBUG VALID_CONFIG_counters = 1 CC_counters = $(DEFAULT_CC) CXX_counters = $(DEFAULT_CXX) LD_counters = $(DEFAULT_CC) LDXX_counters = $(DEFAULT_CXX) CPPFLAGS_counters = -O2 -DGPR_LOW_LEVEL_COUNTERS DEFINES_counters = NDEBUG # General settings. # You may want to change these depending on your system. prefix ?= /usr/local PROTOC ?= protoc DTRACE ?= dtrace CONFIG ?= opt # Doing X ?= Y is the same as: # ifeq ($(origin X), undefined) # X = Y # endif # but some variables, such as CC, CXX, LD or AR, have defaults. # So instead of using ?= on them, we need to check their origin. # See: # https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html # https://www.gnu.org/software/make/manual/html_node/Flavors.html#index-_003f_003d # https://www.gnu.org/software/make/manual/html_node/Origin-Function.html ifeq ($(origin CC), default) CC = $(CC_$(CONFIG)) endif ifeq ($(origin CXX), default) CXX = $(CXX_$(CONFIG)) endif ifeq ($(origin LD), default) LD = $(LD_$(CONFIG)) endif LDXX ?= $(LDXX_$(CONFIG)) ifeq ($(SYSTEM),Linux) ifeq ($(origin AR), default) AR = ar rcs endif STRIP ?= strip --strip-unneeded else ifeq ($(SYSTEM),Darwin) ifeq ($(origin AR), default) AR = libtool -no_warning_for_no_symbols -o endif STRIP ?= strip -x else ifeq ($(SYSTEM),MINGW32) ifeq ($(origin AR), default) AR = ar rcs endif STRIP ?= strip --strip-unneeded else ifeq ($(origin AR), default) AR = ar rcs endif STRIP ?= strip endif endif endif INSTALL ?= install RM ?= rm -f PKG_CONFIG ?= pkg-config ifndef VALID_CONFIG_$(CONFIG) $(error Invalid CONFIG value '$(CONFIG)') endif ifeq ($(SYSTEM),Linux) TMPOUT = /dev/null else TMPOUT = `mktemp /tmp/test-out-XXXXXX` endif CHECK_NO_CXX14_COMPAT_WORKS_CMD = $(CC) -std=c++11 -Werror -Wno-c++14-compat -o $(TMPOUT) -c test/build/no-c++14-compat.cc HAS_WORKING_NO_CXX14_COMPAT = $(shell $(CHECK_NO_CXX14_COMPAT_WORKS_CMD) 2> /dev/null && echo true || echo false) ifeq ($(HAS_WORKING_NO_CXX14_COMPAT),true) W_NO_CXX14_COMPAT=-Wno-c++14-compat endif CHECK_EXTRA_SEMI_WORKS_CMD = $(CC) -std=c99 -Werror -Wextra-semi -o $(TMPOUT) -c test/build/extra-semi.c HAS_WORKING_EXTRA_SEMI = $(shell $(CHECK_EXTRA_SEMI_WORKS_CMD) 2> /dev/null && echo true || echo false) ifeq ($(HAS_WORKING_EXTRA_SEMI),true) W_EXTRA_SEMI=-Wextra-semi NO_W_EXTRA_SEMI=-Wno-extra-semi endif CHECK_NO_SHIFT_NEGATIVE_VALUE_WORKS_CMD = $(CC) -std=c99 -Werror -Wno-shift-negative-value -o $(TMPOUT) -c test/build/no-shift-negative-value.c HAS_WORKING_NO_SHIFT_NEGATIVE_VALUE = $(shell $(CHECK_NO_SHIFT_NEGATIVE_VALUE_WORKS_CMD) 2> /dev/null && echo true || echo false) ifeq ($(HAS_WORKING_NO_SHIFT_NEGATIVE_VALUE),true) W_NO_SHIFT_NEGATIVE_VALUE=-Wno-shift-negative-value NO_W_NO_SHIFT_NEGATIVE_VALUE=-Wshift-negative-value endif CHECK_NO_UNUSED_BUT_SET_VARIABLE_WORKS_CMD = $(CC) -std=c99 -Werror -Wno-unused-but-set-variable -o $(TMPOUT) -c test/build/no-unused-but-set-variable.c HAS_WORKING_NO_UNUSED_BUT_SET_VARIABLE = $(shell $(CHECK_NO_UNUSED_BUT_SET_VARIABLE_WORKS_CMD) 2> /dev/null && echo true || echo false) ifeq ($(HAS_WORKING_NO_UNUSED_BUT_SET_VARIABLE),true) W_NO_UNUSED_BUT_SET_VARIABLE=-Wno-unused-but-set-variable NO_W_NO_UNUSED_BUT_SET_VARIABLE=-Wunused-but-set-variable endif CHECK_NO_MAYBE_UNINITIALIZED_WORKS_CMD = $(CC) -std=c99 -Werror -Wno-maybe-uninitialized -o $(TMPOUT) -c test/build/no-maybe-uninitialized.c HAS_WORKING_NO_MAYBE_UNINITIALIZED = $(shell $(CHECK_NO_MAYBE_UNINITIALIZED_WORKS_CMD) 2> /dev/null && echo true || echo false) ifeq ($(HAS_WORKING_NO_MAYBE_UNINITIALIZED),true) W_NO_MAYBE_UNINITIALIZED=-Wno-maybe-uninitialized NO_W_NO_MAYBE_UNINITIALIZED=-Wmaybe-uninitialized endif CHECK_NO_UNKNOWN_WARNING_OPTION_WORKS_CMD = $(CC) -std=c99 -Werror -Wno-unknown-warning-option -o $(TMPOUT) -c test/build/no-unknown-warning-option.c HAS_WORKING_NO_UNKNOWN_WARNING_OPTION = $(shell $(CHECK_NO_UNKNOWN_WARNING_OPTION_WORKS_CMD) 2> /dev/null && echo true || echo false) ifeq ($(HAS_WORKING_NO_UNKNOWN_WARNING_OPTION),true) W_NO_UNKNOWN_WARNING_OPTION=-Wno-unknown-warning-option NO_W_NO_UNKNOWN_WARNING_OPTION=-Wunknown-warning-option endif # The HOST compiler settings are used to compile the protoc plugins. # In most cases, you won't have to change anything, but if you are # cross-compiling, you can override these variables from GNU make's # command line: make CC=cross-gcc HOST_CC=gcc HOST_CC ?= $(CC) HOST_CXX ?= $(CXX) HOST_LD ?= $(LD) HOST_LDXX ?= $(LDXX) CFLAGS += -std=c99 $(W_EXTRA_SEMI) CXXFLAGS += -std=c++11 ifeq ($(SYSTEM),Darwin) CXXFLAGS += -stdlib=libc++ LDFLAGS += -framework CoreFoundation endif CFLAGS += -g CPPFLAGS += -g -Wall -Wextra -DOSATOMIC_USE_INLINED=1 -Ithird_party/abseil-cpp -Ithird_party/upb -Isrc/core/ext/upb-generated COREFLAGS += -fno-exceptions LDFLAGS += -g CPPFLAGS += $(CPPFLAGS_$(CONFIG)) CFLAGS += $(CFLAGS_$(CONFIG)) CXXFLAGS += $(CXXFLAGS_$(CONFIG)) DEFINES += $(DEFINES_$(CONFIG)) INSTALL_PREFIX=\"$(prefix)\" LDFLAGS += $(LDFLAGS_$(CONFIG)) ifneq ($(SYSTEM),MINGW32) PIC_CPPFLAGS = -fPIC CPPFLAGS += -fPIC LDFLAGS += -fPIC endif INCLUDES = . include $(GENDIR) LDFLAGS += -Llibs/$(CONFIG) ifeq ($(SYSTEM),Darwin) ifneq ($(wildcard /usr/local/ssl/include),) INCLUDES += /usr/local/ssl/include endif ifneq ($(wildcard /opt/local/include),) INCLUDES += /opt/local/include endif ifneq ($(wildcard /usr/local/include),) INCLUDES += /usr/local/include endif LIBS = m z ifneq ($(wildcard /usr/local/ssl/lib),) LDFLAGS += -L/usr/local/ssl/lib endif ifneq ($(wildcard /opt/local/lib),) LDFLAGS += -L/opt/local/lib endif ifneq ($(wildcard /usr/local/lib),) LDFLAGS += -L/usr/local/lib endif endif ifeq ($(SYSTEM),Linux) LIBS = dl rt m pthread LDFLAGS += -pthread endif ifeq ($(SYSTEM),MINGW32) LIBS = m pthread ws2_32 dbghelp LDFLAGS += -pthread endif # If we are installing into a non-default prefix, both # the libraries we build, and the apps users build, # need to know how to find the libraries they depend on. # There is much gnashing of teeth about this subject. # It's tricky to do that without editing images during install, # as you don't want tests during build to find previously installed and # now stale libraries, etc. ifeq ($(SYSTEM),Linux) ifneq ($(prefix),/usr) # Linux best practice for rpath on installed files is probably: # 1) .pc file provides -Wl,-rpath,$(prefix)/lib # 2) binaries we install into $(prefix)/bin use -Wl,-rpath,$ORIGIN/../lib # 3) libraries we install into $(prefix)/lib use -Wl,-rpath,$ORIGIN # cf. https://www.akkadia.org/drepper/dsohowto.pdf # Doing all of that right is hard, but using -Wl,-rpath,$ORIGIN is always # safe, and solves problems seen in the wild. Note that $ORIGIN # is a literal string interpreted much later by ld.so. Escape it # here with a dollar sign so Make doesn't expand $O. LDFLAGS += '-Wl,-rpath,$$ORIGIN' endif endif # # The steps for cross-compiling are as follows: # First, clone and make install of grpc using the native compilers for the host. # Also, install protoc (e.g., from a package like apt-get) # Then clone a fresh grpc for the actual cross-compiled build # Set the environment variable GRPC_CROSS_COMPILE to true # Set CC, CXX, LD, LDXX, AR, and STRIP to the cross-compiling binaries # Also set PROTOBUF_CONFIG_OPTS to indicate cross-compilation to protobuf (e.g., # PROTOBUF_CONFIG_OPTS="--host=arm-linux --with-protoc=/usr/local/bin/protoc" ) # Set HAS_PKG_CONFIG=false # To build tests, go to third_party/gflags and follow its ccmake instructions # Make sure that you enable building shared libraries and set your prefix to # something useful like /usr/local/cross # You will also need to set GRPC_CROSS_LDOPTS and GRPC_CROSS_AROPTS to hold # additional required arguments for LD and AR (examples below) # Then you can do a make from the cross-compiling fresh clone! # ifeq ($(GRPC_CROSS_COMPILE),true) LDFLAGS += $(GRPC_CROSS_LDOPTS) # e.g. -L/usr/local/lib -L/usr/local/cross/lib AROPTS = $(GRPC_CROSS_AROPTS) # e.g., rc --target=elf32-little USE_BUILT_PROTOC = false endif GTEST_LIB = -Ithird_party/googletest/googletest/include -Ithird_party/googletest/googletest third_party/googletest/googletest/src/gtest-all.cc -Ithird_party/googletest/googlemock/include -Ithird_party/googletest/googlemock third_party/googletest/googlemock/src/gmock-all.cc GTEST_LIB += -lgflags -std=c++11 ifeq ($(V),1) E = @: Q = else E = @echo Q = @ endif CORE_VERSION = 10.0.0 CPP_VERSION = 1.30.2 CSHARP_VERSION = 2.30.2 CPPFLAGS_NO_ARCH += $(addprefix -I, $(INCLUDES)) $(addprefix -D, $(DEFINES)) CPPFLAGS += $(CPPFLAGS_NO_ARCH) $(ARCH_FLAGS) LDFLAGS += $(ARCH_FLAGS) LDLIBS += $(addprefix -l, $(LIBS)) LDLIBSXX += $(addprefix -l, $(LIBSXX)) CFLAGS += $(EXTRA_CFLAGS) CXXFLAGS += $(EXTRA_CXXFLAGS) CPPFLAGS += $(EXTRA_CPPFLAGS) LDFLAGS += $(EXTRA_LDFLAGS) DEFINES += $(EXTRA_DEFINES) LDLIBS += $(EXTRA_LDLIBS) HOST_CPPFLAGS += $(CPPFLAGS) HOST_CFLAGS += $(CFLAGS) HOST_CXXFLAGS += $(CXXFLAGS) HOST_LDFLAGS += $(LDFLAGS) HOST_LDLIBS += $(LDLIBS) # These are automatically computed variables. # There shouldn't be any need to change anything from now on. -include cache.mk CACHE_MK = HAS_PKG_CONFIG ?= $(shell command -v $(PKG_CONFIG) >/dev/null 2>&1 && echo true || echo false) ifeq ($(HAS_PKG_CONFIG), true) CACHE_MK += HAS_PKG_CONFIG = true, endif CORE_PC_TEMPLATE = prefix=$(prefix),exec_prefix=\$${prefix},includedir=\$${prefix}/include,libdir=\$${exec_prefix}/lib,,Name: $(PC_NAME),Description: $(PC_DESCRIPTION),Version: $(CORE_VERSION),Cflags: -I\$${includedir} $(PC_CFLAGS),Requires: $(PC_REQUIRES),Libs: -L\$${libdir} $(PC_LIB),Libs.private: $(PC_LIBS_PRIVATE) CPP_PC_TEMPLATE = prefix=$(prefix),exec_prefix=\$${prefix},includedir=\$${prefix}/include,libdir=\$${exec_prefix}/lib,,Name: $(PC_NAME),Description: $(PC_DESCRIPTION),Version: $(CPP_VERSION),Cflags: -I\$${includedir} $(PC_CFLAGS),Requires: $(PC_REQUIRES),Libs: -L\$${libdir} $(PC_LIB),Libs.private: $(PC_LIBS_PRIVATE) CSHARP_PC_TEMPLATE = prefix=$(prefix),exec_prefix=\$${prefix},includedir=\$${prefix}/include,libdir=\$${exec_prefix}/lib,,Name: $(PC_NAME),Description: $(PC_DESCRIPTION),Version: $(CSHARP_VERSION),Cflags: -I\$${includedir} $(PC_CFLAGS),Requires: $(PC_REQUIRES),Libs: -L\$${libdir} $(PC_LIB),Libs.private: $(PC_LIBS_PRIVATE) ifeq ($(SYSTEM),MINGW32) EXECUTABLE_SUFFIX = .exe SHARED_EXT_CORE = dll SHARED_EXT_CPP = dll SHARED_EXT_CSHARP = dll SHARED_PREFIX = SHARED_VERSION_CORE = -10 SHARED_VERSION_CPP = -1 SHARED_VERSION_CSHARP = -2 else ifeq ($(SYSTEM),Darwin) EXECUTABLE_SUFFIX = SHARED_EXT_CORE = dylib SHARED_EXT_CPP = dylib SHARED_EXT_CSHARP = dylib SHARED_PREFIX = lib SHARED_VERSION_CORE = SHARED_VERSION_CPP = SHARED_VERSION_CSHARP = else EXECUTABLE_SUFFIX = SHARED_EXT_CORE = so.$(CORE_VERSION) SHARED_EXT_CPP = so.$(CPP_VERSION) SHARED_EXT_CSHARP = so.$(CSHARP_VERSION) SHARED_PREFIX = lib SHARED_VERSION_CORE = SHARED_VERSION_CPP = SHARED_VERSION_CSHARP = endif ifeq ($(wildcard .git),) IS_GIT_FOLDER = false else IS_GIT_FOLDER = true endif ifeq ($(HAS_PKG_CONFIG),true) OPENSSL_ALPN_CHECK_CMD = $(PKG_CONFIG) --atleast-version=1.0.2 openssl ZLIB_CHECK_CMD = $(PKG_CONFIG) --exists zlib PROTOBUF_CHECK_CMD = $(PKG_CONFIG) --atleast-version=3.5.0 protobuf CARES_CHECK_CMD = $(PKG_CONFIG) --atleast-version=1.11.0 libcares else # HAS_PKG_CONFIG ifeq ($(SYSTEM),MINGW32) OPENSSL_LIBS = ssl32 eay32 else OPENSSL_LIBS = ssl crypto endif OPENSSL_ALPN_CHECK_CMD = $(CC) $(CPPFLAGS) $(CFLAGS) -o $(TMPOUT) test/build/openssl-alpn.c $(addprefix -l, $(OPENSSL_LIBS)) $(LDFLAGS) BORINGSSL_COMPILE_CHECK_CMD = $(CC) $(CPPFLAGS) -Ithird_party/boringssl-with-bazel/src/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX $(CFLAGS) -g -o $(TMPOUT) test/build/boringssl.c $(LDFLAGS) ZLIB_CHECK_CMD = $(CC) $(CPPFLAGS) $(CFLAGS) -o $(TMPOUT) test/build/zlib.c -lz $(LDFLAGS) PROTOBUF_CHECK_CMD = $(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $(TMPOUT) test/build/protobuf.cc -lprotobuf $(LDFLAGS) CARES_CHECK_CMD = $(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $(TMPOUT) test/build/c-ares.c -lcares $(LDFLAGS) endif # HAS_PKG_CONFIG PERFTOOLS_CHECK_CMD = $(CC) $(CPPFLAGS) $(CFLAGS) -o $(TMPOUT) test/build/perftools.c -lprofiler $(LDFLAGS) PROTOC_CHECK_CMD = which protoc > /dev/null PROTOC_CHECK_VERSION_CMD = protoc --version | grep -q libprotoc.3 DTRACE_CHECK_CMD = which dtrace > /dev/null SYSTEMTAP_HEADERS_CHECK_CMD = $(CC) $(CPPFLAGS) $(CFLAGS) -o $(TMPOUT) test/build/systemtap.c $(LDFLAGS) ifndef REQUIRE_CUSTOM_LIBRARIES_$(CONFIG) HAS_SYSTEM_PERFTOOLS ?= $(shell $(PERFTOOLS_CHECK_CMD) 2> /dev/null && echo true || echo false) ifeq ($(HAS_SYSTEM_PERFTOOLS),true) DEFINES += GRPC_HAVE_PERFTOOLS LIBS += profiler CACHE_MK += HAS_SYSTEM_PERFTOOLS = true, endif endif HAS_SYSTEM_PROTOBUF_VERIFY = $(shell $(PROTOBUF_CHECK_CMD) 2> /dev/null && echo true || echo false) ifndef REQUIRE_CUSTOM_LIBRARIES_$(CONFIG) HAS_SYSTEM_OPENSSL_ALPN ?= $(shell $(OPENSSL_ALPN_CHECK_CMD) 2> /dev/null && echo true || echo false) ifeq ($(HAS_SYSTEM_OPENSSL_ALPN),true) CACHE_MK += HAS_SYSTEM_OPENSSL_ALPN = true, endif HAS_SYSTEM_ZLIB ?= $(shell $(ZLIB_CHECK_CMD) 2> /dev/null && echo true || echo false) ifeq ($(HAS_SYSTEM_ZLIB),true) CACHE_MK += HAS_SYSTEM_ZLIB = true, endif HAS_SYSTEM_PROTOBUF ?= $(HAS_SYSTEM_PROTOBUF_VERIFY) ifeq ($(HAS_SYSTEM_PROTOBUF),true) CACHE_MK += HAS_SYSTEM_PROTOBUF = true, endif HAS_SYSTEM_CARES ?= $(shell $(CARES_CHECK_CMD) 2> /dev/null && echo true || echo false) ifeq ($(HAS_SYSTEM_CARES),true) CACHE_MK += HAS_SYSTEM_CARES = true, endif else # override system libraries if the config requires a custom compiled library HAS_SYSTEM_OPENSSL_ALPN = false HAS_SYSTEM_ZLIB = false HAS_SYSTEM_PROTOBUF = false HAS_SYSTEM_CARES = false endif HAS_PROTOC ?= $(shell $(PROTOC_CHECK_CMD) 2> /dev/null && echo true || echo false) ifeq ($(HAS_PROTOC),true) CACHE_MK += HAS_PROTOC = true, HAS_VALID_PROTOC ?= $(shell $(PROTOC_CHECK_VERSION_CMD) 2> /dev/null && echo true || echo false) ifeq ($(HAS_VALID_PROTOC),true) CACHE_MK += HAS_VALID_PROTOC = true, endif else HAS_VALID_PROTOC = false endif # Check for Systemtap (https://sourceware.org/systemtap/), first by making sure is present # in the system and secondly by checking for the "dtrace" binary (on Linux, this is part of the Systemtap # distribution. It's part of the base system on BSD/Solaris machines). ifndef HAS_SYSTEMTAP HAS_SYSTEMTAP_HEADERS = $(shell $(SYSTEMTAP_HEADERS_CHECK_CMD) 2> /dev/null && echo true || echo false) HAS_DTRACE = $(shell $(DTRACE_CHECK_CMD) 2> /dev/null && echo true || echo false) HAS_SYSTEMTAP = false ifeq ($(HAS_SYSTEMTAP_HEADERS),true) ifeq ($(HAS_DTRACE),true) HAS_SYSTEMTAP = true endif endif endif ifeq ($(HAS_SYSTEMTAP),true) CACHE_MK += HAS_SYSTEMTAP = true, endif # Note that for testing purposes, one can do: # make HAS_EMBEDDED_OPENSSL_ALPN=false # to emulate the fact we do not have OpenSSL in the third_party folder. ifeq ($(wildcard third_party/boringssl-with-bazel/src/include/openssl/ssl.h),) HAS_EMBEDDED_OPENSSL_ALPN = false else CAN_COMPILE_EMBEDDED_OPENSSL ?= $(shell $(BORINGSSL_COMPILE_CHECK_CMD) 2> /dev/null && echo true || echo false) HAS_EMBEDDED_OPENSSL_ALPN = $(CAN_COMPILE_EMBEDDED_OPENSSL) endif ifeq ($(wildcard third_party/zlib/zlib.h),) HAS_EMBEDDED_ZLIB = false else HAS_EMBEDDED_ZLIB = true endif ifeq ($(wildcard third_party/protobuf/src/google/protobuf/descriptor.pb.h),) HAS_EMBEDDED_PROTOBUF = false ifneq ($(HAS_VALID_PROTOC),true) NO_PROTOC = true endif else HAS_EMBEDDED_PROTOBUF = true endif ifeq ($(wildcard third_party/cares/cares/ares.h),) HAS_EMBEDDED_CARES = false else HAS_EMBEDDED_CARES = true endif PC_REQUIRES_GRPC = PC_LIBS_GRPC = ifeq ($(HAS_SYSTEM_ZLIB),false) ifeq ($(HAS_EMBEDDED_ZLIB), true) EMBED_ZLIB ?= true else DEP_MISSING += zlib EMBED_ZLIB ?= broken endif else EMBED_ZLIB ?= false endif ifeq ($(EMBED_ZLIB),true) ZLIB_DEP = $(LIBDIR)/$(CONFIG)/libz.a ZLIB_MERGE_LIBS = $(LIBDIR)/$(CONFIG)/libz.a ZLIB_MERGE_OBJS = $(LIBZ_OBJS) CPPFLAGS += -Ithird_party/zlib else ifeq ($(HAS_PKG_CONFIG),true) CPPFLAGS += $(shell $(PKG_CONFIG) --cflags zlib) LDFLAGS += $(shell $(PKG_CONFIG) --libs-only-L zlib) LIBS += $(patsubst -l%,%,$(shell $(PKG_CONFIG) --libs-only-l zlib)) PC_REQUIRES_GRPC += zlib else PC_LIBS_GRPC += -lz LIBS += z endif endif CARES_PKG_CONFIG = false ifeq ($(HAS_SYSTEM_CARES),false) ifeq ($(HAS_EMBEDDED_CARES), true) EMBED_CARES ?= true else DEP_MISSING += cares EMBED_CARES ?= broken endif else EMBED_CARES ?= false endif ADDRESS_SORTING_DEP = $(LIBDIR)/$(CONFIG)/libaddress_sorting.a ADDRESS_SORTING_MERGE_OBJS = $(LIBADDRESS_SORTING_OBJS) ADDRESS_SORTING_MERGE_LIBS = $(LIBDIR)/$(CONFIG)/libaddress_sorting.a CPPFLAGS := -Ithird_party/address_sorting/include $(CPPFLAGS) GRPC_ABSEIL_DEP = $(LIBDIR)/$(CONFIG)/libgrpc_abseil.a GRPC_ABSEIL_MERGE_LIBS = $(LIBDIR)/$(CONFIG)/libgrpc_abseil.a UPB_DEP = $(LIBDIR)/$(CONFIG)/libupb.a UPB_MERGE_OBJS = $(LIBUPB_OBJS) UPB_MERGE_LIBS = $(LIBDIR)/$(CONFIG)/libupb.a ifeq ($(EMBED_CARES),true) CARES_DEP = $(LIBDIR)/$(CONFIG)/libares.a CARES_MERGE_OBJS = $(LIBARES_OBJS) CARES_MERGE_LIBS = $(LIBDIR)/$(CONFIG)/libares.a CPPFLAGS := -Ithird_party/cares -Ithird_party/cares/cares $(CPPFLAGS) else ifeq ($(HAS_PKG_CONFIG),true) PC_REQUIRES_GRPC += libcares CPPFLAGS += $(shell $(PKG_CONFIG) --cflags libcares) LDFLAGS += $(shell $(PKG_CONFIG) --libs-only-L libcares) LIBS += $(patsubst -l%,%,$(shell $(PKG_CONFIG) --libs-only-l libcares)) else PC_LIBS_GRPC += -lcares LIBS += cares endif endif OPENSSL_PKG_CONFIG = false PC_REQUIRES_SECURE = PC_LIBS_SECURE = ifeq ($(HAS_SYSTEM_OPENSSL_ALPN),true) EMBED_OPENSSL ?= false NO_SECURE ?= false else # HAS_SYSTEM_OPENSSL_ALPN=false ifneq ($(HAS_EMBEDDED_OPENSSL_ALPN),false) EMBED_OPENSSL ?= $(HAS_EMBEDDED_OPENSSL_ALPN) NO_SECURE ?= false else # HAS_EMBEDDED_OPENSSL_ALPN=false NO_SECURE ?= true endif # HAS_EMBEDDED_OPENSSL_ALPN endif # HAS_SYSTEM_OPENSSL_ALPN OPENSSL_DEP := OPENSSL_MERGE_LIBS := ifeq ($(NO_SECURE),false) ifeq ($(EMBED_OPENSSL),true) OPENSSL_DEP += $(LIBDIR)/$(CONFIG)/libboringssl.a OPENSSL_MERGE_LIBS += $(LIBDIR)/$(CONFIG)/libboringssl.a OPENSSL_MERGE_OBJS += $(LIBBORINGSSL_OBJS) # need to prefix these to ensure overriding system libraries CPPFLAGS := -Ithird_party/boringssl-with-bazel/src/include $(CPPFLAGS) else ifneq ($(EMBED_OPENSSL),false) OPENSSL_DEP += $(EMBED_OPENSSL)/libssl.a $(EMBED_OPENSSL)/libcrypto.a OPENSSL_MERGE_LIBS += $(EMBED_OPENSSL)/libssl.a $(EMBED_OPENSSL)/libcrypto.a OPENSSL_MERGE_OBJS += $(wildcard $(EMBED_OPENSSL)/grpc_obj/*.o) # need to prefix these to ensure overriding system libraries CPPFLAGS := -I$(EMBED_OPENSSL)/include $(CPPFLAGS) else # EMBED_OPENSSL=false ifeq ($(HAS_PKG_CONFIG),true) OPENSSL_PKG_CONFIG = true PC_REQUIRES_SECURE = openssl CPPFLAGS := $(shell $(PKG_CONFIG) --cflags openssl) $(CPPFLAGS) LDFLAGS_OPENSSL_PKG_CONFIG = $(shell $(PKG_CONFIG) --libs-only-L openssl) ifeq ($(SYSTEM),Linux) ifneq ($(LDFLAGS_OPENSSL_PKG_CONFIG),) LDFLAGS_OPENSSL_PKG_CONFIG += $(shell $(PKG_CONFIG) --libs-only-L openssl | sed s/L/Wl,-rpath,/) endif # LDFLAGS_OPENSSL_PKG_CONFIG='' endif # System=Linux LDFLAGS := $(LDFLAGS_OPENSSL_PKG_CONFIG) $(LDFLAGS) else # HAS_PKG_CONFIG=false LIBS_SECURE = $(OPENSSL_LIBS) endif # HAS_PKG_CONFIG ifeq ($(DISABLE_ALPN),true) CPPFLAGS += -DTSI_OPENSSL_ALPN_SUPPORT=0 LIBS_SECURE = $(OPENSSL_LIBS) endif # DISABLE_ALPN PC_LIBS_SECURE = $(addprefix -l, $(LIBS_SECURE)) endif # EMBED_OPENSSL endif # NO_SECURE ifeq ($(OPENSSL_PKG_CONFIG),true) LDLIBS_SECURE += $(shell $(PKG_CONFIG) --libs-only-l openssl) else LDLIBS_SECURE += $(addprefix -l, $(LIBS_SECURE)) endif # gpr .pc file PC_NAME = gpr PC_DESCRIPTION = gRPC platform support library PC_CFLAGS = PC_REQUIRES = $(PC_REQUIRES_GPR) PC_LIBS_PRIVATE = $(PC_LIBS_GPR) PC_LIB = -lgpr GPR_PC_FILE := $(CORE_PC_TEMPLATE) # grpc .pc file PC_NAME = gRPC PC_DESCRIPTION = high performance general RPC framework PC_CFLAGS = PC_REQUIRES = gpr $(PC_REQUIRES_GRPC) $(PC_REQUIRES_SECURE) PC_LIBS_PRIVATE = $(PC_LIBS_GRPC) $(PC_LIBS_SECURE) PC_LIB = -lgrpc GRPC_PC_FILE := $(CORE_PC_TEMPLATE) # grpc_unsecure .pc file PC_NAME = gRPC unsecure PC_DESCRIPTION = high performance general RPC framework without SSL PC_CFLAGS = PC_REQUIRES = gpr $(PC_REQUIRES_GRPC) PC_LIBS_PRIVATE = $(PC_LIBS_GRPC) PC_LIB = -lgrpc_unsecure GRPC_UNSECURE_PC_FILE := $(CORE_PC_TEMPLATE) PROTOBUF_PKG_CONFIG = false PC_REQUIRES_GRPCXX = PC_LIBS_GRPCXX = CPPFLAGS := -Ithird_party/googletest/googletest/include -Ithird_party/googletest/googlemock/include $(CPPFLAGS) PROTOC_PLUGINS_ALL = $(BINDIR)/$(CONFIG)/grpc_cpp_plugin $(BINDIR)/$(CONFIG)/grpc_csharp_plugin $(BINDIR)/$(CONFIG)/grpc_node_plugin $(BINDIR)/$(CONFIG)/grpc_objective_c_plugin $(BINDIR)/$(CONFIG)/grpc_php_plugin $(BINDIR)/$(CONFIG)/grpc_python_plugin $(BINDIR)/$(CONFIG)/grpc_ruby_plugin PROTOC_PLUGINS_DIR = $(BINDIR)/$(CONFIG) ifeq ($(HAS_SYSTEM_PROTOBUF),true) ifeq ($(HAS_PKG_CONFIG),true) PROTOBUF_PKG_CONFIG = true PC_REQUIRES_GRPCXX = protobuf CPPFLAGS := $(CPPFLAGS) $(shell $(PKG_CONFIG) --cflags protobuf) LDFLAGS_PROTOBUF_PKG_CONFIG = $(shell $(PKG_CONFIG) --libs-only-L protobuf) ifeq ($(SYSTEM),Linux) ifneq ($(LDFLAGS_PROTOBUF_PKG_CONFIG),) LDFLAGS_PROTOBUF_PKG_CONFIG += $(shell $(PKG_CONFIG) --libs-only-L protobuf | sed s/L/Wl,-rpath,/) endif endif else PC_LIBS_GRPCXX = -lprotobuf endif PROTOC_PLUGINS = $(PROTOC_PLUGINS_ALL) else ifeq ($(HAS_EMBEDDED_PROTOBUF),true) PROTOBUF_DEP = $(LIBDIR)/$(CONFIG)/protobuf/libprotobuf.a CPPFLAGS := -Ithird_party/protobuf/src $(CPPFLAGS) LDFLAGS := -L$(LIBDIR)/$(CONFIG)/protobuf $(LDFLAGS) ifneq ($(USE_BUILT_PROTOC),false) PROTOC = $(BINDIR)/$(CONFIG)/protobuf/protoc PROTOC_PLUGINS = $(PROTOC_PLUGINS_ALL) else PROTOC_PLUGINS = PROTOC_PLUGINS_DIR = $(prefix)/bin endif else NO_PROTOBUF = true endif endif LIBS_PROTOBUF = protobuf LIBS_PROTOC = protoc protobuf HOST_LDLIBS_PROTOC += $(addprefix -l, $(LIBS_PROTOC)) ifeq ($(PROTOBUF_PKG_CONFIG),true) LDLIBS_PROTOBUF += $(shell $(PKG_CONFIG) --libs-only-l protobuf) else LDLIBS_PROTOBUF += $(addprefix -l, $(LIBS_PROTOBUF)) endif # grpc++ .pc file PC_NAME = gRPC++ PC_DESCRIPTION = C++ wrapper for gRPC PC_CFLAGS = PC_REQUIRES = grpc $(PC_REQUIRES_GRPCXX) PC_LIBS_PRIVATE = $(PC_LIBS_GRPCXX) PC_LIB = -lgrpc++ GRPCXX_PC_FILE := $(CPP_PC_TEMPLATE) # grpc++_unsecure .pc file PC_NAME = gRPC++ unsecure PC_DESCRIPTION = C++ wrapper for gRPC without SSL PC_CFLAGS = PC_REQUIRES = grpc_unsecure $(PC_REQUIRES_GRPCXX) PC_LIBS_PRIVATE = $(PC_LIBS_GRPCXX) PC_LIB = -lgrpc++_unsecure GRPCXX_UNSECURE_PC_FILE := $(CPP_PC_TEMPLATE) ifeq ($(MAKECMDGOALS),clean) NO_DEPS = true endif .SECONDARY = %.pb.h %.pb.cc ifeq ($(DEP_MISSING),) all: static shared plugins dep_error: @echo "You shouldn't see this message - all of your dependencies are correct." else all: dep_error git_update stop dep_error: @echo @echo "DEPENDENCY ERROR" @echo @echo "You are missing system dependencies that are essential to build grpc," @echo "and the third_party directory doesn't have them:" @echo @echo " $(DEP_MISSING)" @echo @echo "Installing the development packages for your system will solve" @echo "this issue. Please consult INSTALL to get more information." @echo @echo "If you need information about why these tests failed, run:" @echo @echo " make run_dep_checks" @echo endif git_update: ifeq ($(IS_GIT_FOLDER),true) @echo "Additionally, since you are in a git clone, you can download the" @echo "missing dependencies in third_party by running the following command:" @echo @echo " git submodule update --init" @echo endif openssl_dep_error: openssl_dep_message git_update stop protobuf_dep_error: protobuf_dep_message git_update stop protoc_dep_error: protoc_dep_message git_update stop openssl_dep_message: @echo @echo "DEPENDENCY ERROR" @echo @echo "The target you are trying to run requires an OpenSSL implementation." @echo "Your system doesn't have one, and either the third_party directory" @echo "doesn't have it, or your compiler can't build BoringSSL." @echo @echo "Please consult INSTALL to get more information." @echo @echo "If you need information about why these tests failed, run:" @echo @echo " make run_dep_checks" @echo protobuf_dep_message: @echo @echo "DEPENDENCY ERROR" @echo @echo "The target you are trying to run requires protobuf 3.5.0+" @echo "Your system doesn't have it, and neither does the third_party directory." @echo @echo "Please consult INSTALL to get more information." @echo @echo "If you need information about why these tests failed, run:" @echo @echo " make run_dep_checks" @echo protoc_dep_message: @echo @echo "DEPENDENCY ERROR" @echo @echo "The target you are trying to run requires protobuf-compiler 3.5.0+" @echo "Your system doesn't have it, and neither does the third_party directory." @echo @echo "Please consult INSTALL to get more information." @echo @echo "If you need information about why these tests failed, run:" @echo @echo " make run_dep_checks" @echo systemtap_dep_error: @echo @echo "DEPENDENCY ERROR" @echo @echo "Under the '$(CONFIG)' configutation, the target you are trying " @echo "to build requires systemtap 2.7+ (on Linux) or dtrace (on other " @echo "platforms such as Solaris and *BSD). " @echo @echo "Please consult INSTALL to get more information." @echo stop: @false check_epollexclusive: $(BINDIR)/$(CONFIG)/check_epollexclusive gen_hpack_tables: $(BINDIR)/$(CONFIG)/gen_hpack_tables gen_legal_metadata_characters: $(BINDIR)/$(CONFIG)/gen_legal_metadata_characters gen_percent_encoding_tables: $(BINDIR)/$(CONFIG)/gen_percent_encoding_tables algorithm_test: $(BINDIR)/$(CONFIG)/algorithm_test alloc_test: $(BINDIR)/$(CONFIG)/alloc_test alpn_test: $(BINDIR)/$(CONFIG)/alpn_test alts_counter_test: $(BINDIR)/$(CONFIG)/alts_counter_test alts_crypt_test: $(BINDIR)/$(CONFIG)/alts_crypt_test alts_crypter_test: $(BINDIR)/$(CONFIG)/alts_crypter_test alts_frame_protector_test: $(BINDIR)/$(CONFIG)/alts_frame_protector_test alts_grpc_record_protocol_test: $(BINDIR)/$(CONFIG)/alts_grpc_record_protocol_test alts_handshaker_client_test: $(BINDIR)/$(CONFIG)/alts_handshaker_client_test alts_iovec_record_protocol_test: $(BINDIR)/$(CONFIG)/alts_iovec_record_protocol_test alts_security_connector_test: $(BINDIR)/$(CONFIG)/alts_security_connector_test alts_tsi_handshaker_test: $(BINDIR)/$(CONFIG)/alts_tsi_handshaker_test alts_tsi_utils_test: $(BINDIR)/$(CONFIG)/alts_tsi_utils_test alts_zero_copy_grpc_protector_test: $(BINDIR)/$(CONFIG)/alts_zero_copy_grpc_protector_test arena_test: $(BINDIR)/$(CONFIG)/arena_test auth_context_test: $(BINDIR)/$(CONFIG)/auth_context_test avl_test: $(BINDIR)/$(CONFIG)/avl_test b64_test: $(BINDIR)/$(CONFIG)/b64_test bad_server_response_test: $(BINDIR)/$(CONFIG)/bad_server_response_test bad_ssl_alpn_test: $(BINDIR)/$(CONFIG)/bad_ssl_alpn_test bad_ssl_cert_test: $(BINDIR)/$(CONFIG)/bad_ssl_cert_test bin_decoder_test: $(BINDIR)/$(CONFIG)/bin_decoder_test bin_encoder_test: $(BINDIR)/$(CONFIG)/bin_encoder_test buffer_list_test: $(BINDIR)/$(CONFIG)/buffer_list_test channel_args_test: $(BINDIR)/$(CONFIG)/channel_args_test channel_create_test: $(BINDIR)/$(CONFIG)/channel_create_test channel_stack_builder_test: $(BINDIR)/$(CONFIG)/channel_stack_builder_test channel_stack_test: $(BINDIR)/$(CONFIG)/channel_stack_test check_gcp_environment_linux_test: $(BINDIR)/$(CONFIG)/check_gcp_environment_linux_test check_gcp_environment_windows_test: $(BINDIR)/$(CONFIG)/check_gcp_environment_windows_test client_ssl_test: $(BINDIR)/$(CONFIG)/client_ssl_test cmdline_test: $(BINDIR)/$(CONFIG)/cmdline_test combiner_test: $(BINDIR)/$(CONFIG)/combiner_test completion_queue_threading_test: $(BINDIR)/$(CONFIG)/completion_queue_threading_test compression_test: $(BINDIR)/$(CONFIG)/compression_test concurrent_connectivity_test: $(BINDIR)/$(CONFIG)/concurrent_connectivity_test connection_refused_test: $(BINDIR)/$(CONFIG)/connection_refused_test cpu_test: $(BINDIR)/$(CONFIG)/cpu_test dns_resolver_connectivity_using_ares_resolver_test: $(BINDIR)/$(CONFIG)/dns_resolver_connectivity_using_ares_resolver_test dns_resolver_connectivity_using_native_resolver_test: $(BINDIR)/$(CONFIG)/dns_resolver_connectivity_using_native_resolver_test dns_resolver_cooldown_test: $(BINDIR)/$(CONFIG)/dns_resolver_cooldown_test dns_resolver_test: $(BINDIR)/$(CONFIG)/dns_resolver_test dualstack_socket_test: $(BINDIR)/$(CONFIG)/dualstack_socket_test endpoint_pair_test: $(BINDIR)/$(CONFIG)/endpoint_pair_test env_test: $(BINDIR)/$(CONFIG)/env_test error_test: $(BINDIR)/$(CONFIG)/error_test ev_epollex_linux_test: $(BINDIR)/$(CONFIG)/ev_epollex_linux_test fake_resolver_test: $(BINDIR)/$(CONFIG)/fake_resolver_test fake_transport_security_test: $(BINDIR)/$(CONFIG)/fake_transport_security_test fd_conservation_posix_test: $(BINDIR)/$(CONFIG)/fd_conservation_posix_test fd_posix_test: $(BINDIR)/$(CONFIG)/fd_posix_test fling_stream_test: $(BINDIR)/$(CONFIG)/fling_stream_test fling_test: $(BINDIR)/$(CONFIG)/fling_test fork_test: $(BINDIR)/$(CONFIG)/fork_test format_request_test: $(BINDIR)/$(CONFIG)/format_request_test frame_handler_test: $(BINDIR)/$(CONFIG)/frame_handler_test goaway_server_test: $(BINDIR)/$(CONFIG)/goaway_server_test grpc_alts_credentials_options_test: $(BINDIR)/$(CONFIG)/grpc_alts_credentials_options_test grpc_byte_buffer_reader_test: $(BINDIR)/$(CONFIG)/grpc_byte_buffer_reader_test grpc_completion_queue_test: $(BINDIR)/$(CONFIG)/grpc_completion_queue_test grpc_ipv6_loopback_available_test: $(BINDIR)/$(CONFIG)/grpc_ipv6_loopback_available_test handshake_server_with_readahead_handshaker_test: $(BINDIR)/$(CONFIG)/handshake_server_with_readahead_handshaker_test handshake_verify_peer_options_test: $(BINDIR)/$(CONFIG)/handshake_verify_peer_options_test histogram_test: $(BINDIR)/$(CONFIG)/histogram_test host_port_test: $(BINDIR)/$(CONFIG)/host_port_test hpack_encoder_test: $(BINDIR)/$(CONFIG)/hpack_encoder_test hpack_parser_test: $(BINDIR)/$(CONFIG)/hpack_parser_test hpack_table_test: $(BINDIR)/$(CONFIG)/hpack_table_test httpcli_test: $(BINDIR)/$(CONFIG)/httpcli_test httpscli_test: $(BINDIR)/$(CONFIG)/httpscli_test init_test: $(BINDIR)/$(CONFIG)/init_test inproc_callback_test: $(BINDIR)/$(CONFIG)/inproc_callback_test invalid_call_argument_test: $(BINDIR)/$(CONFIG)/invalid_call_argument_test json_token_test: $(BINDIR)/$(CONFIG)/json_token_test jwt_verifier_test: $(BINDIR)/$(CONFIG)/jwt_verifier_test lame_client_test: $(BINDIR)/$(CONFIG)/lame_client_test load_file_test: $(BINDIR)/$(CONFIG)/load_file_test log_test: $(BINDIR)/$(CONFIG)/log_test manual_constructor_test: $(BINDIR)/$(CONFIG)/manual_constructor_test message_compress_test: $(BINDIR)/$(CONFIG)/message_compress_test metadata_test: $(BINDIR)/$(CONFIG)/metadata_test minimal_stack_is_minimal_test: $(BINDIR)/$(CONFIG)/minimal_stack_is_minimal_test mpmcqueue_test: $(BINDIR)/$(CONFIG)/mpmcqueue_test mpscq_test: $(BINDIR)/$(CONFIG)/mpscq_test multiple_server_queues_test: $(BINDIR)/$(CONFIG)/multiple_server_queues_test murmur_hash_test: $(BINDIR)/$(CONFIG)/murmur_hash_test no_server_test: $(BINDIR)/$(CONFIG)/no_server_test num_external_connectivity_watchers_test: $(BINDIR)/$(CONFIG)/num_external_connectivity_watchers_test parse_address_test: $(BINDIR)/$(CONFIG)/parse_address_test parse_address_with_named_scope_id_test: $(BINDIR)/$(CONFIG)/parse_address_with_named_scope_id_test parser_test: $(BINDIR)/$(CONFIG)/parser_test percent_encoding_test: $(BINDIR)/$(CONFIG)/percent_encoding_test public_headers_must_be_c89: $(BINDIR)/$(CONFIG)/public_headers_must_be_c89 resolve_address_using_ares_resolver_posix_test: $(BINDIR)/$(CONFIG)/resolve_address_using_ares_resolver_posix_test resolve_address_using_ares_resolver_test: $(BINDIR)/$(CONFIG)/resolve_address_using_ares_resolver_test resolve_address_using_native_resolver_posix_test: $(BINDIR)/$(CONFIG)/resolve_address_using_native_resolver_posix_test resolve_address_using_native_resolver_test: $(BINDIR)/$(CONFIG)/resolve_address_using_native_resolver_test resource_quota_test: $(BINDIR)/$(CONFIG)/resource_quota_test secure_channel_create_test: $(BINDIR)/$(CONFIG)/secure_channel_create_test secure_endpoint_test: $(BINDIR)/$(CONFIG)/secure_endpoint_test security_connector_test: $(BINDIR)/$(CONFIG)/security_connector_test sequential_connectivity_test: $(BINDIR)/$(CONFIG)/sequential_connectivity_test server_chttp2_test: $(BINDIR)/$(CONFIG)/server_chttp2_test server_ssl_test: $(BINDIR)/$(CONFIG)/server_ssl_test server_test: $(BINDIR)/$(CONFIG)/server_test slice_buffer_test: $(BINDIR)/$(CONFIG)/slice_buffer_test slice_string_helpers_test: $(BINDIR)/$(CONFIG)/slice_string_helpers_test sockaddr_resolver_test: $(BINDIR)/$(CONFIG)/sockaddr_resolver_test sockaddr_utils_test: $(BINDIR)/$(CONFIG)/sockaddr_utils_test socket_utils_test: $(BINDIR)/$(CONFIG)/socket_utils_test spinlock_test: $(BINDIR)/$(CONFIG)/spinlock_test ssl_credentials_test: $(BINDIR)/$(CONFIG)/ssl_credentials_test ssl_transport_security_test: $(BINDIR)/$(CONFIG)/ssl_transport_security_test status_conversion_test: $(BINDIR)/$(CONFIG)/status_conversion_test stream_compression_test: $(BINDIR)/$(CONFIG)/stream_compression_test stream_map_test: $(BINDIR)/$(CONFIG)/stream_map_test stream_owned_slice_test: $(BINDIR)/$(CONFIG)/stream_owned_slice_test string_test: $(BINDIR)/$(CONFIG)/string_test sync_test: $(BINDIR)/$(CONFIG)/sync_test tcp_client_posix_test: $(BINDIR)/$(CONFIG)/tcp_client_posix_test tcp_posix_test: $(BINDIR)/$(CONFIG)/tcp_posix_test tcp_server_posix_test: $(BINDIR)/$(CONFIG)/tcp_server_posix_test test_core_gpr_time_test: $(BINDIR)/$(CONFIG)/test_core_gpr_time_test test_core_security_credentials_test: $(BINDIR)/$(CONFIG)/test_core_security_credentials_test test_core_slice_slice_test: $(BINDIR)/$(CONFIG)/test_core_slice_slice_test thd_test: $(BINDIR)/$(CONFIG)/thd_test threadpool_test: $(BINDIR)/$(CONFIG)/threadpool_test time_averaged_stats_test: $(BINDIR)/$(CONFIG)/time_averaged_stats_test timeout_encoding_test: $(BINDIR)/$(CONFIG)/timeout_encoding_test timer_heap_test: $(BINDIR)/$(CONFIG)/timer_heap_test timer_list_test: $(BINDIR)/$(CONFIG)/timer_list_test tls_test: $(BINDIR)/$(CONFIG)/tls_test transport_security_common_api_test: $(BINDIR)/$(CONFIG)/transport_security_common_api_test transport_security_test: $(BINDIR)/$(CONFIG)/transport_security_test udp_server_test: $(BINDIR)/$(CONFIG)/udp_server_test uri_parser_test: $(BINDIR)/$(CONFIG)/uri_parser_test useful_test: $(BINDIR)/$(CONFIG)/useful_test varint_test: $(BINDIR)/$(CONFIG)/varint_test address_sorting_test: $(BINDIR)/$(CONFIG)/address_sorting_test address_sorting_test_unsecure: $(BINDIR)/$(CONFIG)/address_sorting_test_unsecure alarm_test: $(BINDIR)/$(CONFIG)/alarm_test alts_concurrent_connectivity_test: $(BINDIR)/$(CONFIG)/alts_concurrent_connectivity_test alts_credentials_fuzzer: $(BINDIR)/$(CONFIG)/alts_credentials_fuzzer alts_util_test: $(BINDIR)/$(CONFIG)/alts_util_test async_end2end_test: $(BINDIR)/$(CONFIG)/async_end2end_test auth_property_iterator_test: $(BINDIR)/$(CONFIG)/auth_property_iterator_test backoff_test: $(BINDIR)/$(CONFIG)/backoff_test bad_streaming_id_bad_client_test: $(BINDIR)/$(CONFIG)/bad_streaming_id_bad_client_test badreq_bad_client_test: $(BINDIR)/$(CONFIG)/badreq_bad_client_test bdp_estimator_test: $(BINDIR)/$(CONFIG)/bdp_estimator_test bm_alarm: $(BINDIR)/$(CONFIG)/bm_alarm bm_arena: $(BINDIR)/$(CONFIG)/bm_arena bm_byte_buffer: $(BINDIR)/$(CONFIG)/bm_byte_buffer bm_call_create: $(BINDIR)/$(CONFIG)/bm_call_create bm_callback_streaming_ping_pong: $(BINDIR)/$(CONFIG)/bm_callback_streaming_ping_pong bm_callback_unary_ping_pong: $(BINDIR)/$(CONFIG)/bm_callback_unary_ping_pong bm_channel: $(BINDIR)/$(CONFIG)/bm_channel bm_chttp2_hpack: $(BINDIR)/$(CONFIG)/bm_chttp2_hpack bm_chttp2_transport: $(BINDIR)/$(CONFIG)/bm_chttp2_transport bm_closure: $(BINDIR)/$(CONFIG)/bm_closure bm_cq: $(BINDIR)/$(CONFIG)/bm_cq bm_cq_multiple_threads: $(BINDIR)/$(CONFIG)/bm_cq_multiple_threads bm_error: $(BINDIR)/$(CONFIG)/bm_error bm_fullstack_streaming_ping_pong: $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_ping_pong bm_fullstack_streaming_pump: $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_pump bm_fullstack_trickle: $(BINDIR)/$(CONFIG)/bm_fullstack_trickle bm_fullstack_unary_ping_pong: $(BINDIR)/$(CONFIG)/bm_fullstack_unary_ping_pong bm_metadata: $(BINDIR)/$(CONFIG)/bm_metadata bm_pollset: $(BINDIR)/$(CONFIG)/bm_pollset bm_threadpool: $(BINDIR)/$(CONFIG)/bm_threadpool bm_timer: $(BINDIR)/$(CONFIG)/bm_timer byte_buffer_test: $(BINDIR)/$(CONFIG)/byte_buffer_test byte_stream_test: $(BINDIR)/$(CONFIG)/byte_stream_test cancel_ares_query_test: $(BINDIR)/$(CONFIG)/cancel_ares_query_test cfstream_test: $(BINDIR)/$(CONFIG)/cfstream_test channel_arguments_test: $(BINDIR)/$(CONFIG)/channel_arguments_test channel_filter_test: $(BINDIR)/$(CONFIG)/channel_filter_test channel_trace_test: $(BINDIR)/$(CONFIG)/channel_trace_test channelz_registry_test: $(BINDIR)/$(CONFIG)/channelz_registry_test channelz_service_test: $(BINDIR)/$(CONFIG)/channelz_service_test channelz_test: $(BINDIR)/$(CONFIG)/channelz_test cli_call_test: $(BINDIR)/$(CONFIG)/cli_call_test client_callback_end2end_test: $(BINDIR)/$(CONFIG)/client_callback_end2end_test client_channel_stress_test: $(BINDIR)/$(CONFIG)/client_channel_stress_test client_fuzzer: $(BINDIR)/$(CONFIG)/client_fuzzer client_interceptors_end2end_test: $(BINDIR)/$(CONFIG)/client_interceptors_end2end_test client_lb_end2end_test: $(BINDIR)/$(CONFIG)/client_lb_end2end_test codegen_test_full: $(BINDIR)/$(CONFIG)/codegen_test_full codegen_test_minimal: $(BINDIR)/$(CONFIG)/codegen_test_minimal connection_prefix_bad_client_test: $(BINDIR)/$(CONFIG)/connection_prefix_bad_client_test connectivity_state_test: $(BINDIR)/$(CONFIG)/connectivity_state_test context_list_test: $(BINDIR)/$(CONFIG)/context_list_test delegating_channel_test: $(BINDIR)/$(CONFIG)/delegating_channel_test destroy_grpclb_channel_with_active_connect_stress_test: $(BINDIR)/$(CONFIG)/destroy_grpclb_channel_with_active_connect_stress_test duplicate_header_bad_client_test: $(BINDIR)/$(CONFIG)/duplicate_header_bad_client_test end2end_test: $(BINDIR)/$(CONFIG)/end2end_test error_details_test: $(BINDIR)/$(CONFIG)/error_details_test eventmanager_libuv_test: $(BINDIR)/$(CONFIG)/eventmanager_libuv_test exception_test: $(BINDIR)/$(CONFIG)/exception_test filter_end2end_test: $(BINDIR)/$(CONFIG)/filter_end2end_test flaky_network_test: $(BINDIR)/$(CONFIG)/flaky_network_test generic_end2end_test: $(BINDIR)/$(CONFIG)/generic_end2end_test global_config_env_test: $(BINDIR)/$(CONFIG)/global_config_env_test global_config_test: $(BINDIR)/$(CONFIG)/global_config_test grpc_cli: $(BINDIR)/$(CONFIG)/grpc_cli grpc_cpp_plugin: $(BINDIR)/$(CONFIG)/grpc_cpp_plugin grpc_csharp_plugin: $(BINDIR)/$(CONFIG)/grpc_csharp_plugin grpc_node_plugin: $(BINDIR)/$(CONFIG)/grpc_node_plugin grpc_objective_c_plugin: $(BINDIR)/$(CONFIG)/grpc_objective_c_plugin grpc_php_plugin: $(BINDIR)/$(CONFIG)/grpc_php_plugin grpc_python_plugin: $(BINDIR)/$(CONFIG)/grpc_python_plugin grpc_ruby_plugin: $(BINDIR)/$(CONFIG)/grpc_ruby_plugin grpc_tls_credentials_options_test: $(BINDIR)/$(CONFIG)/grpc_tls_credentials_options_test grpc_tool_test: $(BINDIR)/$(CONFIG)/grpc_tool_test grpclb_api_test: $(BINDIR)/$(CONFIG)/grpclb_api_test grpclb_end2end_test: $(BINDIR)/$(CONFIG)/grpclb_end2end_test h2_ssl_session_reuse_test: $(BINDIR)/$(CONFIG)/h2_ssl_session_reuse_test head_of_line_blocking_bad_client_test: $(BINDIR)/$(CONFIG)/head_of_line_blocking_bad_client_test headers_bad_client_test: $(BINDIR)/$(CONFIG)/headers_bad_client_test health_service_end2end_test: $(BINDIR)/$(CONFIG)/health_service_end2end_test hpack_parser_fuzzer_test: $(BINDIR)/$(CONFIG)/hpack_parser_fuzzer_test http2_client: $(BINDIR)/$(CONFIG)/http2_client http_request_fuzzer_test: $(BINDIR)/$(CONFIG)/http_request_fuzzer_test http_response_fuzzer_test: $(BINDIR)/$(CONFIG)/http_response_fuzzer_test hybrid_end2end_test: $(BINDIR)/$(CONFIG)/hybrid_end2end_test initial_settings_frame_bad_client_test: $(BINDIR)/$(CONFIG)/initial_settings_frame_bad_client_test interop_client: $(BINDIR)/$(CONFIG)/interop_client interop_server: $(BINDIR)/$(CONFIG)/interop_server interop_test: $(BINDIR)/$(CONFIG)/interop_test json_fuzzer_test: $(BINDIR)/$(CONFIG)/json_fuzzer_test json_test: $(BINDIR)/$(CONFIG)/json_test large_metadata_bad_client_test: $(BINDIR)/$(CONFIG)/large_metadata_bad_client_test lb_get_cpu_stats_test: $(BINDIR)/$(CONFIG)/lb_get_cpu_stats_test lb_load_data_store_test: $(BINDIR)/$(CONFIG)/lb_load_data_store_test linux_system_roots_test: $(BINDIR)/$(CONFIG)/linux_system_roots_test message_allocator_end2end_test: $(BINDIR)/$(CONFIG)/message_allocator_end2end_test mock_test: $(BINDIR)/$(CONFIG)/mock_test nanopb_fuzzer_response_test: $(BINDIR)/$(CONFIG)/nanopb_fuzzer_response_test nanopb_fuzzer_serverlist_test: $(BINDIR)/$(CONFIG)/nanopb_fuzzer_serverlist_test nonblocking_test: $(BINDIR)/$(CONFIG)/nonblocking_test noop-benchmark: $(BINDIR)/$(CONFIG)/noop-benchmark orphanable_test: $(BINDIR)/$(CONFIG)/orphanable_test out_of_bounds_bad_client_test: $(BINDIR)/$(CONFIG)/out_of_bounds_bad_client_test percent_decode_fuzzer: $(BINDIR)/$(CONFIG)/percent_decode_fuzzer percent_encode_fuzzer: $(BINDIR)/$(CONFIG)/percent_encode_fuzzer pid_controller_test: $(BINDIR)/$(CONFIG)/pid_controller_test port_sharing_end2end_test: $(BINDIR)/$(CONFIG)/port_sharing_end2end_test proto_server_reflection_test: $(BINDIR)/$(CONFIG)/proto_server_reflection_test proto_utils_test: $(BINDIR)/$(CONFIG)/proto_utils_test qps_json_driver: $(BINDIR)/$(CONFIG)/qps_json_driver qps_worker: $(BINDIR)/$(CONFIG)/qps_worker raw_end2end_test: $(BINDIR)/$(CONFIG)/raw_end2end_test ref_counted_ptr_test: $(BINDIR)/$(CONFIG)/ref_counted_ptr_test ref_counted_test: $(BINDIR)/$(CONFIG)/ref_counted_test retry_throttle_test: $(BINDIR)/$(CONFIG)/retry_throttle_test secure_auth_context_test: $(BINDIR)/$(CONFIG)/secure_auth_context_test server_builder_plugin_test: $(BINDIR)/$(CONFIG)/server_builder_plugin_test server_builder_test: $(BINDIR)/$(CONFIG)/server_builder_test server_builder_with_socket_mutator_test: $(BINDIR)/$(CONFIG)/server_builder_with_socket_mutator_test server_context_test_spouse_test: $(BINDIR)/$(CONFIG)/server_context_test_spouse_test server_early_return_test: $(BINDIR)/$(CONFIG)/server_early_return_test server_fuzzer: $(BINDIR)/$(CONFIG)/server_fuzzer server_interceptors_end2end_test: $(BINDIR)/$(CONFIG)/server_interceptors_end2end_test server_registered_method_bad_client_test: $(BINDIR)/$(CONFIG)/server_registered_method_bad_client_test server_request_call_test: $(BINDIR)/$(CONFIG)/server_request_call_test service_config_end2end_test: $(BINDIR)/$(CONFIG)/service_config_end2end_test service_config_test: $(BINDIR)/$(CONFIG)/service_config_test settings_timeout_test: $(BINDIR)/$(CONFIG)/settings_timeout_test shutdown_test: $(BINDIR)/$(CONFIG)/shutdown_test simple_request_bad_client_test: $(BINDIR)/$(CONFIG)/simple_request_bad_client_test slice_hash_table_test: $(BINDIR)/$(CONFIG)/slice_hash_table_test slice_weak_hash_table_test: $(BINDIR)/$(CONFIG)/slice_weak_hash_table_test ssl_server_fuzzer: $(BINDIR)/$(CONFIG)/ssl_server_fuzzer static_metadata_test: $(BINDIR)/$(CONFIG)/static_metadata_test stats_test: $(BINDIR)/$(CONFIG)/stats_test status_metadata_test: $(BINDIR)/$(CONFIG)/status_metadata_test status_util_test: $(BINDIR)/$(CONFIG)/status_util_test streaming_throughput_test: $(BINDIR)/$(CONFIG)/streaming_throughput_test string_ref_test: $(BINDIR)/$(CONFIG)/string_ref_test test_cpp_client_credentials_test: $(BINDIR)/$(CONFIG)/test_cpp_client_credentials_test test_cpp_util_slice_test: $(BINDIR)/$(CONFIG)/test_cpp_util_slice_test test_cpp_util_time_test: $(BINDIR)/$(CONFIG)/test_cpp_util_time_test thread_manager_test: $(BINDIR)/$(CONFIG)/thread_manager_test thread_stress_test: $(BINDIR)/$(CONFIG)/thread_stress_test time_jump_test: $(BINDIR)/$(CONFIG)/time_jump_test timer_test: $(BINDIR)/$(CONFIG)/timer_test tls_security_connector_test: $(BINDIR)/$(CONFIG)/tls_security_connector_test unknown_frame_bad_client_test: $(BINDIR)/$(CONFIG)/unknown_frame_bad_client_test uri_fuzzer_test: $(BINDIR)/$(CONFIG)/uri_fuzzer_test window_overflow_bad_client_test: $(BINDIR)/$(CONFIG)/window_overflow_bad_client_test work_serializer_test: $(BINDIR)/$(CONFIG)/work_serializer_test writes_per_rpc_test: $(BINDIR)/$(CONFIG)/writes_per_rpc_test xds_bootstrap_test: $(BINDIR)/$(CONFIG)/xds_bootstrap_test xds_end2end_test: $(BINDIR)/$(CONFIG)/xds_end2end_test xds_interop_client: $(BINDIR)/$(CONFIG)/xds_interop_client xds_interop_server: $(BINDIR)/$(CONFIG)/xds_interop_server boringssl_ssl_test: $(BINDIR)/$(CONFIG)/boringssl_ssl_test boringssl_crypto_test: $(BINDIR)/$(CONFIG)/boringssl_crypto_test alts_credentials_fuzzer_one_entry: $(BINDIR)/$(CONFIG)/alts_credentials_fuzzer_one_entry client_fuzzer_one_entry: $(BINDIR)/$(CONFIG)/client_fuzzer_one_entry hpack_parser_fuzzer_test_one_entry: $(BINDIR)/$(CONFIG)/hpack_parser_fuzzer_test_one_entry http_request_fuzzer_test_one_entry: $(BINDIR)/$(CONFIG)/http_request_fuzzer_test_one_entry http_response_fuzzer_test_one_entry: $(BINDIR)/$(CONFIG)/http_response_fuzzer_test_one_entry json_fuzzer_test_one_entry: $(BINDIR)/$(CONFIG)/json_fuzzer_test_one_entry nanopb_fuzzer_response_test_one_entry: $(BINDIR)/$(CONFIG)/nanopb_fuzzer_response_test_one_entry nanopb_fuzzer_serverlist_test_one_entry: $(BINDIR)/$(CONFIG)/nanopb_fuzzer_serverlist_test_one_entry percent_decode_fuzzer_one_entry: $(BINDIR)/$(CONFIG)/percent_decode_fuzzer_one_entry percent_encode_fuzzer_one_entry: $(BINDIR)/$(CONFIG)/percent_encode_fuzzer_one_entry server_fuzzer_one_entry: $(BINDIR)/$(CONFIG)/server_fuzzer_one_entry ssl_server_fuzzer_one_entry: $(BINDIR)/$(CONFIG)/ssl_server_fuzzer_one_entry uri_fuzzer_test_one_entry: $(BINDIR)/$(CONFIG)/uri_fuzzer_test_one_entry run_dep_checks: $(OPENSSL_ALPN_CHECK_CMD) || true $(ZLIB_CHECK_CMD) || true $(PERFTOOLS_CHECK_CMD) || true $(PROTOBUF_CHECK_CMD) || true $(PROTOC_CHECK_VERSION_CMD) || true $(CARES_CHECK_CMD) || true third_party/protobuf/configure: $(E) "[AUTOGEN] Preparing protobuf" $(Q)(cd third_party/protobuf ; autoreconf -f -i -Wall,no-obsolete) $(LIBDIR)/$(CONFIG)/protobuf/libprotobuf.a: third_party/protobuf/configure $(E) "[MAKE] Building protobuf" $(Q)mkdir -p $(LIBDIR)/$(CONFIG)/protobuf $(Q)(cd third_party/protobuf ; CC="$(CC)" CXX="$(CXX)" LDFLAGS="$(LDFLAGS_$(CONFIG)) -g $(PROTOBUF_LDFLAGS_EXTRA)" CPPFLAGS="$(PIC_CPPFLAGS) $(CPPFLAGS_$(CONFIG)) -g $(PROTOBUF_CPPFLAGS_EXTRA)" ./configure --disable-shared --enable-static $(PROTOBUF_CONFIG_OPTS)) $(Q)$(MAKE) -C third_party/protobuf clean $(Q)$(MAKE) -C third_party/protobuf $(Q)mkdir -p $(BINDIR)/$(CONFIG)/protobuf $(Q)cp third_party/protobuf/src/.libs/libprotoc.a $(LIBDIR)/$(CONFIG)/protobuf $(Q)cp third_party/protobuf/src/.libs/libprotobuf.a $(LIBDIR)/$(CONFIG)/protobuf $(Q)cp third_party/protobuf/src/protoc $(BINDIR)/$(CONFIG)/protobuf static: static_c static_cxx static_c: pc_c pc_c_unsecure cache.mk $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libupb.a static_cxx: pc_cxx pc_cxx_unsecure cache.mk $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_alts.a $(LIBDIR)/$(CONFIG)/libgrpc++_error_details.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpcpp_channelz.a static_csharp: static_c shared: shared_c shared_cxx shared_c: pc_c pc_c_unsecure cache.mk $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)address_sorting$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc_csharp_ext$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)upb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) shared_cxx: pc_cxx pc_cxx_unsecure cache.mk $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_alts$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_error_details$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpcpp_channelz$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) shared_csharp: shared_c grpc_csharp_ext: shared_csharp plugins: $(PROTOC_PLUGINS) privatelibs: privatelibs_c privatelibs_cxx privatelibs_c: $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a $(LIBDIR)/$(CONFIG)/libend2end_tests.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libz.a $(LIBDIR)/$(CONFIG)/libares.a pc_c: $(LIBDIR)/$(CONFIG)/pkgconfig/grpc.pc $(LIBDIR)/$(CONFIG)/pkgconfig/gpr.pc pc_c_unsecure: $(LIBDIR)/$(CONFIG)/pkgconfig/grpc_unsecure.pc $(LIBDIR)/$(CONFIG)/pkgconfig/gpr.pc pc_cxx: $(LIBDIR)/$(CONFIG)/pkgconfig/grpc++.pc pc_cxx_unsecure: $(LIBDIR)/$(CONFIG)/pkgconfig/grpc++_unsecure.pc ifeq ($(EMBED_OPENSSL),true) privatelibs_cxx: $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libbenchmark.a else privatelibs_cxx: $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libbenchmark.a endif buildtests: buildtests_c buildtests_cxx buildtests_c: privatelibs_c \ $(BINDIR)/$(CONFIG)/algorithm_test \ $(BINDIR)/$(CONFIG)/alloc_test \ $(BINDIR)/$(CONFIG)/alpn_test \ $(BINDIR)/$(CONFIG)/alts_counter_test \ $(BINDIR)/$(CONFIG)/alts_crypt_test \ $(BINDIR)/$(CONFIG)/alts_crypter_test \ $(BINDIR)/$(CONFIG)/alts_frame_protector_test \ $(BINDIR)/$(CONFIG)/alts_grpc_record_protocol_test \ $(BINDIR)/$(CONFIG)/alts_handshaker_client_test \ $(BINDIR)/$(CONFIG)/alts_iovec_record_protocol_test \ $(BINDIR)/$(CONFIG)/alts_security_connector_test \ $(BINDIR)/$(CONFIG)/alts_tsi_handshaker_test \ $(BINDIR)/$(CONFIG)/alts_tsi_utils_test \ $(BINDIR)/$(CONFIG)/alts_zero_copy_grpc_protector_test \ $(BINDIR)/$(CONFIG)/arena_test \ $(BINDIR)/$(CONFIG)/auth_context_test \ $(BINDIR)/$(CONFIG)/avl_test \ $(BINDIR)/$(CONFIG)/b64_test \ $(BINDIR)/$(CONFIG)/bad_server_response_test \ $(BINDIR)/$(CONFIG)/bad_ssl_alpn_test \ $(BINDIR)/$(CONFIG)/bad_ssl_cert_test \ $(BINDIR)/$(CONFIG)/bin_decoder_test \ $(BINDIR)/$(CONFIG)/bin_encoder_test \ $(BINDIR)/$(CONFIG)/buffer_list_test \ $(BINDIR)/$(CONFIG)/channel_args_test \ $(BINDIR)/$(CONFIG)/channel_create_test \ $(BINDIR)/$(CONFIG)/channel_stack_builder_test \ $(BINDIR)/$(CONFIG)/channel_stack_test \ $(BINDIR)/$(CONFIG)/check_gcp_environment_linux_test \ $(BINDIR)/$(CONFIG)/check_gcp_environment_windows_test \ $(BINDIR)/$(CONFIG)/client_ssl_test \ $(BINDIR)/$(CONFIG)/cmdline_test \ $(BINDIR)/$(CONFIG)/combiner_test \ $(BINDIR)/$(CONFIG)/completion_queue_threading_test \ $(BINDIR)/$(CONFIG)/compression_test \ $(BINDIR)/$(CONFIG)/concurrent_connectivity_test \ $(BINDIR)/$(CONFIG)/connection_refused_test \ $(BINDIR)/$(CONFIG)/cpu_test \ $(BINDIR)/$(CONFIG)/dns_resolver_connectivity_using_ares_resolver_test \ $(BINDIR)/$(CONFIG)/dns_resolver_connectivity_using_native_resolver_test \ $(BINDIR)/$(CONFIG)/dns_resolver_cooldown_test \ $(BINDIR)/$(CONFIG)/dns_resolver_test \ $(BINDIR)/$(CONFIG)/dualstack_socket_test \ $(BINDIR)/$(CONFIG)/endpoint_pair_test \ $(BINDIR)/$(CONFIG)/env_test \ $(BINDIR)/$(CONFIG)/error_test \ $(BINDIR)/$(CONFIG)/ev_epollex_linux_test \ $(BINDIR)/$(CONFIG)/fake_resolver_test \ $(BINDIR)/$(CONFIG)/fake_transport_security_test \ $(BINDIR)/$(CONFIG)/fd_conservation_posix_test \ $(BINDIR)/$(CONFIG)/fd_posix_test \ $(BINDIR)/$(CONFIG)/fling_stream_test \ $(BINDIR)/$(CONFIG)/fling_test \ $(BINDIR)/$(CONFIG)/fork_test \ $(BINDIR)/$(CONFIG)/format_request_test \ $(BINDIR)/$(CONFIG)/frame_handler_test \ $(BINDIR)/$(CONFIG)/goaway_server_test \ $(BINDIR)/$(CONFIG)/grpc_alts_credentials_options_test \ $(BINDIR)/$(CONFIG)/grpc_byte_buffer_reader_test \ $(BINDIR)/$(CONFIG)/grpc_completion_queue_test \ $(BINDIR)/$(CONFIG)/grpc_ipv6_loopback_available_test \ $(BINDIR)/$(CONFIG)/handshake_server_with_readahead_handshaker_test \ $(BINDIR)/$(CONFIG)/handshake_verify_peer_options_test \ $(BINDIR)/$(CONFIG)/histogram_test \ $(BINDIR)/$(CONFIG)/host_port_test \ $(BINDIR)/$(CONFIG)/hpack_encoder_test \ $(BINDIR)/$(CONFIG)/hpack_parser_test \ $(BINDIR)/$(CONFIG)/hpack_table_test \ $(BINDIR)/$(CONFIG)/httpcli_test \ $(BINDIR)/$(CONFIG)/httpscli_test \ $(BINDIR)/$(CONFIG)/init_test \ $(BINDIR)/$(CONFIG)/inproc_callback_test \ $(BINDIR)/$(CONFIG)/invalid_call_argument_test \ $(BINDIR)/$(CONFIG)/json_token_test \ $(BINDIR)/$(CONFIG)/jwt_verifier_test \ $(BINDIR)/$(CONFIG)/lame_client_test \ $(BINDIR)/$(CONFIG)/load_file_test \ $(BINDIR)/$(CONFIG)/log_test \ $(BINDIR)/$(CONFIG)/manual_constructor_test \ $(BINDIR)/$(CONFIG)/message_compress_test \ $(BINDIR)/$(CONFIG)/metadata_test \ $(BINDIR)/$(CONFIG)/minimal_stack_is_minimal_test \ $(BINDIR)/$(CONFIG)/mpmcqueue_test \ $(BINDIR)/$(CONFIG)/mpscq_test \ $(BINDIR)/$(CONFIG)/multiple_server_queues_test \ $(BINDIR)/$(CONFIG)/murmur_hash_test \ $(BINDIR)/$(CONFIG)/no_server_test \ $(BINDIR)/$(CONFIG)/num_external_connectivity_watchers_test \ $(BINDIR)/$(CONFIG)/parse_address_test \ $(BINDIR)/$(CONFIG)/parse_address_with_named_scope_id_test \ $(BINDIR)/$(CONFIG)/parser_test \ $(BINDIR)/$(CONFIG)/percent_encoding_test \ $(BINDIR)/$(CONFIG)/public_headers_must_be_c89 \ $(BINDIR)/$(CONFIG)/resolve_address_using_ares_resolver_posix_test \ $(BINDIR)/$(CONFIG)/resolve_address_using_ares_resolver_test \ $(BINDIR)/$(CONFIG)/resolve_address_using_native_resolver_posix_test \ $(BINDIR)/$(CONFIG)/resolve_address_using_native_resolver_test \ $(BINDIR)/$(CONFIG)/resource_quota_test \ $(BINDIR)/$(CONFIG)/secure_channel_create_test \ $(BINDIR)/$(CONFIG)/secure_endpoint_test \ $(BINDIR)/$(CONFIG)/security_connector_test \ $(BINDIR)/$(CONFIG)/sequential_connectivity_test \ $(BINDIR)/$(CONFIG)/server_chttp2_test \ $(BINDIR)/$(CONFIG)/server_ssl_test \ $(BINDIR)/$(CONFIG)/server_test \ $(BINDIR)/$(CONFIG)/slice_buffer_test \ $(BINDIR)/$(CONFIG)/slice_string_helpers_test \ $(BINDIR)/$(CONFIG)/sockaddr_resolver_test \ $(BINDIR)/$(CONFIG)/sockaddr_utils_test \ $(BINDIR)/$(CONFIG)/socket_utils_test \ $(BINDIR)/$(CONFIG)/spinlock_test \ $(BINDIR)/$(CONFIG)/ssl_credentials_test \ $(BINDIR)/$(CONFIG)/ssl_transport_security_test \ $(BINDIR)/$(CONFIG)/status_conversion_test \ $(BINDIR)/$(CONFIG)/stream_compression_test \ $(BINDIR)/$(CONFIG)/stream_map_test \ $(BINDIR)/$(CONFIG)/stream_owned_slice_test \ $(BINDIR)/$(CONFIG)/string_test \ $(BINDIR)/$(CONFIG)/sync_test \ $(BINDIR)/$(CONFIG)/tcp_client_posix_test \ $(BINDIR)/$(CONFIG)/tcp_posix_test \ $(BINDIR)/$(CONFIG)/tcp_server_posix_test \ $(BINDIR)/$(CONFIG)/test_core_gpr_time_test \ $(BINDIR)/$(CONFIG)/test_core_security_credentials_test \ $(BINDIR)/$(CONFIG)/test_core_slice_slice_test \ $(BINDIR)/$(CONFIG)/thd_test \ $(BINDIR)/$(CONFIG)/threadpool_test \ $(BINDIR)/$(CONFIG)/time_averaged_stats_test \ $(BINDIR)/$(CONFIG)/timeout_encoding_test \ $(BINDIR)/$(CONFIG)/timer_heap_test \ $(BINDIR)/$(CONFIG)/timer_list_test \ $(BINDIR)/$(CONFIG)/tls_test \ $(BINDIR)/$(CONFIG)/transport_security_common_api_test \ $(BINDIR)/$(CONFIG)/transport_security_test \ $(BINDIR)/$(CONFIG)/udp_server_test \ $(BINDIR)/$(CONFIG)/uri_parser_test \ $(BINDIR)/$(CONFIG)/useful_test \ $(BINDIR)/$(CONFIG)/varint_test \ ifeq ($(EMBED_OPENSSL),true) buildtests_cxx: privatelibs_cxx \ $(BINDIR)/$(CONFIG)/address_sorting_test \ $(BINDIR)/$(CONFIG)/address_sorting_test_unsecure \ $(BINDIR)/$(CONFIG)/alarm_test \ $(BINDIR)/$(CONFIG)/alts_concurrent_connectivity_test \ $(BINDIR)/$(CONFIG)/alts_util_test \ $(BINDIR)/$(CONFIG)/async_end2end_test \ $(BINDIR)/$(CONFIG)/auth_property_iterator_test \ $(BINDIR)/$(CONFIG)/backoff_test \ $(BINDIR)/$(CONFIG)/bad_streaming_id_bad_client_test \ $(BINDIR)/$(CONFIG)/badreq_bad_client_test \ $(BINDIR)/$(CONFIG)/bdp_estimator_test \ $(BINDIR)/$(CONFIG)/bm_alarm \ $(BINDIR)/$(CONFIG)/bm_arena \ $(BINDIR)/$(CONFIG)/bm_byte_buffer \ $(BINDIR)/$(CONFIG)/bm_call_create \ $(BINDIR)/$(CONFIG)/bm_callback_streaming_ping_pong \ $(BINDIR)/$(CONFIG)/bm_callback_unary_ping_pong \ $(BINDIR)/$(CONFIG)/bm_channel \ $(BINDIR)/$(CONFIG)/bm_chttp2_hpack \ $(BINDIR)/$(CONFIG)/bm_chttp2_transport \ $(BINDIR)/$(CONFIG)/bm_closure \ $(BINDIR)/$(CONFIG)/bm_cq \ $(BINDIR)/$(CONFIG)/bm_cq_multiple_threads \ $(BINDIR)/$(CONFIG)/bm_error \ $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_ping_pong \ $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_pump \ $(BINDIR)/$(CONFIG)/bm_fullstack_trickle \ $(BINDIR)/$(CONFIG)/bm_fullstack_unary_ping_pong \ $(BINDIR)/$(CONFIG)/bm_metadata \ $(BINDIR)/$(CONFIG)/bm_pollset \ $(BINDIR)/$(CONFIG)/bm_threadpool \ $(BINDIR)/$(CONFIG)/bm_timer \ $(BINDIR)/$(CONFIG)/byte_buffer_test \ $(BINDIR)/$(CONFIG)/byte_stream_test \ $(BINDIR)/$(CONFIG)/cancel_ares_query_test \ $(BINDIR)/$(CONFIG)/cfstream_test \ $(BINDIR)/$(CONFIG)/channel_arguments_test \ $(BINDIR)/$(CONFIG)/channel_filter_test \ $(BINDIR)/$(CONFIG)/channel_trace_test \ $(BINDIR)/$(CONFIG)/channelz_registry_test \ $(BINDIR)/$(CONFIG)/channelz_service_test \ $(BINDIR)/$(CONFIG)/channelz_test \ $(BINDIR)/$(CONFIG)/cli_call_test \ $(BINDIR)/$(CONFIG)/client_callback_end2end_test \ $(BINDIR)/$(CONFIG)/client_channel_stress_test \ $(BINDIR)/$(CONFIG)/client_interceptors_end2end_test \ $(BINDIR)/$(CONFIG)/client_lb_end2end_test \ $(BINDIR)/$(CONFIG)/codegen_test_full \ $(BINDIR)/$(CONFIG)/codegen_test_minimal \ $(BINDIR)/$(CONFIG)/connection_prefix_bad_client_test \ $(BINDIR)/$(CONFIG)/connectivity_state_test \ $(BINDIR)/$(CONFIG)/context_list_test \ $(BINDIR)/$(CONFIG)/delegating_channel_test \ $(BINDIR)/$(CONFIG)/destroy_grpclb_channel_with_active_connect_stress_test \ $(BINDIR)/$(CONFIG)/duplicate_header_bad_client_test \ $(BINDIR)/$(CONFIG)/end2end_test \ $(BINDIR)/$(CONFIG)/error_details_test \ $(BINDIR)/$(CONFIG)/eventmanager_libuv_test \ $(BINDIR)/$(CONFIG)/exception_test \ $(BINDIR)/$(CONFIG)/filter_end2end_test \ $(BINDIR)/$(CONFIG)/flaky_network_test \ $(BINDIR)/$(CONFIG)/generic_end2end_test \ $(BINDIR)/$(CONFIG)/global_config_env_test \ $(BINDIR)/$(CONFIG)/global_config_test \ $(BINDIR)/$(CONFIG)/grpc_cli \ $(BINDIR)/$(CONFIG)/grpc_tls_credentials_options_test \ $(BINDIR)/$(CONFIG)/grpc_tool_test \ $(BINDIR)/$(CONFIG)/grpclb_api_test \ $(BINDIR)/$(CONFIG)/grpclb_end2end_test \ $(BINDIR)/$(CONFIG)/h2_ssl_session_reuse_test \ $(BINDIR)/$(CONFIG)/head_of_line_blocking_bad_client_test \ $(BINDIR)/$(CONFIG)/headers_bad_client_test \ $(BINDIR)/$(CONFIG)/health_service_end2end_test \ $(BINDIR)/$(CONFIG)/http2_client \ $(BINDIR)/$(CONFIG)/hybrid_end2end_test \ $(BINDIR)/$(CONFIG)/initial_settings_frame_bad_client_test \ $(BINDIR)/$(CONFIG)/interop_client \ $(BINDIR)/$(CONFIG)/interop_server \ $(BINDIR)/$(CONFIG)/interop_test \ $(BINDIR)/$(CONFIG)/json_test \ $(BINDIR)/$(CONFIG)/large_metadata_bad_client_test \ $(BINDIR)/$(CONFIG)/lb_get_cpu_stats_test \ $(BINDIR)/$(CONFIG)/lb_load_data_store_test \ $(BINDIR)/$(CONFIG)/linux_system_roots_test \ $(BINDIR)/$(CONFIG)/message_allocator_end2end_test \ $(BINDIR)/$(CONFIG)/mock_test \ $(BINDIR)/$(CONFIG)/nonblocking_test \ $(BINDIR)/$(CONFIG)/noop-benchmark \ $(BINDIR)/$(CONFIG)/orphanable_test \ $(BINDIR)/$(CONFIG)/out_of_bounds_bad_client_test \ $(BINDIR)/$(CONFIG)/pid_controller_test \ $(BINDIR)/$(CONFIG)/port_sharing_end2end_test \ $(BINDIR)/$(CONFIG)/proto_server_reflection_test \ $(BINDIR)/$(CONFIG)/proto_utils_test \ $(BINDIR)/$(CONFIG)/qps_json_driver \ $(BINDIR)/$(CONFIG)/qps_worker \ $(BINDIR)/$(CONFIG)/raw_end2end_test \ $(BINDIR)/$(CONFIG)/ref_counted_ptr_test \ $(BINDIR)/$(CONFIG)/ref_counted_test \ $(BINDIR)/$(CONFIG)/retry_throttle_test \ $(BINDIR)/$(CONFIG)/secure_auth_context_test \ $(BINDIR)/$(CONFIG)/server_builder_plugin_test \ $(BINDIR)/$(CONFIG)/server_builder_test \ $(BINDIR)/$(CONFIG)/server_builder_with_socket_mutator_test \ $(BINDIR)/$(CONFIG)/server_context_test_spouse_test \ $(BINDIR)/$(CONFIG)/server_early_return_test \ $(BINDIR)/$(CONFIG)/server_interceptors_end2end_test \ $(BINDIR)/$(CONFIG)/server_registered_method_bad_client_test \ $(BINDIR)/$(CONFIG)/server_request_call_test \ $(BINDIR)/$(CONFIG)/service_config_end2end_test \ $(BINDIR)/$(CONFIG)/service_config_test \ $(BINDIR)/$(CONFIG)/settings_timeout_test \ $(BINDIR)/$(CONFIG)/shutdown_test \ $(BINDIR)/$(CONFIG)/simple_request_bad_client_test \ $(BINDIR)/$(CONFIG)/slice_hash_table_test \ $(BINDIR)/$(CONFIG)/slice_weak_hash_table_test \ $(BINDIR)/$(CONFIG)/static_metadata_test \ $(BINDIR)/$(CONFIG)/stats_test \ $(BINDIR)/$(CONFIG)/status_metadata_test \ $(BINDIR)/$(CONFIG)/status_util_test \ $(BINDIR)/$(CONFIG)/streaming_throughput_test \ $(BINDIR)/$(CONFIG)/string_ref_test \ $(BINDIR)/$(CONFIG)/test_cpp_client_credentials_test \ $(BINDIR)/$(CONFIG)/test_cpp_util_slice_test \ $(BINDIR)/$(CONFIG)/test_cpp_util_time_test \ $(BINDIR)/$(CONFIG)/thread_manager_test \ $(BINDIR)/$(CONFIG)/thread_stress_test \ $(BINDIR)/$(CONFIG)/time_jump_test \ $(BINDIR)/$(CONFIG)/timer_test \ $(BINDIR)/$(CONFIG)/tls_security_connector_test \ $(BINDIR)/$(CONFIG)/unknown_frame_bad_client_test \ $(BINDIR)/$(CONFIG)/window_overflow_bad_client_test \ $(BINDIR)/$(CONFIG)/work_serializer_test \ $(BINDIR)/$(CONFIG)/writes_per_rpc_test \ $(BINDIR)/$(CONFIG)/xds_bootstrap_test \ $(BINDIR)/$(CONFIG)/xds_end2end_test \ $(BINDIR)/$(CONFIG)/xds_interop_client \ $(BINDIR)/$(CONFIG)/xds_interop_server \ $(BINDIR)/$(CONFIG)/boringssl_ssl_test \ $(BINDIR)/$(CONFIG)/boringssl_crypto_test \ $(BINDIR)/$(CONFIG)/alts_credentials_fuzzer_one_entry \ $(BINDIR)/$(CONFIG)/client_fuzzer_one_entry \ $(BINDIR)/$(CONFIG)/hpack_parser_fuzzer_test_one_entry \ $(BINDIR)/$(CONFIG)/http_request_fuzzer_test_one_entry \ $(BINDIR)/$(CONFIG)/http_response_fuzzer_test_one_entry \ $(BINDIR)/$(CONFIG)/json_fuzzer_test_one_entry \ $(BINDIR)/$(CONFIG)/nanopb_fuzzer_response_test_one_entry \ $(BINDIR)/$(CONFIG)/nanopb_fuzzer_serverlist_test_one_entry \ $(BINDIR)/$(CONFIG)/percent_decode_fuzzer_one_entry \ $(BINDIR)/$(CONFIG)/percent_encode_fuzzer_one_entry \ $(BINDIR)/$(CONFIG)/server_fuzzer_one_entry \ $(BINDIR)/$(CONFIG)/ssl_server_fuzzer_one_entry \ $(BINDIR)/$(CONFIG)/uri_fuzzer_test_one_entry \ else buildtests_cxx: privatelibs_cxx \ $(BINDIR)/$(CONFIG)/address_sorting_test \ $(BINDIR)/$(CONFIG)/address_sorting_test_unsecure \ $(BINDIR)/$(CONFIG)/alarm_test \ $(BINDIR)/$(CONFIG)/alts_concurrent_connectivity_test \ $(BINDIR)/$(CONFIG)/alts_util_test \ $(BINDIR)/$(CONFIG)/async_end2end_test \ $(BINDIR)/$(CONFIG)/auth_property_iterator_test \ $(BINDIR)/$(CONFIG)/backoff_test \ $(BINDIR)/$(CONFIG)/bad_streaming_id_bad_client_test \ $(BINDIR)/$(CONFIG)/badreq_bad_client_test \ $(BINDIR)/$(CONFIG)/bdp_estimator_test \ $(BINDIR)/$(CONFIG)/bm_alarm \ $(BINDIR)/$(CONFIG)/bm_arena \ $(BINDIR)/$(CONFIG)/bm_byte_buffer \ $(BINDIR)/$(CONFIG)/bm_call_create \ $(BINDIR)/$(CONFIG)/bm_callback_streaming_ping_pong \ $(BINDIR)/$(CONFIG)/bm_callback_unary_ping_pong \ $(BINDIR)/$(CONFIG)/bm_channel \ $(BINDIR)/$(CONFIG)/bm_chttp2_hpack \ $(BINDIR)/$(CONFIG)/bm_chttp2_transport \ $(BINDIR)/$(CONFIG)/bm_closure \ $(BINDIR)/$(CONFIG)/bm_cq \ $(BINDIR)/$(CONFIG)/bm_cq_multiple_threads \ $(BINDIR)/$(CONFIG)/bm_error \ $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_ping_pong \ $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_pump \ $(BINDIR)/$(CONFIG)/bm_fullstack_trickle \ $(BINDIR)/$(CONFIG)/bm_fullstack_unary_ping_pong \ $(BINDIR)/$(CONFIG)/bm_metadata \ $(BINDIR)/$(CONFIG)/bm_pollset \ $(BINDIR)/$(CONFIG)/bm_threadpool \ $(BINDIR)/$(CONFIG)/bm_timer \ $(BINDIR)/$(CONFIG)/byte_buffer_test \ $(BINDIR)/$(CONFIG)/byte_stream_test \ $(BINDIR)/$(CONFIG)/cancel_ares_query_test \ $(BINDIR)/$(CONFIG)/cfstream_test \ $(BINDIR)/$(CONFIG)/channel_arguments_test \ $(BINDIR)/$(CONFIG)/channel_filter_test \ $(BINDIR)/$(CONFIG)/channel_trace_test \ $(BINDIR)/$(CONFIG)/channelz_registry_test \ $(BINDIR)/$(CONFIG)/channelz_service_test \ $(BINDIR)/$(CONFIG)/channelz_test \ $(BINDIR)/$(CONFIG)/cli_call_test \ $(BINDIR)/$(CONFIG)/client_callback_end2end_test \ $(BINDIR)/$(CONFIG)/client_channel_stress_test \ $(BINDIR)/$(CONFIG)/client_interceptors_end2end_test \ $(BINDIR)/$(CONFIG)/client_lb_end2end_test \ $(BINDIR)/$(CONFIG)/codegen_test_full \ $(BINDIR)/$(CONFIG)/codegen_test_minimal \ $(BINDIR)/$(CONFIG)/connection_prefix_bad_client_test \ $(BINDIR)/$(CONFIG)/connectivity_state_test \ $(BINDIR)/$(CONFIG)/context_list_test \ $(BINDIR)/$(CONFIG)/delegating_channel_test \ $(BINDIR)/$(CONFIG)/destroy_grpclb_channel_with_active_connect_stress_test \ $(BINDIR)/$(CONFIG)/duplicate_header_bad_client_test \ $(BINDIR)/$(CONFIG)/end2end_test \ $(BINDIR)/$(CONFIG)/error_details_test \ $(BINDIR)/$(CONFIG)/eventmanager_libuv_test \ $(BINDIR)/$(CONFIG)/exception_test \ $(BINDIR)/$(CONFIG)/filter_end2end_test \ $(BINDIR)/$(CONFIG)/flaky_network_test \ $(BINDIR)/$(CONFIG)/generic_end2end_test \ $(BINDIR)/$(CONFIG)/global_config_env_test \ $(BINDIR)/$(CONFIG)/global_config_test \ $(BINDIR)/$(CONFIG)/grpc_cli \ $(BINDIR)/$(CONFIG)/grpc_tls_credentials_options_test \ $(BINDIR)/$(CONFIG)/grpc_tool_test \ $(BINDIR)/$(CONFIG)/grpclb_api_test \ $(BINDIR)/$(CONFIG)/grpclb_end2end_test \ $(BINDIR)/$(CONFIG)/h2_ssl_session_reuse_test \ $(BINDIR)/$(CONFIG)/head_of_line_blocking_bad_client_test \ $(BINDIR)/$(CONFIG)/headers_bad_client_test \ $(BINDIR)/$(CONFIG)/health_service_end2end_test \ $(BINDIR)/$(CONFIG)/http2_client \ $(BINDIR)/$(CONFIG)/hybrid_end2end_test \ $(BINDIR)/$(CONFIG)/initial_settings_frame_bad_client_test \ $(BINDIR)/$(CONFIG)/interop_client \ $(BINDIR)/$(CONFIG)/interop_server \ $(BINDIR)/$(CONFIG)/interop_test \ $(BINDIR)/$(CONFIG)/json_test \ $(BINDIR)/$(CONFIG)/large_metadata_bad_client_test \ $(BINDIR)/$(CONFIG)/lb_get_cpu_stats_test \ $(BINDIR)/$(CONFIG)/lb_load_data_store_test \ $(BINDIR)/$(CONFIG)/linux_system_roots_test \ $(BINDIR)/$(CONFIG)/message_allocator_end2end_test \ $(BINDIR)/$(CONFIG)/mock_test \ $(BINDIR)/$(CONFIG)/nonblocking_test \ $(BINDIR)/$(CONFIG)/noop-benchmark \ $(BINDIR)/$(CONFIG)/orphanable_test \ $(BINDIR)/$(CONFIG)/out_of_bounds_bad_client_test \ $(BINDIR)/$(CONFIG)/pid_controller_test \ $(BINDIR)/$(CONFIG)/port_sharing_end2end_test \ $(BINDIR)/$(CONFIG)/proto_server_reflection_test \ $(BINDIR)/$(CONFIG)/proto_utils_test \ $(BINDIR)/$(CONFIG)/qps_json_driver \ $(BINDIR)/$(CONFIG)/qps_worker \ $(BINDIR)/$(CONFIG)/raw_end2end_test \ $(BINDIR)/$(CONFIG)/ref_counted_ptr_test \ $(BINDIR)/$(CONFIG)/ref_counted_test \ $(BINDIR)/$(CONFIG)/retry_throttle_test \ $(BINDIR)/$(CONFIG)/secure_auth_context_test \ $(BINDIR)/$(CONFIG)/server_builder_plugin_test \ $(BINDIR)/$(CONFIG)/server_builder_test \ $(BINDIR)/$(CONFIG)/server_builder_with_socket_mutator_test \ $(BINDIR)/$(CONFIG)/server_context_test_spouse_test \ $(BINDIR)/$(CONFIG)/server_early_return_test \ $(BINDIR)/$(CONFIG)/server_interceptors_end2end_test \ $(BINDIR)/$(CONFIG)/server_registered_method_bad_client_test \ $(BINDIR)/$(CONFIG)/server_request_call_test \ $(BINDIR)/$(CONFIG)/service_config_end2end_test \ $(BINDIR)/$(CONFIG)/service_config_test \ $(BINDIR)/$(CONFIG)/settings_timeout_test \ $(BINDIR)/$(CONFIG)/shutdown_test \ $(BINDIR)/$(CONFIG)/simple_request_bad_client_test \ $(BINDIR)/$(CONFIG)/slice_hash_table_test \ $(BINDIR)/$(CONFIG)/slice_weak_hash_table_test \ $(BINDIR)/$(CONFIG)/static_metadata_test \ $(BINDIR)/$(CONFIG)/stats_test \ $(BINDIR)/$(CONFIG)/status_metadata_test \ $(BINDIR)/$(CONFIG)/status_util_test \ $(BINDIR)/$(CONFIG)/streaming_throughput_test \ $(BINDIR)/$(CONFIG)/string_ref_test \ $(BINDIR)/$(CONFIG)/test_cpp_client_credentials_test \ $(BINDIR)/$(CONFIG)/test_cpp_util_slice_test \ $(BINDIR)/$(CONFIG)/test_cpp_util_time_test \ $(BINDIR)/$(CONFIG)/thread_manager_test \ $(BINDIR)/$(CONFIG)/thread_stress_test \ $(BINDIR)/$(CONFIG)/time_jump_test \ $(BINDIR)/$(CONFIG)/timer_test \ $(BINDIR)/$(CONFIG)/tls_security_connector_test \ $(BINDIR)/$(CONFIG)/unknown_frame_bad_client_test \ $(BINDIR)/$(CONFIG)/window_overflow_bad_client_test \ $(BINDIR)/$(CONFIG)/work_serializer_test \ $(BINDIR)/$(CONFIG)/writes_per_rpc_test \ $(BINDIR)/$(CONFIG)/xds_bootstrap_test \ $(BINDIR)/$(CONFIG)/xds_end2end_test \ $(BINDIR)/$(CONFIG)/xds_interop_client \ $(BINDIR)/$(CONFIG)/xds_interop_server \ $(BINDIR)/$(CONFIG)/alts_credentials_fuzzer_one_entry \ $(BINDIR)/$(CONFIG)/client_fuzzer_one_entry \ $(BINDIR)/$(CONFIG)/hpack_parser_fuzzer_test_one_entry \ $(BINDIR)/$(CONFIG)/http_request_fuzzer_test_one_entry \ $(BINDIR)/$(CONFIG)/http_response_fuzzer_test_one_entry \ $(BINDIR)/$(CONFIG)/json_fuzzer_test_one_entry \ $(BINDIR)/$(CONFIG)/nanopb_fuzzer_response_test_one_entry \ $(BINDIR)/$(CONFIG)/nanopb_fuzzer_serverlist_test_one_entry \ $(BINDIR)/$(CONFIG)/percent_decode_fuzzer_one_entry \ $(BINDIR)/$(CONFIG)/percent_encode_fuzzer_one_entry \ $(BINDIR)/$(CONFIG)/server_fuzzer_one_entry \ $(BINDIR)/$(CONFIG)/ssl_server_fuzzer_one_entry \ $(BINDIR)/$(CONFIG)/uri_fuzzer_test_one_entry \ endif test: test_c test_cxx flaky_test: flaky_test_c flaky_test_cxx test_c: buildtests_c $(E) "[RUN] Testing algorithm_test" $(Q) $(BINDIR)/$(CONFIG)/algorithm_test || ( echo test algorithm_test failed ; exit 1 ) $(E) "[RUN] Testing alloc_test" $(Q) $(BINDIR)/$(CONFIG)/alloc_test || ( echo test alloc_test failed ; exit 1 ) $(E) "[RUN] Testing alpn_test" $(Q) $(BINDIR)/$(CONFIG)/alpn_test || ( echo test alpn_test failed ; exit 1 ) $(E) "[RUN] Testing alts_counter_test" $(Q) $(BINDIR)/$(CONFIG)/alts_counter_test || ( echo test alts_counter_test failed ; exit 1 ) $(E) "[RUN] Testing alts_crypt_test" $(Q) $(BINDIR)/$(CONFIG)/alts_crypt_test || ( echo test alts_crypt_test failed ; exit 1 ) $(E) "[RUN] Testing alts_crypter_test" $(Q) $(BINDIR)/$(CONFIG)/alts_crypter_test || ( echo test alts_crypter_test failed ; exit 1 ) $(E) "[RUN] Testing alts_frame_protector_test" $(Q) $(BINDIR)/$(CONFIG)/alts_frame_protector_test || ( echo test alts_frame_protector_test failed ; exit 1 ) $(E) "[RUN] Testing alts_grpc_record_protocol_test" $(Q) $(BINDIR)/$(CONFIG)/alts_grpc_record_protocol_test || ( echo test alts_grpc_record_protocol_test failed ; exit 1 ) $(E) "[RUN] Testing alts_handshaker_client_test" $(Q) $(BINDIR)/$(CONFIG)/alts_handshaker_client_test || ( echo test alts_handshaker_client_test failed ; exit 1 ) $(E) "[RUN] Testing alts_iovec_record_protocol_test" $(Q) $(BINDIR)/$(CONFIG)/alts_iovec_record_protocol_test || ( echo test alts_iovec_record_protocol_test failed ; exit 1 ) $(E) "[RUN] Testing alts_security_connector_test" $(Q) $(BINDIR)/$(CONFIG)/alts_security_connector_test || ( echo test alts_security_connector_test failed ; exit 1 ) $(E) "[RUN] Testing alts_tsi_handshaker_test" $(Q) $(BINDIR)/$(CONFIG)/alts_tsi_handshaker_test || ( echo test alts_tsi_handshaker_test failed ; exit 1 ) $(E) "[RUN] Testing alts_tsi_utils_test" $(Q) $(BINDIR)/$(CONFIG)/alts_tsi_utils_test || ( echo test alts_tsi_utils_test failed ; exit 1 ) $(E) "[RUN] Testing alts_zero_copy_grpc_protector_test" $(Q) $(BINDIR)/$(CONFIG)/alts_zero_copy_grpc_protector_test || ( echo test alts_zero_copy_grpc_protector_test failed ; exit 1 ) $(E) "[RUN] Testing arena_test" $(Q) $(BINDIR)/$(CONFIG)/arena_test || ( echo test arena_test failed ; exit 1 ) $(E) "[RUN] Testing auth_context_test" $(Q) $(BINDIR)/$(CONFIG)/auth_context_test || ( echo test auth_context_test failed ; exit 1 ) $(E) "[RUN] Testing avl_test" $(Q) $(BINDIR)/$(CONFIG)/avl_test || ( echo test avl_test failed ; exit 1 ) $(E) "[RUN] Testing b64_test" $(Q) $(BINDIR)/$(CONFIG)/b64_test || ( echo test b64_test failed ; exit 1 ) $(E) "[RUN] Testing bad_server_response_test" $(Q) $(BINDIR)/$(CONFIG)/bad_server_response_test || ( echo test bad_server_response_test failed ; exit 1 ) $(E) "[RUN] Testing bad_ssl_alpn_test" $(Q) $(BINDIR)/$(CONFIG)/bad_ssl_alpn_test || ( echo test bad_ssl_alpn_test failed ; exit 1 ) $(E) "[RUN] Testing bad_ssl_cert_test" $(Q) $(BINDIR)/$(CONFIG)/bad_ssl_cert_test || ( echo test bad_ssl_cert_test failed ; exit 1 ) $(E) "[RUN] Testing bin_decoder_test" $(Q) $(BINDIR)/$(CONFIG)/bin_decoder_test || ( echo test bin_decoder_test failed ; exit 1 ) $(E) "[RUN] Testing bin_encoder_test" $(Q) $(BINDIR)/$(CONFIG)/bin_encoder_test || ( echo test bin_encoder_test failed ; exit 1 ) $(E) "[RUN] Testing buffer_list_test" $(Q) $(BINDIR)/$(CONFIG)/buffer_list_test || ( echo test buffer_list_test failed ; exit 1 ) $(E) "[RUN] Testing channel_args_test" $(Q) $(BINDIR)/$(CONFIG)/channel_args_test || ( echo test channel_args_test failed ; exit 1 ) $(E) "[RUN] Testing channel_create_test" $(Q) $(BINDIR)/$(CONFIG)/channel_create_test || ( echo test channel_create_test failed ; exit 1 ) $(E) "[RUN] Testing channel_stack_builder_test" $(Q) $(BINDIR)/$(CONFIG)/channel_stack_builder_test || ( echo test channel_stack_builder_test failed ; exit 1 ) $(E) "[RUN] Testing channel_stack_test" $(Q) $(BINDIR)/$(CONFIG)/channel_stack_test || ( echo test channel_stack_test failed ; exit 1 ) $(E) "[RUN] Testing check_gcp_environment_linux_test" $(Q) $(BINDIR)/$(CONFIG)/check_gcp_environment_linux_test || ( echo test check_gcp_environment_linux_test failed ; exit 1 ) $(E) "[RUN] Testing check_gcp_environment_windows_test" $(Q) $(BINDIR)/$(CONFIG)/check_gcp_environment_windows_test || ( echo test check_gcp_environment_windows_test failed ; exit 1 ) $(E) "[RUN] Testing client_ssl_test" $(Q) $(BINDIR)/$(CONFIG)/client_ssl_test || ( echo test client_ssl_test failed ; exit 1 ) $(E) "[RUN] Testing cmdline_test" $(Q) $(BINDIR)/$(CONFIG)/cmdline_test || ( echo test cmdline_test failed ; exit 1 ) $(E) "[RUN] Testing combiner_test" $(Q) $(BINDIR)/$(CONFIG)/combiner_test || ( echo test combiner_test failed ; exit 1 ) $(E) "[RUN] Testing compression_test" $(Q) $(BINDIR)/$(CONFIG)/compression_test || ( echo test compression_test failed ; exit 1 ) $(E) "[RUN] Testing connection_refused_test" $(Q) $(BINDIR)/$(CONFIG)/connection_refused_test || ( echo test connection_refused_test failed ; exit 1 ) $(E) "[RUN] Testing cpu_test" $(Q) $(BINDIR)/$(CONFIG)/cpu_test || ( echo test cpu_test failed ; exit 1 ) $(E) "[RUN] Testing dns_resolver_connectivity_using_ares_resolver_test" $(Q) $(BINDIR)/$(CONFIG)/dns_resolver_connectivity_using_ares_resolver_test || ( echo test dns_resolver_connectivity_using_ares_resolver_test failed ; exit 1 ) $(E) "[RUN] Testing dns_resolver_connectivity_using_native_resolver_test" $(Q) $(BINDIR)/$(CONFIG)/dns_resolver_connectivity_using_native_resolver_test || ( echo test dns_resolver_connectivity_using_native_resolver_test failed ; exit 1 ) $(E) "[RUN] Testing dns_resolver_cooldown_test" $(Q) $(BINDIR)/$(CONFIG)/dns_resolver_cooldown_test || ( echo test dns_resolver_cooldown_test failed ; exit 1 ) $(E) "[RUN] Testing dns_resolver_test" $(Q) $(BINDIR)/$(CONFIG)/dns_resolver_test || ( echo test dns_resolver_test failed ; exit 1 ) $(E) "[RUN] Testing dualstack_socket_test" $(Q) $(BINDIR)/$(CONFIG)/dualstack_socket_test || ( echo test dualstack_socket_test failed ; exit 1 ) $(E) "[RUN] Testing endpoint_pair_test" $(Q) $(BINDIR)/$(CONFIG)/endpoint_pair_test || ( echo test endpoint_pair_test failed ; exit 1 ) $(E) "[RUN] Testing env_test" $(Q) $(BINDIR)/$(CONFIG)/env_test || ( echo test env_test failed ; exit 1 ) $(E) "[RUN] Testing error_test" $(Q) $(BINDIR)/$(CONFIG)/error_test || ( echo test error_test failed ; exit 1 ) $(E) "[RUN] Testing ev_epollex_linux_test" $(Q) $(BINDIR)/$(CONFIG)/ev_epollex_linux_test || ( echo test ev_epollex_linux_test failed ; exit 1 ) $(E) "[RUN] Testing fake_resolver_test" $(Q) $(BINDIR)/$(CONFIG)/fake_resolver_test || ( echo test fake_resolver_test failed ; exit 1 ) $(E) "[RUN] Testing fake_transport_security_test" $(Q) $(BINDIR)/$(CONFIG)/fake_transport_security_test || ( echo test fake_transport_security_test failed ; exit 1 ) $(E) "[RUN] Testing fd_conservation_posix_test" $(Q) $(BINDIR)/$(CONFIG)/fd_conservation_posix_test || ( echo test fd_conservation_posix_test failed ; exit 1 ) $(E) "[RUN] Testing fd_posix_test" $(Q) $(BINDIR)/$(CONFIG)/fd_posix_test || ( echo test fd_posix_test failed ; exit 1 ) $(E) "[RUN] Testing fling_stream_test" $(Q) $(BINDIR)/$(CONFIG)/fling_stream_test || ( echo test fling_stream_test failed ; exit 1 ) $(E) "[RUN] Testing fling_test" $(Q) $(BINDIR)/$(CONFIG)/fling_test || ( echo test fling_test failed ; exit 1 ) $(E) "[RUN] Testing fork_test" $(Q) $(BINDIR)/$(CONFIG)/fork_test || ( echo test fork_test failed ; exit 1 ) $(E) "[RUN] Testing format_request_test" $(Q) $(BINDIR)/$(CONFIG)/format_request_test || ( echo test format_request_test failed ; exit 1 ) $(E) "[RUN] Testing frame_handler_test" $(Q) $(BINDIR)/$(CONFIG)/frame_handler_test || ( echo test frame_handler_test failed ; exit 1 ) $(E) "[RUN] Testing goaway_server_test" $(Q) $(BINDIR)/$(CONFIG)/goaway_server_test || ( echo test goaway_server_test failed ; exit 1 ) $(E) "[RUN] Testing grpc_alts_credentials_options_test" $(Q) $(BINDIR)/$(CONFIG)/grpc_alts_credentials_options_test || ( echo test grpc_alts_credentials_options_test failed ; exit 1 ) $(E) "[RUN] Testing grpc_byte_buffer_reader_test" $(Q) $(BINDIR)/$(CONFIG)/grpc_byte_buffer_reader_test || ( echo test grpc_byte_buffer_reader_test failed ; exit 1 ) $(E) "[RUN] Testing grpc_completion_queue_test" $(Q) $(BINDIR)/$(CONFIG)/grpc_completion_queue_test || ( echo test grpc_completion_queue_test failed ; exit 1 ) $(E) "[RUN] Testing grpc_ipv6_loopback_available_test" $(Q) $(BINDIR)/$(CONFIG)/grpc_ipv6_loopback_available_test || ( echo test grpc_ipv6_loopback_available_test failed ; exit 1 ) $(E) "[RUN] Testing handshake_server_with_readahead_handshaker_test" $(Q) $(BINDIR)/$(CONFIG)/handshake_server_with_readahead_handshaker_test || ( echo test handshake_server_with_readahead_handshaker_test failed ; exit 1 ) $(E) "[RUN] Testing handshake_verify_peer_options_test" $(Q) $(BINDIR)/$(CONFIG)/handshake_verify_peer_options_test || ( echo test handshake_verify_peer_options_test failed ; exit 1 ) $(E) "[RUN] Testing histogram_test" $(Q) $(BINDIR)/$(CONFIG)/histogram_test || ( echo test histogram_test failed ; exit 1 ) $(E) "[RUN] Testing host_port_test" $(Q) $(BINDIR)/$(CONFIG)/host_port_test || ( echo test host_port_test failed ; exit 1 ) $(E) "[RUN] Testing hpack_encoder_test" $(Q) $(BINDIR)/$(CONFIG)/hpack_encoder_test || ( echo test hpack_encoder_test failed ; exit 1 ) $(E) "[RUN] Testing hpack_parser_test" $(Q) $(BINDIR)/$(CONFIG)/hpack_parser_test || ( echo test hpack_parser_test failed ; exit 1 ) $(E) "[RUN] Testing hpack_table_test" $(Q) $(BINDIR)/$(CONFIG)/hpack_table_test || ( echo test hpack_table_test failed ; exit 1 ) $(E) "[RUN] Testing httpcli_test" $(Q) $(BINDIR)/$(CONFIG)/httpcli_test || ( echo test httpcli_test failed ; exit 1 ) $(E) "[RUN] Testing httpscli_test" $(Q) $(BINDIR)/$(CONFIG)/httpscli_test || ( echo test httpscli_test failed ; exit 1 ) $(E) "[RUN] Testing init_test" $(Q) $(BINDIR)/$(CONFIG)/init_test || ( echo test init_test failed ; exit 1 ) $(E) "[RUN] Testing inproc_callback_test" $(Q) $(BINDIR)/$(CONFIG)/inproc_callback_test || ( echo test inproc_callback_test failed ; exit 1 ) $(E) "[RUN] Testing invalid_call_argument_test" $(Q) $(BINDIR)/$(CONFIG)/invalid_call_argument_test || ( echo test invalid_call_argument_test failed ; exit 1 ) $(E) "[RUN] Testing json_token_test" $(Q) $(BINDIR)/$(CONFIG)/json_token_test || ( echo test json_token_test failed ; exit 1 ) $(E) "[RUN] Testing jwt_verifier_test" $(Q) $(BINDIR)/$(CONFIG)/jwt_verifier_test || ( echo test jwt_verifier_test failed ; exit 1 ) $(E) "[RUN] Testing lame_client_test" $(Q) $(BINDIR)/$(CONFIG)/lame_client_test || ( echo test lame_client_test failed ; exit 1 ) $(E) "[RUN] Testing load_file_test" $(Q) $(BINDIR)/$(CONFIG)/load_file_test || ( echo test load_file_test failed ; exit 1 ) $(E) "[RUN] Testing log_test" $(Q) $(BINDIR)/$(CONFIG)/log_test || ( echo test log_test failed ; exit 1 ) $(E) "[RUN] Testing manual_constructor_test" $(Q) $(BINDIR)/$(CONFIG)/manual_constructor_test || ( echo test manual_constructor_test failed ; exit 1 ) $(E) "[RUN] Testing message_compress_test" $(Q) $(BINDIR)/$(CONFIG)/message_compress_test || ( echo test message_compress_test failed ; exit 1 ) $(E) "[RUN] Testing metadata_test" $(Q) $(BINDIR)/$(CONFIG)/metadata_test || ( echo test metadata_test failed ; exit 1 ) $(E) "[RUN] Testing minimal_stack_is_minimal_test" $(Q) $(BINDIR)/$(CONFIG)/minimal_stack_is_minimal_test || ( echo test minimal_stack_is_minimal_test failed ; exit 1 ) $(E) "[RUN] Testing mpmcqueue_test" $(Q) $(BINDIR)/$(CONFIG)/mpmcqueue_test || ( echo test mpmcqueue_test failed ; exit 1 ) $(E) "[RUN] Testing mpscq_test" $(Q) $(BINDIR)/$(CONFIG)/mpscq_test || ( echo test mpscq_test failed ; exit 1 ) $(E) "[RUN] Testing multiple_server_queues_test" $(Q) $(BINDIR)/$(CONFIG)/multiple_server_queues_test || ( echo test multiple_server_queues_test failed ; exit 1 ) $(E) "[RUN] Testing murmur_hash_test" $(Q) $(BINDIR)/$(CONFIG)/murmur_hash_test || ( echo test murmur_hash_test failed ; exit 1 ) $(E) "[RUN] Testing no_server_test" $(Q) $(BINDIR)/$(CONFIG)/no_server_test || ( echo test no_server_test failed ; exit 1 ) $(E) "[RUN] Testing num_external_connectivity_watchers_test" $(Q) $(BINDIR)/$(CONFIG)/num_external_connectivity_watchers_test || ( echo test num_external_connectivity_watchers_test failed ; exit 1 ) $(E) "[RUN] Testing parse_address_test" $(Q) $(BINDIR)/$(CONFIG)/parse_address_test || ( echo test parse_address_test failed ; exit 1 ) $(E) "[RUN] Testing parse_address_with_named_scope_id_test" $(Q) $(BINDIR)/$(CONFIG)/parse_address_with_named_scope_id_test || ( echo test parse_address_with_named_scope_id_test failed ; exit 1 ) $(E) "[RUN] Testing parser_test" $(Q) $(BINDIR)/$(CONFIG)/parser_test || ( echo test parser_test failed ; exit 1 ) $(E) "[RUN] Testing percent_encoding_test" $(Q) $(BINDIR)/$(CONFIG)/percent_encoding_test || ( echo test percent_encoding_test failed ; exit 1 ) $(E) "[RUN] Testing public_headers_must_be_c89" $(Q) $(BINDIR)/$(CONFIG)/public_headers_must_be_c89 || ( echo test public_headers_must_be_c89 failed ; exit 1 ) $(E) "[RUN] Testing resolve_address_using_ares_resolver_posix_test" $(Q) $(BINDIR)/$(CONFIG)/resolve_address_using_ares_resolver_posix_test || ( echo test resolve_address_using_ares_resolver_posix_test failed ; exit 1 ) $(E) "[RUN] Testing resolve_address_using_ares_resolver_test" $(Q) $(BINDIR)/$(CONFIG)/resolve_address_using_ares_resolver_test || ( echo test resolve_address_using_ares_resolver_test failed ; exit 1 ) $(E) "[RUN] Testing resolve_address_using_native_resolver_posix_test" $(Q) $(BINDIR)/$(CONFIG)/resolve_address_using_native_resolver_posix_test || ( echo test resolve_address_using_native_resolver_posix_test failed ; exit 1 ) $(E) "[RUN] Testing resolve_address_using_native_resolver_test" $(Q) $(BINDIR)/$(CONFIG)/resolve_address_using_native_resolver_test || ( echo test resolve_address_using_native_resolver_test failed ; exit 1 ) $(E) "[RUN] Testing resource_quota_test" $(Q) $(BINDIR)/$(CONFIG)/resource_quota_test || ( echo test resource_quota_test failed ; exit 1 ) $(E) "[RUN] Testing secure_channel_create_test" $(Q) $(BINDIR)/$(CONFIG)/secure_channel_create_test || ( echo test secure_channel_create_test failed ; exit 1 ) $(E) "[RUN] Testing secure_endpoint_test" $(Q) $(BINDIR)/$(CONFIG)/secure_endpoint_test || ( echo test secure_endpoint_test failed ; exit 1 ) $(E) "[RUN] Testing security_connector_test" $(Q) $(BINDIR)/$(CONFIG)/security_connector_test || ( echo test security_connector_test failed ; exit 1 ) $(E) "[RUN] Testing server_chttp2_test" $(Q) $(BINDIR)/$(CONFIG)/server_chttp2_test || ( echo test server_chttp2_test failed ; exit 1 ) $(E) "[RUN] Testing server_ssl_test" $(Q) $(BINDIR)/$(CONFIG)/server_ssl_test || ( echo test server_ssl_test failed ; exit 1 ) $(E) "[RUN] Testing server_test" $(Q) $(BINDIR)/$(CONFIG)/server_test || ( echo test server_test failed ; exit 1 ) $(E) "[RUN] Testing slice_buffer_test" $(Q) $(BINDIR)/$(CONFIG)/slice_buffer_test || ( echo test slice_buffer_test failed ; exit 1 ) $(E) "[RUN] Testing slice_string_helpers_test" $(Q) $(BINDIR)/$(CONFIG)/slice_string_helpers_test || ( echo test slice_string_helpers_test failed ; exit 1 ) $(E) "[RUN] Testing sockaddr_resolver_test" $(Q) $(BINDIR)/$(CONFIG)/sockaddr_resolver_test || ( echo test sockaddr_resolver_test failed ; exit 1 ) $(E) "[RUN] Testing sockaddr_utils_test" $(Q) $(BINDIR)/$(CONFIG)/sockaddr_utils_test || ( echo test sockaddr_utils_test failed ; exit 1 ) $(E) "[RUN] Testing socket_utils_test" $(Q) $(BINDIR)/$(CONFIG)/socket_utils_test || ( echo test socket_utils_test failed ; exit 1 ) $(E) "[RUN] Testing spinlock_test" $(Q) $(BINDIR)/$(CONFIG)/spinlock_test || ( echo test spinlock_test failed ; exit 1 ) $(E) "[RUN] Testing ssl_credentials_test" $(Q) $(BINDIR)/$(CONFIG)/ssl_credentials_test || ( echo test ssl_credentials_test failed ; exit 1 ) $(E) "[RUN] Testing ssl_transport_security_test" $(Q) $(BINDIR)/$(CONFIG)/ssl_transport_security_test || ( echo test ssl_transport_security_test failed ; exit 1 ) $(E) "[RUN] Testing status_conversion_test" $(Q) $(BINDIR)/$(CONFIG)/status_conversion_test || ( echo test status_conversion_test failed ; exit 1 ) $(E) "[RUN] Testing stream_compression_test" $(Q) $(BINDIR)/$(CONFIG)/stream_compression_test || ( echo test stream_compression_test failed ; exit 1 ) $(E) "[RUN] Testing stream_map_test" $(Q) $(BINDIR)/$(CONFIG)/stream_map_test || ( echo test stream_map_test failed ; exit 1 ) $(E) "[RUN] Testing stream_owned_slice_test" $(Q) $(BINDIR)/$(CONFIG)/stream_owned_slice_test || ( echo test stream_owned_slice_test failed ; exit 1 ) $(E) "[RUN] Testing string_test" $(Q) $(BINDIR)/$(CONFIG)/string_test || ( echo test string_test failed ; exit 1 ) $(E) "[RUN] Testing sync_test" $(Q) $(BINDIR)/$(CONFIG)/sync_test || ( echo test sync_test failed ; exit 1 ) $(E) "[RUN] Testing tcp_client_posix_test" $(Q) $(BINDIR)/$(CONFIG)/tcp_client_posix_test || ( echo test tcp_client_posix_test failed ; exit 1 ) $(E) "[RUN] Testing tcp_posix_test" $(Q) $(BINDIR)/$(CONFIG)/tcp_posix_test || ( echo test tcp_posix_test failed ; exit 1 ) $(E) "[RUN] Testing tcp_server_posix_test" $(Q) $(BINDIR)/$(CONFIG)/tcp_server_posix_test || ( echo test tcp_server_posix_test failed ; exit 1 ) $(E) "[RUN] Testing test_core_gpr_time_test" $(Q) $(BINDIR)/$(CONFIG)/test_core_gpr_time_test || ( echo test test_core_gpr_time_test failed ; exit 1 ) $(E) "[RUN] Testing test_core_security_credentials_test" $(Q) $(BINDIR)/$(CONFIG)/test_core_security_credentials_test || ( echo test test_core_security_credentials_test failed ; exit 1 ) $(E) "[RUN] Testing test_core_slice_slice_test" $(Q) $(BINDIR)/$(CONFIG)/test_core_slice_slice_test || ( echo test test_core_slice_slice_test failed ; exit 1 ) $(E) "[RUN] Testing thd_test" $(Q) $(BINDIR)/$(CONFIG)/thd_test || ( echo test thd_test failed ; exit 1 ) $(E) "[RUN] Testing threadpool_test" $(Q) $(BINDIR)/$(CONFIG)/threadpool_test || ( echo test threadpool_test failed ; exit 1 ) $(E) "[RUN] Testing time_averaged_stats_test" $(Q) $(BINDIR)/$(CONFIG)/time_averaged_stats_test || ( echo test time_averaged_stats_test failed ; exit 1 ) $(E) "[RUN] Testing timeout_encoding_test" $(Q) $(BINDIR)/$(CONFIG)/timeout_encoding_test || ( echo test timeout_encoding_test failed ; exit 1 ) $(E) "[RUN] Testing timer_heap_test" $(Q) $(BINDIR)/$(CONFIG)/timer_heap_test || ( echo test timer_heap_test failed ; exit 1 ) $(E) "[RUN] Testing timer_list_test" $(Q) $(BINDIR)/$(CONFIG)/timer_list_test || ( echo test timer_list_test failed ; exit 1 ) $(E) "[RUN] Testing tls_test" $(Q) $(BINDIR)/$(CONFIG)/tls_test || ( echo test tls_test failed ; exit 1 ) $(E) "[RUN] Testing transport_security_common_api_test" $(Q) $(BINDIR)/$(CONFIG)/transport_security_common_api_test || ( echo test transport_security_common_api_test failed ; exit 1 ) $(E) "[RUN] Testing transport_security_test" $(Q) $(BINDIR)/$(CONFIG)/transport_security_test || ( echo test transport_security_test failed ; exit 1 ) $(E) "[RUN] Testing udp_server_test" $(Q) $(BINDIR)/$(CONFIG)/udp_server_test || ( echo test udp_server_test failed ; exit 1 ) $(E) "[RUN] Testing uri_parser_test" $(Q) $(BINDIR)/$(CONFIG)/uri_parser_test || ( echo test uri_parser_test failed ; exit 1 ) $(E) "[RUN] Testing useful_test" $(Q) $(BINDIR)/$(CONFIG)/useful_test || ( echo test useful_test failed ; exit 1 ) $(E) "[RUN] Testing varint_test" $(Q) $(BINDIR)/$(CONFIG)/varint_test || ( echo test varint_test failed ; exit 1 ) flaky_test_c: buildtests_c test_cxx: buildtests_cxx $(E) "[RUN] Testing address_sorting_test" $(Q) $(BINDIR)/$(CONFIG)/address_sorting_test || ( echo test address_sorting_test failed ; exit 1 ) $(E) "[RUN] Testing address_sorting_test_unsecure" $(Q) $(BINDIR)/$(CONFIG)/address_sorting_test_unsecure || ( echo test address_sorting_test_unsecure failed ; exit 1 ) $(E) "[RUN] Testing alarm_test" $(Q) $(BINDIR)/$(CONFIG)/alarm_test || ( echo test alarm_test failed ; exit 1 ) $(E) "[RUN] Testing alts_concurrent_connectivity_test" $(Q) $(BINDIR)/$(CONFIG)/alts_concurrent_connectivity_test || ( echo test alts_concurrent_connectivity_test failed ; exit 1 ) $(E) "[RUN] Testing alts_util_test" $(Q) $(BINDIR)/$(CONFIG)/alts_util_test || ( echo test alts_util_test failed ; exit 1 ) $(E) "[RUN] Testing async_end2end_test" $(Q) $(BINDIR)/$(CONFIG)/async_end2end_test || ( echo test async_end2end_test failed ; exit 1 ) $(E) "[RUN] Testing auth_property_iterator_test" $(Q) $(BINDIR)/$(CONFIG)/auth_property_iterator_test || ( echo test auth_property_iterator_test failed ; exit 1 ) $(E) "[RUN] Testing backoff_test" $(Q) $(BINDIR)/$(CONFIG)/backoff_test || ( echo test backoff_test failed ; exit 1 ) $(E) "[RUN] Testing bad_streaming_id_bad_client_test" $(Q) $(BINDIR)/$(CONFIG)/bad_streaming_id_bad_client_test || ( echo test bad_streaming_id_bad_client_test failed ; exit 1 ) $(E) "[RUN] Testing badreq_bad_client_test" $(Q) $(BINDIR)/$(CONFIG)/badreq_bad_client_test || ( echo test badreq_bad_client_test failed ; exit 1 ) $(E) "[RUN] Testing bdp_estimator_test" $(Q) $(BINDIR)/$(CONFIG)/bdp_estimator_test || ( echo test bdp_estimator_test failed ; exit 1 ) $(E) "[RUN] Testing bm_alarm" $(Q) $(BINDIR)/$(CONFIG)/bm_alarm || ( echo test bm_alarm failed ; exit 1 ) $(E) "[RUN] Testing bm_arena" $(Q) $(BINDIR)/$(CONFIG)/bm_arena || ( echo test bm_arena failed ; exit 1 ) $(E) "[RUN] Testing bm_byte_buffer" $(Q) $(BINDIR)/$(CONFIG)/bm_byte_buffer || ( echo test bm_byte_buffer failed ; exit 1 ) $(E) "[RUN] Testing bm_call_create" $(Q) $(BINDIR)/$(CONFIG)/bm_call_create || ( echo test bm_call_create failed ; exit 1 ) $(E) "[RUN] Testing bm_callback_streaming_ping_pong" $(Q) $(BINDIR)/$(CONFIG)/bm_callback_streaming_ping_pong || ( echo test bm_callback_streaming_ping_pong failed ; exit 1 ) $(E) "[RUN] Testing bm_callback_unary_ping_pong" $(Q) $(BINDIR)/$(CONFIG)/bm_callback_unary_ping_pong || ( echo test bm_callback_unary_ping_pong failed ; exit 1 ) $(E) "[RUN] Testing bm_channel" $(Q) $(BINDIR)/$(CONFIG)/bm_channel || ( echo test bm_channel failed ; exit 1 ) $(E) "[RUN] Testing bm_chttp2_hpack" $(Q) $(BINDIR)/$(CONFIG)/bm_chttp2_hpack || ( echo test bm_chttp2_hpack failed ; exit 1 ) $(E) "[RUN] Testing bm_chttp2_transport" $(Q) $(BINDIR)/$(CONFIG)/bm_chttp2_transport || ( echo test bm_chttp2_transport failed ; exit 1 ) $(E) "[RUN] Testing bm_closure" $(Q) $(BINDIR)/$(CONFIG)/bm_closure || ( echo test bm_closure failed ; exit 1 ) $(E) "[RUN] Testing bm_cq" $(Q) $(BINDIR)/$(CONFIG)/bm_cq || ( echo test bm_cq failed ; exit 1 ) $(E) "[RUN] Testing bm_cq_multiple_threads" $(Q) $(BINDIR)/$(CONFIG)/bm_cq_multiple_threads || ( echo test bm_cq_multiple_threads failed ; exit 1 ) $(E) "[RUN] Testing bm_error" $(Q) $(BINDIR)/$(CONFIG)/bm_error || ( echo test bm_error failed ; exit 1 ) $(E) "[RUN] Testing bm_fullstack_streaming_ping_pong" $(Q) $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_ping_pong || ( echo test bm_fullstack_streaming_ping_pong failed ; exit 1 ) $(E) "[RUN] Testing bm_fullstack_streaming_pump" $(Q) $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_pump || ( echo test bm_fullstack_streaming_pump failed ; exit 1 ) $(E) "[RUN] Testing bm_fullstack_unary_ping_pong" $(Q) $(BINDIR)/$(CONFIG)/bm_fullstack_unary_ping_pong || ( echo test bm_fullstack_unary_ping_pong failed ; exit 1 ) $(E) "[RUN] Testing bm_metadata" $(Q) $(BINDIR)/$(CONFIG)/bm_metadata || ( echo test bm_metadata failed ; exit 1 ) $(E) "[RUN] Testing bm_pollset" $(Q) $(BINDIR)/$(CONFIG)/bm_pollset || ( echo test bm_pollset failed ; exit 1 ) $(E) "[RUN] Testing bm_timer" $(Q) $(BINDIR)/$(CONFIG)/bm_timer || ( echo test bm_timer failed ; exit 1 ) $(E) "[RUN] Testing byte_buffer_test" $(Q) $(BINDIR)/$(CONFIG)/byte_buffer_test || ( echo test byte_buffer_test failed ; exit 1 ) $(E) "[RUN] Testing byte_stream_test" $(Q) $(BINDIR)/$(CONFIG)/byte_stream_test || ( echo test byte_stream_test failed ; exit 1 ) $(E) "[RUN] Testing channel_arguments_test" $(Q) $(BINDIR)/$(CONFIG)/channel_arguments_test || ( echo test channel_arguments_test failed ; exit 1 ) $(E) "[RUN] Testing channel_filter_test" $(Q) $(BINDIR)/$(CONFIG)/channel_filter_test || ( echo test channel_filter_test failed ; exit 1 ) $(E) "[RUN] Testing channel_trace_test" $(Q) $(BINDIR)/$(CONFIG)/channel_trace_test || ( echo test channel_trace_test failed ; exit 1 ) $(E) "[RUN] Testing channelz_registry_test" $(Q) $(BINDIR)/$(CONFIG)/channelz_registry_test || ( echo test channelz_registry_test failed ; exit 1 ) $(E) "[RUN] Testing channelz_service_test" $(Q) $(BINDIR)/$(CONFIG)/channelz_service_test || ( echo test channelz_service_test failed ; exit 1 ) $(E) "[RUN] Testing channelz_test" $(Q) $(BINDIR)/$(CONFIG)/channelz_test || ( echo test channelz_test failed ; exit 1 ) $(E) "[RUN] Testing cli_call_test" $(Q) $(BINDIR)/$(CONFIG)/cli_call_test || ( echo test cli_call_test failed ; exit 1 ) $(E) "[RUN] Testing client_callback_end2end_test" $(Q) $(BINDIR)/$(CONFIG)/client_callback_end2end_test || ( echo test client_callback_end2end_test failed ; exit 1 ) $(E) "[RUN] Testing client_interceptors_end2end_test" $(Q) $(BINDIR)/$(CONFIG)/client_interceptors_end2end_test || ( echo test client_interceptors_end2end_test failed ; exit 1 ) $(E) "[RUN] Testing codegen_test_full" $(Q) $(BINDIR)/$(CONFIG)/codegen_test_full || ( echo test codegen_test_full failed ; exit 1 ) $(E) "[RUN] Testing codegen_test_minimal" $(Q) $(BINDIR)/$(CONFIG)/codegen_test_minimal || ( echo test codegen_test_minimal failed ; exit 1 ) $(E) "[RUN] Testing connection_prefix_bad_client_test" $(Q) $(BINDIR)/$(CONFIG)/connection_prefix_bad_client_test || ( echo test connection_prefix_bad_client_test failed ; exit 1 ) $(E) "[RUN] Testing connectivity_state_test" $(Q) $(BINDIR)/$(CONFIG)/connectivity_state_test || ( echo test connectivity_state_test failed ; exit 1 ) $(E) "[RUN] Testing context_list_test" $(Q) $(BINDIR)/$(CONFIG)/context_list_test || ( echo test context_list_test failed ; exit 1 ) $(E) "[RUN] Testing delegating_channel_test" $(Q) $(BINDIR)/$(CONFIG)/delegating_channel_test || ( echo test delegating_channel_test failed ; exit 1 ) $(E) "[RUN] Testing destroy_grpclb_channel_with_active_connect_stress_test" $(Q) $(BINDIR)/$(CONFIG)/destroy_grpclb_channel_with_active_connect_stress_test || ( echo test destroy_grpclb_channel_with_active_connect_stress_test failed ; exit 1 ) $(E) "[RUN] Testing duplicate_header_bad_client_test" $(Q) $(BINDIR)/$(CONFIG)/duplicate_header_bad_client_test || ( echo test duplicate_header_bad_client_test failed ; exit 1 ) $(E) "[RUN] Testing error_details_test" $(Q) $(BINDIR)/$(CONFIG)/error_details_test || ( echo test error_details_test failed ; exit 1 ) $(E) "[RUN] Testing eventmanager_libuv_test" $(Q) $(BINDIR)/$(CONFIG)/eventmanager_libuv_test || ( echo test eventmanager_libuv_test failed ; exit 1 ) $(E) "[RUN] Testing exception_test" $(Q) $(BINDIR)/$(CONFIG)/exception_test || ( echo test exception_test failed ; exit 1 ) $(E) "[RUN] Testing filter_end2end_test" $(Q) $(BINDIR)/$(CONFIG)/filter_end2end_test || ( echo test filter_end2end_test failed ; exit 1 ) $(E) "[RUN] Testing generic_end2end_test" $(Q) $(BINDIR)/$(CONFIG)/generic_end2end_test || ( echo test generic_end2end_test failed ; exit 1 ) $(E) "[RUN] Testing global_config_env_test" $(Q) $(BINDIR)/$(CONFIG)/global_config_env_test || ( echo test global_config_env_test failed ; exit 1 ) $(E) "[RUN] Testing global_config_test" $(Q) $(BINDIR)/$(CONFIG)/global_config_test || ( echo test global_config_test failed ; exit 1 ) $(E) "[RUN] Testing grpc_tls_credentials_options_test" $(Q) $(BINDIR)/$(CONFIG)/grpc_tls_credentials_options_test || ( echo test grpc_tls_credentials_options_test failed ; exit 1 ) $(E) "[RUN] Testing grpc_tool_test" $(Q) $(BINDIR)/$(CONFIG)/grpc_tool_test || ( echo test grpc_tool_test failed ; exit 1 ) $(E) "[RUN] Testing grpclb_api_test" $(Q) $(BINDIR)/$(CONFIG)/grpclb_api_test || ( echo test grpclb_api_test failed ; exit 1 ) $(E) "[RUN] Testing h2_ssl_session_reuse_test" $(Q) $(BINDIR)/$(CONFIG)/h2_ssl_session_reuse_test || ( echo test h2_ssl_session_reuse_test failed ; exit 1 ) $(E) "[RUN] Testing head_of_line_blocking_bad_client_test" $(Q) $(BINDIR)/$(CONFIG)/head_of_line_blocking_bad_client_test || ( echo test head_of_line_blocking_bad_client_test failed ; exit 1 ) $(E) "[RUN] Testing headers_bad_client_test" $(Q) $(BINDIR)/$(CONFIG)/headers_bad_client_test || ( echo test headers_bad_client_test failed ; exit 1 ) $(E) "[RUN] Testing health_service_end2end_test" $(Q) $(BINDIR)/$(CONFIG)/health_service_end2end_test || ( echo test health_service_end2end_test failed ; exit 1 ) $(E) "[RUN] Testing hybrid_end2end_test" $(Q) $(BINDIR)/$(CONFIG)/hybrid_end2end_test || ( echo test hybrid_end2end_test failed ; exit 1 ) $(E) "[RUN] Testing initial_settings_frame_bad_client_test" $(Q) $(BINDIR)/$(CONFIG)/initial_settings_frame_bad_client_test || ( echo test initial_settings_frame_bad_client_test failed ; exit 1 ) $(E) "[RUN] Testing interop_test" $(Q) $(BINDIR)/$(CONFIG)/interop_test || ( echo test interop_test failed ; exit 1 ) $(E) "[RUN] Testing json_test" $(Q) $(BINDIR)/$(CONFIG)/json_test || ( echo test json_test failed ; exit 1 ) $(E) "[RUN] Testing large_metadata_bad_client_test" $(Q) $(BINDIR)/$(CONFIG)/large_metadata_bad_client_test || ( echo test large_metadata_bad_client_test failed ; exit 1 ) $(E) "[RUN] Testing lb_get_cpu_stats_test" $(Q) $(BINDIR)/$(CONFIG)/lb_get_cpu_stats_test || ( echo test lb_get_cpu_stats_test failed ; exit 1 ) $(E) "[RUN] Testing lb_load_data_store_test" $(Q) $(BINDIR)/$(CONFIG)/lb_load_data_store_test || ( echo test lb_load_data_store_test failed ; exit 1 ) $(E) "[RUN] Testing linux_system_roots_test" $(Q) $(BINDIR)/$(CONFIG)/linux_system_roots_test || ( echo test linux_system_roots_test failed ; exit 1 ) $(E) "[RUN] Testing message_allocator_end2end_test" $(Q) $(BINDIR)/$(CONFIG)/message_allocator_end2end_test || ( echo test message_allocator_end2end_test failed ; exit 1 ) $(E) "[RUN] Testing mock_test" $(Q) $(BINDIR)/$(CONFIG)/mock_test || ( echo test mock_test failed ; exit 1 ) $(E) "[RUN] Testing nonblocking_test" $(Q) $(BINDIR)/$(CONFIG)/nonblocking_test || ( echo test nonblocking_test failed ; exit 1 ) $(E) "[RUN] Testing noop-benchmark" $(Q) $(BINDIR)/$(CONFIG)/noop-benchmark || ( echo test noop-benchmark failed ; exit 1 ) $(E) "[RUN] Testing orphanable_test" $(Q) $(BINDIR)/$(CONFIG)/orphanable_test || ( echo test orphanable_test failed ; exit 1 ) $(E) "[RUN] Testing out_of_bounds_bad_client_test" $(Q) $(BINDIR)/$(CONFIG)/out_of_bounds_bad_client_test || ( echo test out_of_bounds_bad_client_test failed ; exit 1 ) $(E) "[RUN] Testing pid_controller_test" $(Q) $(BINDIR)/$(CONFIG)/pid_controller_test || ( echo test pid_controller_test failed ; exit 1 ) $(E) "[RUN] Testing port_sharing_end2end_test" $(Q) $(BINDIR)/$(CONFIG)/port_sharing_end2end_test || ( echo test port_sharing_end2end_test failed ; exit 1 ) $(E) "[RUN] Testing proto_server_reflection_test" $(Q) $(BINDIR)/$(CONFIG)/proto_server_reflection_test || ( echo test proto_server_reflection_test failed ; exit 1 ) $(E) "[RUN] Testing proto_utils_test" $(Q) $(BINDIR)/$(CONFIG)/proto_utils_test || ( echo test proto_utils_test failed ; exit 1 ) $(E) "[RUN] Testing raw_end2end_test" $(Q) $(BINDIR)/$(CONFIG)/raw_end2end_test || ( echo test raw_end2end_test failed ; exit 1 ) $(E) "[RUN] Testing ref_counted_ptr_test" $(Q) $(BINDIR)/$(CONFIG)/ref_counted_ptr_test || ( echo test ref_counted_ptr_test failed ; exit 1 ) $(E) "[RUN] Testing ref_counted_test" $(Q) $(BINDIR)/$(CONFIG)/ref_counted_test || ( echo test ref_counted_test failed ; exit 1 ) $(E) "[RUN] Testing retry_throttle_test" $(Q) $(BINDIR)/$(CONFIG)/retry_throttle_test || ( echo test retry_throttle_test failed ; exit 1 ) $(E) "[RUN] Testing secure_auth_context_test" $(Q) $(BINDIR)/$(CONFIG)/secure_auth_context_test || ( echo test secure_auth_context_test failed ; exit 1 ) $(E) "[RUN] Testing server_builder_plugin_test" $(Q) $(BINDIR)/$(CONFIG)/server_builder_plugin_test || ( echo test server_builder_plugin_test failed ; exit 1 ) $(E) "[RUN] Testing server_builder_test" $(Q) $(BINDIR)/$(CONFIG)/server_builder_test || ( echo test server_builder_test failed ; exit 1 ) $(E) "[RUN] Testing server_builder_with_socket_mutator_test" $(Q) $(BINDIR)/$(CONFIG)/server_builder_with_socket_mutator_test || ( echo test server_builder_with_socket_mutator_test failed ; exit 1 ) $(E) "[RUN] Testing server_context_test_spouse_test" $(Q) $(BINDIR)/$(CONFIG)/server_context_test_spouse_test || ( echo test server_context_test_spouse_test failed ; exit 1 ) $(E) "[RUN] Testing server_early_return_test" $(Q) $(BINDIR)/$(CONFIG)/server_early_return_test || ( echo test server_early_return_test failed ; exit 1 ) $(E) "[RUN] Testing server_interceptors_end2end_test" $(Q) $(BINDIR)/$(CONFIG)/server_interceptors_end2end_test || ( echo test server_interceptors_end2end_test failed ; exit 1 ) $(E) "[RUN] Testing server_registered_method_bad_client_test" $(Q) $(BINDIR)/$(CONFIG)/server_registered_method_bad_client_test || ( echo test server_registered_method_bad_client_test failed ; exit 1 ) $(E) "[RUN] Testing server_request_call_test" $(Q) $(BINDIR)/$(CONFIG)/server_request_call_test || ( echo test server_request_call_test failed ; exit 1 ) $(E) "[RUN] Testing service_config_end2end_test" $(Q) $(BINDIR)/$(CONFIG)/service_config_end2end_test || ( echo test service_config_end2end_test failed ; exit 1 ) $(E) "[RUN] Testing service_config_test" $(Q) $(BINDIR)/$(CONFIG)/service_config_test || ( echo test service_config_test failed ; exit 1 ) $(E) "[RUN] Testing shutdown_test" $(Q) $(BINDIR)/$(CONFIG)/shutdown_test || ( echo test shutdown_test failed ; exit 1 ) $(E) "[RUN] Testing simple_request_bad_client_test" $(Q) $(BINDIR)/$(CONFIG)/simple_request_bad_client_test || ( echo test simple_request_bad_client_test failed ; exit 1 ) $(E) "[RUN] Testing slice_hash_table_test" $(Q) $(BINDIR)/$(CONFIG)/slice_hash_table_test || ( echo test slice_hash_table_test failed ; exit 1 ) $(E) "[RUN] Testing slice_weak_hash_table_test" $(Q) $(BINDIR)/$(CONFIG)/slice_weak_hash_table_test || ( echo test slice_weak_hash_table_test failed ; exit 1 ) $(E) "[RUN] Testing static_metadata_test" $(Q) $(BINDIR)/$(CONFIG)/static_metadata_test || ( echo test static_metadata_test failed ; exit 1 ) $(E) "[RUN] Testing stats_test" $(Q) $(BINDIR)/$(CONFIG)/stats_test || ( echo test stats_test failed ; exit 1 ) $(E) "[RUN] Testing status_metadata_test" $(Q) $(BINDIR)/$(CONFIG)/status_metadata_test || ( echo test status_metadata_test failed ; exit 1 ) $(E) "[RUN] Testing status_util_test" $(Q) $(BINDIR)/$(CONFIG)/status_util_test || ( echo test status_util_test failed ; exit 1 ) $(E) "[RUN] Testing streaming_throughput_test" $(Q) $(BINDIR)/$(CONFIG)/streaming_throughput_test || ( echo test streaming_throughput_test failed ; exit 1 ) $(E) "[RUN] Testing string_ref_test" $(Q) $(BINDIR)/$(CONFIG)/string_ref_test || ( echo test string_ref_test failed ; exit 1 ) $(E) "[RUN] Testing test_cpp_client_credentials_test" $(Q) $(BINDIR)/$(CONFIG)/test_cpp_client_credentials_test || ( echo test test_cpp_client_credentials_test failed ; exit 1 ) $(E) "[RUN] Testing test_cpp_util_slice_test" $(Q) $(BINDIR)/$(CONFIG)/test_cpp_util_slice_test || ( echo test test_cpp_util_slice_test failed ; exit 1 ) $(E) "[RUN] Testing test_cpp_util_time_test" $(Q) $(BINDIR)/$(CONFIG)/test_cpp_util_time_test || ( echo test test_cpp_util_time_test failed ; exit 1 ) $(E) "[RUN] Testing thread_manager_test" $(Q) $(BINDIR)/$(CONFIG)/thread_manager_test || ( echo test thread_manager_test failed ; exit 1 ) $(E) "[RUN] Testing thread_stress_test" $(Q) $(BINDIR)/$(CONFIG)/thread_stress_test || ( echo test thread_stress_test failed ; exit 1 ) $(E) "[RUN] Testing timer_test" $(Q) $(BINDIR)/$(CONFIG)/timer_test || ( echo test timer_test failed ; exit 1 ) $(E) "[RUN] Testing tls_security_connector_test" $(Q) $(BINDIR)/$(CONFIG)/tls_security_connector_test || ( echo test tls_security_connector_test failed ; exit 1 ) $(E) "[RUN] Testing unknown_frame_bad_client_test" $(Q) $(BINDIR)/$(CONFIG)/unknown_frame_bad_client_test || ( echo test unknown_frame_bad_client_test failed ; exit 1 ) $(E) "[RUN] Testing window_overflow_bad_client_test" $(Q) $(BINDIR)/$(CONFIG)/window_overflow_bad_client_test || ( echo test window_overflow_bad_client_test failed ; exit 1 ) $(E) "[RUN] Testing work_serializer_test" $(Q) $(BINDIR)/$(CONFIG)/work_serializer_test || ( echo test work_serializer_test failed ; exit 1 ) $(E) "[RUN] Testing writes_per_rpc_test" $(Q) $(BINDIR)/$(CONFIG)/writes_per_rpc_test || ( echo test writes_per_rpc_test failed ; exit 1 ) $(E) "[RUN] Testing xds_bootstrap_test" $(Q) $(BINDIR)/$(CONFIG)/xds_bootstrap_test || ( echo test xds_bootstrap_test failed ; exit 1 ) flaky_test_cxx: buildtests_cxx test_python: static_c $(E) "[RUN] Testing python code" $(Q) tools/run_tests/run_tests.py -lpython -c$(CONFIG) tools: tools_c tools_cxx tools_c: privatelibs_c $(BINDIR)/$(CONFIG)/check_epollexclusive tools_cxx: privatelibs_cxx $(BINDIR)/$(CONFIG)/gen_hpack_tables $(BINDIR)/$(CONFIG)/gen_legal_metadata_characters $(BINDIR)/$(CONFIG)/gen_percent_encoding_tables buildbenchmarks: privatelibs benchmarks: buildbenchmarks strip: strip-static strip-shared strip-static: strip-static_c strip-static_cxx strip-shared: strip-shared_c strip-shared_cxx # TODO(nnoble): the strip target is stripping in-place, instead # of copying files in a temporary folder. # This prevents proper debugging after running make install. strip-static_c: static_c ifeq ($(CONFIG),opt) $(E) "[STRIP] Stripping libaddress_sorting.a" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(E) "[STRIP] Stripping libgpr.a" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/libgpr.a $(E) "[STRIP] Stripping libgrpc.a" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/libgrpc.a $(E) "[STRIP] Stripping libgrpc_csharp_ext.a" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a $(E) "[STRIP] Stripping libgrpc_unsecure.a" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(E) "[STRIP] Stripping libupb.a" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/libupb.a endif strip-static_cxx: static_cxx ifeq ($(CONFIG),opt) $(E) "[STRIP] Stripping libgrpc++.a" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(E) "[STRIP] Stripping libgrpc++_alts.a" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/libgrpc++_alts.a $(E) "[STRIP] Stripping libgrpc++_error_details.a" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/libgrpc++_error_details.a $(E) "[STRIP] Stripping libgrpc++_reflection.a" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(E) "[STRIP] Stripping libgrpc++_unsecure.a" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(E) "[STRIP] Stripping libgrpcpp_channelz.a" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/libgrpcpp_channelz.a endif strip-shared_c: shared_c ifeq ($(CONFIG),opt) $(E) "[STRIP] Stripping $(SHARED_PREFIX)address_sorting$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE)" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)address_sorting$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(E) "[STRIP] Stripping $(SHARED_PREFIX)gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE)" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(E) "[STRIP] Stripping $(SHARED_PREFIX)grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE)" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(E) "[STRIP] Stripping $(SHARED_PREFIX)grpc_csharp_ext$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE)" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc_csharp_ext$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(E) "[STRIP] Stripping $(SHARED_PREFIX)grpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE)" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(E) "[STRIP] Stripping $(SHARED_PREFIX)upb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE)" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)upb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) endif strip-shared_cxx: shared_cxx ifeq ($(CONFIG),opt) $(E) "[STRIP] Stripping $(SHARED_PREFIX)grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP)" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(E) "[STRIP] Stripping $(SHARED_PREFIX)grpc++_alts$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP)" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_alts$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(E) "[STRIP] Stripping $(SHARED_PREFIX)grpc++_error_details$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP)" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_error_details$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(E) "[STRIP] Stripping $(SHARED_PREFIX)grpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP)" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(E) "[STRIP] Stripping $(SHARED_PREFIX)grpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP)" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(E) "[STRIP] Stripping $(SHARED_PREFIX)grpcpp_channelz$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP)" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpcpp_channelz$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) endif strip-shared_csharp: shared_csharp ifeq ($(CONFIG),opt) endif cache.mk:: $(E) "[MAKE] Generating $@" $(Q) echo "$(CACHE_MK)" | tr , '\n' >$@ $(LIBDIR)/$(CONFIG)/pkgconfig/gpr.pc: $(E) "[MAKE] Generating $@" $(Q) mkdir -p $(@D) $(Q) echo "$(GPR_PC_FILE)" | tr , '\n' >$@ $(LIBDIR)/$(CONFIG)/pkgconfig/grpc.pc: $(E) "[MAKE] Generating $@" $(Q) mkdir -p $(@D) $(Q) echo "$(GRPC_PC_FILE)" | tr , '\n' >$@ $(LIBDIR)/$(CONFIG)/pkgconfig/grpc_unsecure.pc: $(E) "[MAKE] Generating $@" $(Q) mkdir -p $(@D) $(Q) echo "$(GRPC_UNSECURE_PC_FILE)" | tr , '\n' >$@ $(LIBDIR)/$(CONFIG)/pkgconfig/grpc++.pc: $(E) "[MAKE] Generating $@" $(Q) mkdir -p $(@D) $(Q) echo "$(GRPCXX_PC_FILE)" | tr , '\n' >$@ $(LIBDIR)/$(CONFIG)/pkgconfig/grpc++_unsecure.pc: $(E) "[MAKE] Generating $@" $(Q) mkdir -p $(@D) $(Q) echo "$(GRPCXX_UNSECURE_PC_FILE)" | tr , '\n' >$@ ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/channelz/channelz.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/channelz/channelz.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/channelz/channelz.pb.cc: src/proto/grpc/channelz/channelz.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/channelz/channelz.grpc.pb.cc: src/proto/grpc/channelz/channelz.proto $(GENDIR)/src/proto/grpc/channelz/channelz.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/core/stats.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/core/stats.pb.cc: src/proto/grpc/core/stats.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc: src/proto/grpc/core/stats.proto $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/health/v1/health.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/health/v1/health.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/health/v1/health.pb.cc: src/proto/grpc/health/v1/health.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/health/v1/health.grpc.pb.cc: src/proto/grpc/health/v1/health.proto $(GENDIR)/src/proto/grpc/health/v1/health.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.pb.cc: src/proto/grpc/lb/v1/load_balancer.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc: src/proto/grpc/lb/v1/load_balancer.proto $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc: src/proto/grpc/reflection/v1alpha/reflection.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc: src/proto/grpc/reflection/v1alpha/reflection.proto $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/status/status.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/status/status.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/status/status.pb.cc: src/proto/grpc/status/status.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/status/status.grpc.pb.cc: src/proto/grpc/status/status.proto $(GENDIR)/src/proto/grpc/status/status.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc: src/proto/grpc/testing/benchmark_service.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc: src/proto/grpc/testing/benchmark_service.proto $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/testing/control.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/testing/control.pb.cc: src/proto/grpc/testing/control.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc: src/proto/grpc/testing/control.proto $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc: src/proto/grpc/testing/duplicate/echo_duplicate.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc: src/proto/grpc/testing/duplicate/echo_duplicate.proto $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/testing/echo.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/testing/echo.pb.cc: src/proto/grpc/testing/echo.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc: src/proto/grpc/testing/echo.proto $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=generate_mock_code=true:$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc: src/proto/grpc/testing/echo_messages.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc: src/proto/grpc/testing/echo_messages.proto $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/testing/empty.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/testing/empty.pb.cc: src/proto/grpc/testing/empty.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc: src/proto/grpc/testing/empty.proto $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/testing/messages.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/testing/messages.pb.cc: src/proto/grpc/testing/messages.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc: src/proto/grpc/testing/messages.proto $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc: src/proto/grpc/testing/payloads.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc: src/proto/grpc/testing/payloads.proto $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.pb.cc: src/proto/grpc/testing/report_qps_scenario_service.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.grpc.pb.cc: src/proto/grpc/testing/report_qps_scenario_service.proto $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc: src/proto/grpc/testing/simple_messages.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc: src/proto/grpc/testing/simple_messages.proto $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/testing/stats.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/testing/stats.pb.cc: src/proto/grpc/testing/stats.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc: src/proto/grpc/testing/stats.proto $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/testing/test.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/testing/test.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/testing/test.pb.cc: src/proto/grpc/testing/test.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/test.grpc.pb.cc: src/proto/grpc/testing/test.proto $(GENDIR)/src/proto/grpc/testing/test.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc: src/proto/grpc/testing/worker_service.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc: src/proto/grpc/testing/worker_service.proto $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/testing/xds/ads_for_test.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/testing/xds/ads_for_test.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/testing/xds/ads_for_test.pb.cc: src/proto/grpc/testing/xds/ads_for_test.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/xds/eds_for_test.pb.cc $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/xds/ads_for_test.grpc.pb.cc: src/proto/grpc/testing/xds/ads_for_test.proto $(GENDIR)/src/proto/grpc/testing/xds/ads_for_test.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/xds/eds_for_test.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/eds_for_test.grpc.pb.cc $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/testing/xds/cds_for_test.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/testing/xds/cds_for_test.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/testing/xds/cds_for_test.pb.cc: src/proto/grpc/testing/xds/cds_for_test.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/xds/cds_for_test.grpc.pb.cc: src/proto/grpc/testing/xds/cds_for_test.proto $(GENDIR)/src/proto/grpc/testing/xds/cds_for_test.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/testing/xds/eds_for_test.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/testing/xds/eds_for_test.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/testing/xds/eds_for_test.pb.cc: src/proto/grpc/testing/xds/eds_for_test.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/xds/eds_for_test.grpc.pb.cc: src/proto/grpc/testing/xds/eds_for_test.proto $(GENDIR)/src/proto/grpc/testing/xds/eds_for_test.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/testing/xds/lds_rds_for_test.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/testing/xds/lds_rds_for_test.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/testing/xds/lds_rds_for_test.pb.cc: src/proto/grpc/testing/xds/lds_rds_for_test.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/xds/cds_for_test.pb.cc $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/xds/lds_rds_for_test.grpc.pb.cc: src/proto/grpc/testing/xds/lds_rds_for_test.proto $(GENDIR)/src/proto/grpc/testing/xds/lds_rds_for_test.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/xds/cds_for_test.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/cds_for_test.grpc.pb.cc $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/testing/xds/lrs_for_test.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/testing/xds/lrs_for_test.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/testing/xds/lrs_for_test.pb.cc: src/proto/grpc/testing/xds/lrs_for_test.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/xds/eds_for_test.pb.cc $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/xds/lrs_for_test.grpc.pb.cc: src/proto/grpc/testing/xds/lrs_for_test.proto $(GENDIR)/src/proto/grpc/testing/xds/lrs_for_test.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/xds/eds_for_test.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/eds_for_test.grpc.pb.cc $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/testing/xds/orca_load_report_for_test.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/testing/xds/orca_load_report_for_test.grpc.pb.cc: protoc_dep_error else $(GENDIR)/src/proto/grpc/testing/xds/orca_load_report_for_test.pb.cc: src/proto/grpc/testing/xds/orca_load_report_for_test.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/xds/orca_load_report_for_test.grpc.pb.cc: src/proto/grpc/testing/xds/orca_load_report_for_test.proto $(GENDIR)/src/proto/grpc/testing/xds/orca_load_report_for_test.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/test/core/tsi/alts/fake_handshaker/handshaker.pb.cc: protoc_dep_error $(GENDIR)/test/core/tsi/alts/fake_handshaker/handshaker.grpc.pb.cc: protoc_dep_error else $(GENDIR)/test/core/tsi/alts/fake_handshaker/handshaker.pb.cc: test/core/tsi/alts/fake_handshaker/handshaker.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/test/core/tsi/alts/fake_handshaker/handshaker.grpc.pb.cc: test/core/tsi/alts/fake_handshaker/handshaker.proto $(GENDIR)/test/core/tsi/alts/fake_handshaker/handshaker.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(NO_PROTOC),true) $(GENDIR)/test/core/tsi/alts/fake_handshaker/transport_security_common.pb.cc: protoc_dep_error $(GENDIR)/test/core/tsi/alts/fake_handshaker/transport_security_common.grpc.pb.cc: protoc_dep_error else $(GENDIR)/test/core/tsi/alts/fake_handshaker/transport_security_common.pb.cc: test/core/tsi/alts/fake_handshaker/transport_security_common.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/test/core/tsi/alts/fake_handshaker/transport_security_common.grpc.pb.cc: test/core/tsi/alts/fake_handshaker/transport_security_common.proto $(GENDIR)/test/core/tsi/alts/fake_handshaker/transport_security_common.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< endif ifeq ($(CONFIG),stapprof) src/core/profiling/stap_timers.c: $(GENDIR)/src/core/profiling/stap_probes.h ifeq ($(HAS_SYSTEMTAP),true) $(GENDIR)/src/core/profiling/stap_probes.h: src/core/profiling/stap_probes.d $(E) "[DTRACE] Compiling $<" $(Q) mkdir -p `dirname $@` $(Q) $(DTRACE) -C -h -s $< -o $@ else $(GENDIR)/src/core/profiling/stap_probes.h: systemtap_dep_error stop endif endif $(OBJDIR)/$(CONFIG)/%.o : %.c $(E) "[C] Compiling $<" $(Q) mkdir -p `dirname $@` $(Q) $(CC) $(CPPFLAGS) $(CFLAGS) -MMD -MF $(addsuffix .dep, $(basename $@)) -c -o $@ $< $(OBJDIR)/$(CONFIG)/%.o : $(GENDIR)/%.pb.cc $(E) "[CXX] Compiling $<" $(Q) mkdir -p `dirname $@` $(Q) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -MMD -MF $(addsuffix .dep, $(basename $@)) -c -o $@ $< $(OBJDIR)/$(CONFIG)/src/compiler/%.o : src/compiler/%.cc $(E) "[HOSTCXX] Compiling $<" $(Q) mkdir -p `dirname $@` $(Q) $(HOST_CXX) $(HOST_CXXFLAGS) $(HOST_CPPFLAGS) -MMD -MF $(addsuffix .dep, $(basename $@)) -c -o $@ $< $(OBJDIR)/$(CONFIG)/src/core/%.o : src/core/%.cc $(E) "[CXX] Compiling $<" $(Q) mkdir -p `dirname $@` $(Q) $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(COREFLAGS) -MMD -MF $(addsuffix .dep, $(basename $@)) -c -o $@ $< $(OBJDIR)/$(CONFIG)/test/core/%.o : test/core/%.cc $(E) "[CXX] Compiling $<" $(Q) mkdir -p `dirname $@` $(Q) $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(COREFLAGS) -MMD -MF $(addsuffix .dep, $(basename $@)) -c -o $@ $< $(OBJDIR)/$(CONFIG)/%.o : %.cc $(E) "[CXX] Compiling $<" $(Q) mkdir -p `dirname $@` $(Q) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -MMD -MF $(addsuffix .dep, $(basename $@)) -c -o $@ $< $(OBJDIR)/$(CONFIG)/%.o : %.cpp $(E) "[CXX] Compiling $<" $(Q) mkdir -p `dirname $@` $(Q) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -MMD -MF $(addsuffix .dep, $(basename $@)) -c -o $@ $< install: install_c install_cxx install-plugins install-certs install_c: install-headers_c install-static_c install-shared_c install_cxx: install-headers_cxx install-static_cxx install-shared_cxx install_csharp: install-shared_csharp install_c install_grpc_csharp_ext: install_csharp install-headers: install-headers_c install-headers_cxx install-headers_c: $(E) "[INSTALL] Installing public C headers" $(Q) $(foreach h, $(PUBLIC_HEADERS_C), $(INSTALL) -d $(prefix)/$(dir $(h)) && ) exit 0 || exit 1 $(Q) $(foreach h, $(PUBLIC_HEADERS_C), $(INSTALL) $(h) $(prefix)/$(h) && ) exit 0 || exit 1 install-headers_cxx: $(E) "[INSTALL] Installing public C++ headers" $(Q) $(foreach h, $(PUBLIC_HEADERS_CXX), $(INSTALL) -d $(prefix)/$(dir $(h)) && ) exit 0 || exit 1 $(Q) $(foreach h, $(PUBLIC_HEADERS_CXX), $(INSTALL) $(h) $(prefix)/$(h) && ) exit 0 || exit 1 install-static: install-static_c install-static_cxx install-static_c: static_c strip-static_c install-pkg-config_c $(E) "[INSTALL] Installing libaddress_sorting.a" $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(prefix)/lib/libaddress_sorting.a $(E) "[INSTALL] Installing libgpr.a" $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgpr.a $(prefix)/lib/libgpr.a $(E) "[INSTALL] Installing libgrpc.a" $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpc.a $(prefix)/lib/libgrpc.a $(E) "[INSTALL] Installing libgrpc_csharp_ext.a" $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a $(prefix)/lib/libgrpc_csharp_ext.a $(E) "[INSTALL] Installing libgrpc_unsecure.a" $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(prefix)/lib/libgrpc_unsecure.a $(E) "[INSTALL] Installing libupb.a" $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libupb.a $(prefix)/lib/libupb.a install-static_cxx: static_cxx strip-static_cxx install-pkg-config_cxx $(E) "[INSTALL] Installing libgrpc++.a" $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(prefix)/lib/libgrpc++.a $(E) "[INSTALL] Installing libgrpc++_alts.a" $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpc++_alts.a $(prefix)/lib/libgrpc++_alts.a $(E) "[INSTALL] Installing libgrpc++_error_details.a" $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpc++_error_details.a $(prefix)/lib/libgrpc++_error_details.a $(E) "[INSTALL] Installing libgrpc++_reflection.a" $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(prefix)/lib/libgrpc++_reflection.a $(E) "[INSTALL] Installing libgrpc++_unsecure.a" $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(prefix)/lib/libgrpc++_unsecure.a $(E) "[INSTALL] Installing libgrpcpp_channelz.a" $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpcpp_channelz.a $(prefix)/lib/libgrpcpp_channelz.a install-shared_c: shared_c strip-shared_c install-pkg-config_c $(E) "[INSTALL] Installing $(SHARED_PREFIX)address_sorting$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE)" $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)address_sorting$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(prefix)/lib/$(SHARED_PREFIX)address_sorting$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) ifeq ($(SYSTEM),MINGW32) $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libaddress_sorting$(SHARED_VERSION_CORE)-dll.a $(prefix)/lib/libaddress_sorting.a else ifneq ($(SYSTEM),Darwin) $(Q) ln -sf $(SHARED_PREFIX)address_sorting$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(prefix)/lib/libaddress_sorting.so.10 $(Q) ln -sf $(SHARED_PREFIX)address_sorting$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(prefix)/lib/libaddress_sorting.so endif $(E) "[INSTALL] Installing $(SHARED_PREFIX)gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE)" $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(prefix)/lib/$(SHARED_PREFIX)gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) ifeq ($(SYSTEM),MINGW32) $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgpr$(SHARED_VERSION_CORE)-dll.a $(prefix)/lib/libgpr.a else ifneq ($(SYSTEM),Darwin) $(Q) ln -sf $(SHARED_PREFIX)gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(prefix)/lib/libgpr.so.10 $(Q) ln -sf $(SHARED_PREFIX)gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(prefix)/lib/libgpr.so endif $(E) "[INSTALL] Installing $(SHARED_PREFIX)grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE)" $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(prefix)/lib/$(SHARED_PREFIX)grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) ifeq ($(SYSTEM),MINGW32) $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpc$(SHARED_VERSION_CORE)-dll.a $(prefix)/lib/libgrpc.a else ifneq ($(SYSTEM),Darwin) $(Q) ln -sf $(SHARED_PREFIX)grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(prefix)/lib/libgrpc.so.10 $(Q) ln -sf $(SHARED_PREFIX)grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(prefix)/lib/libgrpc.so endif $(E) "[INSTALL] Installing $(SHARED_PREFIX)grpc_csharp_ext$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE)" $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc_csharp_ext$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(prefix)/lib/$(SHARED_PREFIX)grpc_csharp_ext$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) ifeq ($(SYSTEM),MINGW32) $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext$(SHARED_VERSION_CORE)-dll.a $(prefix)/lib/libgrpc_csharp_ext.a else ifneq ($(SYSTEM),Darwin) $(Q) ln -sf $(SHARED_PREFIX)grpc_csharp_ext$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(prefix)/lib/libgrpc_csharp_ext.so.10 $(Q) ln -sf $(SHARED_PREFIX)grpc_csharp_ext$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(prefix)/lib/libgrpc_csharp_ext.so endif $(E) "[INSTALL] Installing $(SHARED_PREFIX)grpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE)" $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(prefix)/lib/$(SHARED_PREFIX)grpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) ifeq ($(SYSTEM),MINGW32) $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpc_unsecure$(SHARED_VERSION_CORE)-dll.a $(prefix)/lib/libgrpc_unsecure.a else ifneq ($(SYSTEM),Darwin) $(Q) ln -sf $(SHARED_PREFIX)grpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(prefix)/lib/libgrpc_unsecure.so.10 $(Q) ln -sf $(SHARED_PREFIX)grpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(prefix)/lib/libgrpc_unsecure.so endif $(E) "[INSTALL] Installing $(SHARED_PREFIX)upb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE)" $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)upb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(prefix)/lib/$(SHARED_PREFIX)upb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) ifeq ($(SYSTEM),MINGW32) $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libupb$(SHARED_VERSION_CORE)-dll.a $(prefix)/lib/libupb.a else ifneq ($(SYSTEM),Darwin) $(Q) ln -sf $(SHARED_PREFIX)upb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(prefix)/lib/libupb.so.10 $(Q) ln -sf $(SHARED_PREFIX)upb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(prefix)/lib/libupb.so endif ifneq ($(SYSTEM),MINGW32) ifneq ($(SYSTEM),Darwin) $(Q) ldconfig || true endif endif install-shared_cxx: shared_cxx strip-shared_cxx install-shared_c install-pkg-config_cxx $(E) "[INSTALL] Installing $(SHARED_PREFIX)grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP)" $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(prefix)/lib/$(SHARED_PREFIX)grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) ifeq ($(SYSTEM),MINGW32) $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpc++$(SHARED_VERSION_CPP)-dll.a $(prefix)/lib/libgrpc++.a else ifneq ($(SYSTEM),Darwin) $(Q) ln -sf $(SHARED_PREFIX)grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(prefix)/lib/libgrpc++.so.1 $(Q) ln -sf $(SHARED_PREFIX)grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(prefix)/lib/libgrpc++.so endif $(E) "[INSTALL] Installing $(SHARED_PREFIX)grpc++_alts$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP)" $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_alts$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(prefix)/lib/$(SHARED_PREFIX)grpc++_alts$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) ifeq ($(SYSTEM),MINGW32) $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpc++_alts$(SHARED_VERSION_CPP)-dll.a $(prefix)/lib/libgrpc++_alts.a else ifneq ($(SYSTEM),Darwin) $(Q) ln -sf $(SHARED_PREFIX)grpc++_alts$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(prefix)/lib/libgrpc++_alts.so.1 $(Q) ln -sf $(SHARED_PREFIX)grpc++_alts$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(prefix)/lib/libgrpc++_alts.so endif $(E) "[INSTALL] Installing $(SHARED_PREFIX)grpc++_error_details$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP)" $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_error_details$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(prefix)/lib/$(SHARED_PREFIX)grpc++_error_details$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) ifeq ($(SYSTEM),MINGW32) $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpc++_error_details$(SHARED_VERSION_CPP)-dll.a $(prefix)/lib/libgrpc++_error_details.a else ifneq ($(SYSTEM),Darwin) $(Q) ln -sf $(SHARED_PREFIX)grpc++_error_details$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(prefix)/lib/libgrpc++_error_details.so.1 $(Q) ln -sf $(SHARED_PREFIX)grpc++_error_details$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(prefix)/lib/libgrpc++_error_details.so endif $(E) "[INSTALL] Installing $(SHARED_PREFIX)grpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP)" $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(prefix)/lib/$(SHARED_PREFIX)grpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) ifeq ($(SYSTEM),MINGW32) $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpc++_reflection$(SHARED_VERSION_CPP)-dll.a $(prefix)/lib/libgrpc++_reflection.a else ifneq ($(SYSTEM),Darwin) $(Q) ln -sf $(SHARED_PREFIX)grpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(prefix)/lib/libgrpc++_reflection.so.1 $(Q) ln -sf $(SHARED_PREFIX)grpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(prefix)/lib/libgrpc++_reflection.so endif $(E) "[INSTALL] Installing $(SHARED_PREFIX)grpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP)" $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(prefix)/lib/$(SHARED_PREFIX)grpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) ifeq ($(SYSTEM),MINGW32) $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure$(SHARED_VERSION_CPP)-dll.a $(prefix)/lib/libgrpc++_unsecure.a else ifneq ($(SYSTEM),Darwin) $(Q) ln -sf $(SHARED_PREFIX)grpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(prefix)/lib/libgrpc++_unsecure.so.1 $(Q) ln -sf $(SHARED_PREFIX)grpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(prefix)/lib/libgrpc++_unsecure.so endif $(E) "[INSTALL] Installing $(SHARED_PREFIX)grpcpp_channelz$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP)" $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpcpp_channelz$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(prefix)/lib/$(SHARED_PREFIX)grpcpp_channelz$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) ifeq ($(SYSTEM),MINGW32) $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpcpp_channelz$(SHARED_VERSION_CPP)-dll.a $(prefix)/lib/libgrpcpp_channelz.a else ifneq ($(SYSTEM),Darwin) $(Q) ln -sf $(SHARED_PREFIX)grpcpp_channelz$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(prefix)/lib/libgrpcpp_channelz.so.1 $(Q) ln -sf $(SHARED_PREFIX)grpcpp_channelz$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(prefix)/lib/libgrpcpp_channelz.so endif ifneq ($(SYSTEM),MINGW32) ifneq ($(SYSTEM),Darwin) $(Q) ldconfig || true endif endif install-shared_csharp: shared_csharp strip-shared_csharp ifneq ($(SYSTEM),MINGW32) ifneq ($(SYSTEM),Darwin) $(Q) ldconfig || true endif endif install-plugins: $(PROTOC_PLUGINS) $(E) "[INSTALL] Installing grpc protoc plugins" $(Q) $(INSTALL) -d $(prefix)/bin $(Q) $(INSTALL) $(BINDIR)/$(CONFIG)/grpc_cpp_plugin $(prefix)/bin/grpc_cpp_plugin $(Q) $(INSTALL) -d $(prefix)/bin $(Q) $(INSTALL) $(BINDIR)/$(CONFIG)/grpc_csharp_plugin $(prefix)/bin/grpc_csharp_plugin $(Q) $(INSTALL) -d $(prefix)/bin $(Q) $(INSTALL) $(BINDIR)/$(CONFIG)/grpc_node_plugin $(prefix)/bin/grpc_node_plugin $(Q) $(INSTALL) -d $(prefix)/bin $(Q) $(INSTALL) $(BINDIR)/$(CONFIG)/grpc_objective_c_plugin $(prefix)/bin/grpc_objective_c_plugin $(Q) $(INSTALL) -d $(prefix)/bin $(Q) $(INSTALL) $(BINDIR)/$(CONFIG)/grpc_php_plugin $(prefix)/bin/grpc_php_plugin $(Q) $(INSTALL) -d $(prefix)/bin $(Q) $(INSTALL) $(BINDIR)/$(CONFIG)/grpc_python_plugin $(prefix)/bin/grpc_python_plugin $(Q) $(INSTALL) -d $(prefix)/bin $(Q) $(INSTALL) $(BINDIR)/$(CONFIG)/grpc_ruby_plugin $(prefix)/bin/grpc_ruby_plugin install-grpc-cli: grpc_cli $(E) "[INSTALL] Installing grpc cli" $(Q) $(INSTALL) -d $(prefix)/bin $(Q) $(INSTALL) $(BINDIR)/$(CONFIG)/grpc_cli $(prefix)/bin/grpc_cli install-pkg-config_c: pc_c pc_c_unsecure $(E) "[INSTALL] Installing C pkg-config files" $(Q) $(INSTALL) -d $(prefix)/lib/pkgconfig $(Q) $(INSTALL) -m 0644 $(LIBDIR)/$(CONFIG)/pkgconfig/gpr.pc $(prefix)/lib/pkgconfig/gpr.pc $(Q) $(INSTALL) -m 0644 $(LIBDIR)/$(CONFIG)/pkgconfig/grpc.pc $(prefix)/lib/pkgconfig/grpc.pc $(Q) $(INSTALL) -m 0644 $(LIBDIR)/$(CONFIG)/pkgconfig/grpc_unsecure.pc $(prefix)/lib/pkgconfig/grpc_unsecure.pc install-pkg-config_cxx: pc_cxx pc_cxx_unsecure $(E) "[INSTALL] Installing C++ pkg-config files" $(Q) $(INSTALL) -d $(prefix)/lib/pkgconfig $(Q) $(INSTALL) -m 0644 $(LIBDIR)/$(CONFIG)/pkgconfig/grpc++.pc $(prefix)/lib/pkgconfig/grpc++.pc $(Q) $(INSTALL) -m 0644 $(LIBDIR)/$(CONFIG)/pkgconfig/grpc++_unsecure.pc $(prefix)/lib/pkgconfig/grpc++_unsecure.pc install-certs: etc/roots.pem $(E) "[INSTALL] Installing root certificates" $(Q) $(INSTALL) -d $(prefix)/share/grpc $(Q) $(INSTALL) etc/roots.pem $(prefix)/share/grpc/roots.pem clean: $(E) "[CLEAN] Cleaning build directories." $(Q) $(RM) -rf $(OBJDIR) $(LIBDIR) $(BINDIR) $(GENDIR) cache.mk # The various libraries LIBADDRESS_SORTING_SRC = \ third_party/address_sorting/address_sorting.c \ third_party/address_sorting/address_sorting_posix.c \ third_party/address_sorting/address_sorting_windows.c \ PUBLIC_HEADERS_C += \ LIBADDRESS_SORTING_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBADDRESS_SORTING_SRC)))) $(LIBDIR)/$(CONFIG)/libaddress_sorting.a: $(LIBADDRESS_SORTING_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBADDRESS_SORTING_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libaddress_sorting.a endif ifeq ($(SYSTEM),MINGW32) $(LIBDIR)/$(CONFIG)/address_sorting$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBADDRESS_SORTING_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/address_sorting$(SHARED_VERSION_CORE).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libaddress_sorting$(SHARED_VERSION_CORE)-dll.a -o $(LIBDIR)/$(CONFIG)/address_sorting$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBADDRESS_SORTING_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBS) else $(LIBDIR)/$(CONFIG)/libaddress_sorting$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBADDRESS_SORTING_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` ifeq ($(SYSTEM),Darwin) $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)address_sorting$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libaddress_sorting$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBADDRESS_SORTING_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBS) else $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libaddress_sorting.so.10 -o $(LIBDIR)/$(CONFIG)/libaddress_sorting$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBADDRESS_SORTING_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBS) $(Q) ln -sf $(SHARED_PREFIX)address_sorting$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libaddress_sorting$(SHARED_VERSION_CORE).so.10 $(Q) ln -sf $(SHARED_PREFIX)address_sorting$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libaddress_sorting$(SHARED_VERSION_CORE).so endif endif ifneq ($(NO_DEPS),true) -include $(LIBADDRESS_SORTING_OBJS:.o=.dep) endif LIBEND2END_NOSEC_TESTS_SRC = \ test/core/end2end/cq_verifier.cc \ test/core/end2end/data/client_certs.cc \ test/core/end2end/data/server1_cert.cc \ test/core/end2end/data/server1_key.cc \ test/core/end2end/data/test_root_cert.cc \ test/core/end2end/end2end_nosec_tests.cc \ test/core/end2end/end2end_test_utils.cc \ test/core/end2end/fixtures/http_proxy_fixture.cc \ test/core/end2end/fixtures/local_util.cc \ test/core/end2end/fixtures/proxy.cc \ test/core/end2end/tests/authority_not_supported.cc \ test/core/end2end/tests/bad_hostname.cc \ test/core/end2end/tests/bad_ping.cc \ test/core/end2end/tests/binary_metadata.cc \ test/core/end2end/tests/call_host_override.cc \ test/core/end2end/tests/cancel_after_accept.cc \ test/core/end2end/tests/cancel_after_client_done.cc \ test/core/end2end/tests/cancel_after_invoke.cc \ test/core/end2end/tests/cancel_after_round_trip.cc \ test/core/end2end/tests/cancel_before_invoke.cc \ test/core/end2end/tests/cancel_in_a_vacuum.cc \ test/core/end2end/tests/cancel_with_status.cc \ test/core/end2end/tests/channelz.cc \ test/core/end2end/tests/client_streaming.cc \ test/core/end2end/tests/compressed_payload.cc \ test/core/end2end/tests/connectivity.cc \ test/core/end2end/tests/default_host.cc \ test/core/end2end/tests/disappearing_server.cc \ test/core/end2end/tests/empty_batch.cc \ test/core/end2end/tests/filter_call_init_fails.cc \ test/core/end2end/tests/filter_causes_close.cc \ test/core/end2end/tests/filter_context.cc \ test/core/end2end/tests/filter_latency.cc \ test/core/end2end/tests/filter_status_code.cc \ test/core/end2end/tests/graceful_server_shutdown.cc \ test/core/end2end/tests/high_initial_seqno.cc \ test/core/end2end/tests/hpack_size.cc \ test/core/end2end/tests/idempotent_request.cc \ test/core/end2end/tests/invoke_large_request.cc \ test/core/end2end/tests/keepalive_timeout.cc \ test/core/end2end/tests/large_metadata.cc \ test/core/end2end/tests/max_concurrent_streams.cc \ test/core/end2end/tests/max_connection_age.cc \ test/core/end2end/tests/max_connection_idle.cc \ test/core/end2end/tests/max_message_length.cc \ test/core/end2end/tests/negative_deadline.cc \ test/core/end2end/tests/no_error_on_hotpath.cc \ test/core/end2end/tests/no_logging.cc \ test/core/end2end/tests/no_op.cc \ test/core/end2end/tests/payload.cc \ test/core/end2end/tests/ping.cc \ test/core/end2end/tests/ping_pong_streaming.cc \ test/core/end2end/tests/proxy_auth.cc \ test/core/end2end/tests/registered_call.cc \ test/core/end2end/tests/request_with_flags.cc \ test/core/end2end/tests/request_with_payload.cc \ test/core/end2end/tests/resource_quota_server.cc \ test/core/end2end/tests/retry.cc \ test/core/end2end/tests/retry_cancellation.cc \ test/core/end2end/tests/retry_disabled.cc \ test/core/end2end/tests/retry_exceeds_buffer_size_in_initial_batch.cc \ test/core/end2end/tests/retry_exceeds_buffer_size_in_subsequent_batch.cc \ test/core/end2end/tests/retry_non_retriable_status.cc \ test/core/end2end/tests/retry_non_retriable_status_before_recv_trailing_metadata_started.cc \ test/core/end2end/tests/retry_recv_initial_metadata.cc \ test/core/end2end/tests/retry_recv_message.cc \ test/core/end2end/tests/retry_server_pushback_delay.cc \ test/core/end2end/tests/retry_server_pushback_disabled.cc \ test/core/end2end/tests/retry_streaming.cc \ test/core/end2end/tests/retry_streaming_after_commit.cc \ test/core/end2end/tests/retry_streaming_succeeds_before_replay_finished.cc \ test/core/end2end/tests/retry_throttled.cc \ test/core/end2end/tests/retry_too_many_attempts.cc \ test/core/end2end/tests/server_finishes_request.cc \ test/core/end2end/tests/shutdown_finishes_calls.cc \ test/core/end2end/tests/shutdown_finishes_tags.cc \ test/core/end2end/tests/simple_cacheable_request.cc \ test/core/end2end/tests/simple_delayed_request.cc \ test/core/end2end/tests/simple_metadata.cc \ test/core/end2end/tests/simple_request.cc \ test/core/end2end/tests/stream_compression_compressed_payload.cc \ test/core/end2end/tests/stream_compression_payload.cc \ test/core/end2end/tests/stream_compression_ping_pong_streaming.cc \ test/core/end2end/tests/streaming_error_response.cc \ test/core/end2end/tests/trailing_metadata.cc \ test/core/end2end/tests/workaround_cronet_compression.cc \ test/core/end2end/tests/write_buffering.cc \ test/core/end2end/tests/write_buffering_at_end.cc \ PUBLIC_HEADERS_C += \ LIBEND2END_NOSEC_TESTS_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_NOSEC_TESTS_SRC)))) $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(LIBEND2END_NOSEC_TESTS_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a $(LIBEND2END_NOSEC_TESTS_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a endif ifneq ($(NO_DEPS),true) -include $(LIBEND2END_NOSEC_TESTS_OBJS:.o=.dep) endif LIBEND2END_TESTS_SRC = \ test/core/end2end/cq_verifier.cc \ test/core/end2end/data/client_certs.cc \ test/core/end2end/data/server1_cert.cc \ test/core/end2end/data/server1_key.cc \ test/core/end2end/data/test_root_cert.cc \ test/core/end2end/end2end_test_utils.cc \ test/core/end2end/end2end_tests.cc \ test/core/end2end/fixtures/http_proxy_fixture.cc \ test/core/end2end/fixtures/local_util.cc \ test/core/end2end/fixtures/proxy.cc \ test/core/end2end/tests/authority_not_supported.cc \ test/core/end2end/tests/bad_hostname.cc \ test/core/end2end/tests/bad_ping.cc \ test/core/end2end/tests/binary_metadata.cc \ test/core/end2end/tests/call_creds.cc \ test/core/end2end/tests/call_host_override.cc \ test/core/end2end/tests/cancel_after_accept.cc \ test/core/end2end/tests/cancel_after_client_done.cc \ test/core/end2end/tests/cancel_after_invoke.cc \ test/core/end2end/tests/cancel_after_round_trip.cc \ test/core/end2end/tests/cancel_before_invoke.cc \ test/core/end2end/tests/cancel_in_a_vacuum.cc \ test/core/end2end/tests/cancel_with_status.cc \ test/core/end2end/tests/channelz.cc \ test/core/end2end/tests/client_streaming.cc \ test/core/end2end/tests/compressed_payload.cc \ test/core/end2end/tests/connectivity.cc \ test/core/end2end/tests/default_host.cc \ test/core/end2end/tests/disappearing_server.cc \ test/core/end2end/tests/empty_batch.cc \ test/core/end2end/tests/filter_call_init_fails.cc \ test/core/end2end/tests/filter_causes_close.cc \ test/core/end2end/tests/filter_context.cc \ test/core/end2end/tests/filter_latency.cc \ test/core/end2end/tests/filter_status_code.cc \ test/core/end2end/tests/graceful_server_shutdown.cc \ test/core/end2end/tests/high_initial_seqno.cc \ test/core/end2end/tests/hpack_size.cc \ test/core/end2end/tests/idempotent_request.cc \ test/core/end2end/tests/invoke_large_request.cc \ test/core/end2end/tests/keepalive_timeout.cc \ test/core/end2end/tests/large_metadata.cc \ test/core/end2end/tests/max_concurrent_streams.cc \ test/core/end2end/tests/max_connection_age.cc \ test/core/end2end/tests/max_connection_idle.cc \ test/core/end2end/tests/max_message_length.cc \ test/core/end2end/tests/negative_deadline.cc \ test/core/end2end/tests/no_error_on_hotpath.cc \ test/core/end2end/tests/no_logging.cc \ test/core/end2end/tests/no_op.cc \ test/core/end2end/tests/payload.cc \ test/core/end2end/tests/ping.cc \ test/core/end2end/tests/ping_pong_streaming.cc \ test/core/end2end/tests/proxy_auth.cc \ test/core/end2end/tests/registered_call.cc \ test/core/end2end/tests/request_with_flags.cc \ test/core/end2end/tests/request_with_payload.cc \ test/core/end2end/tests/resource_quota_server.cc \ test/core/end2end/tests/retry.cc \ test/core/end2end/tests/retry_cancellation.cc \ test/core/end2end/tests/retry_disabled.cc \ test/core/end2end/tests/retry_exceeds_buffer_size_in_initial_batch.cc \ test/core/end2end/tests/retry_exceeds_buffer_size_in_subsequent_batch.cc \ test/core/end2end/tests/retry_non_retriable_status.cc \ test/core/end2end/tests/retry_non_retriable_status_before_recv_trailing_metadata_started.cc \ test/core/end2end/tests/retry_recv_initial_metadata.cc \ test/core/end2end/tests/retry_recv_message.cc \ test/core/end2end/tests/retry_server_pushback_delay.cc \ test/core/end2end/tests/retry_server_pushback_disabled.cc \ test/core/end2end/tests/retry_streaming.cc \ test/core/end2end/tests/retry_streaming_after_commit.cc \ test/core/end2end/tests/retry_streaming_succeeds_before_replay_finished.cc \ test/core/end2end/tests/retry_throttled.cc \ test/core/end2end/tests/retry_too_many_attempts.cc \ test/core/end2end/tests/server_finishes_request.cc \ test/core/end2end/tests/shutdown_finishes_calls.cc \ test/core/end2end/tests/shutdown_finishes_tags.cc \ test/core/end2end/tests/simple_cacheable_request.cc \ test/core/end2end/tests/simple_delayed_request.cc \ test/core/end2end/tests/simple_metadata.cc \ test/core/end2end/tests/simple_request.cc \ test/core/end2end/tests/stream_compression_compressed_payload.cc \ test/core/end2end/tests/stream_compression_payload.cc \ test/core/end2end/tests/stream_compression_ping_pong_streaming.cc \ test/core/end2end/tests/streaming_error_response.cc \ test/core/end2end/tests/trailing_metadata.cc \ test/core/end2end/tests/workaround_cronet_compression.cc \ test/core/end2end/tests/write_buffering.cc \ test/core/end2end/tests/write_buffering_at_end.cc \ PUBLIC_HEADERS_C += \ LIBEND2END_TESTS_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_TESTS_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure libraries if you don't have OpenSSL. $(LIBDIR)/$(CONFIG)/libend2end_tests.a: openssl_dep_error else $(LIBDIR)/$(CONFIG)/libend2end_tests.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(LIBEND2END_TESTS_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_tests.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libend2end_tests.a $(LIBEND2END_TESTS_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libend2end_tests.a endif endif ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(LIBEND2END_TESTS_OBJS:.o=.dep) endif endif LIBGPR_SRC = \ src/core/lib/gpr/alloc.cc \ src/core/lib/gpr/atm.cc \ src/core/lib/gpr/cpu_iphone.cc \ src/core/lib/gpr/cpu_linux.cc \ src/core/lib/gpr/cpu_posix.cc \ src/core/lib/gpr/cpu_windows.cc \ src/core/lib/gpr/env_linux.cc \ src/core/lib/gpr/env_posix.cc \ src/core/lib/gpr/env_windows.cc \ src/core/lib/gpr/log.cc \ src/core/lib/gpr/log_android.cc \ src/core/lib/gpr/log_linux.cc \ src/core/lib/gpr/log_posix.cc \ src/core/lib/gpr/log_windows.cc \ src/core/lib/gpr/murmur_hash.cc \ src/core/lib/gpr/string.cc \ src/core/lib/gpr/string_posix.cc \ src/core/lib/gpr/string_util_windows.cc \ src/core/lib/gpr/string_windows.cc \ src/core/lib/gpr/sync.cc \ src/core/lib/gpr/sync_abseil.cc \ src/core/lib/gpr/sync_posix.cc \ src/core/lib/gpr/sync_windows.cc \ src/core/lib/gpr/time.cc \ src/core/lib/gpr/time_posix.cc \ src/core/lib/gpr/time_precise.cc \ src/core/lib/gpr/time_windows.cc \ src/core/lib/gpr/tls_pthread.cc \ src/core/lib/gpr/tmpfile_msys.cc \ src/core/lib/gpr/tmpfile_posix.cc \ src/core/lib/gpr/tmpfile_windows.cc \ src/core/lib/gpr/wrap_memcpy.cc \ src/core/lib/gprpp/arena.cc \ src/core/lib/gprpp/fork.cc \ src/core/lib/gprpp/global_config_env.cc \ src/core/lib/gprpp/host_port.cc \ src/core/lib/gprpp/mpscq.cc \ src/core/lib/gprpp/thd_posix.cc \ src/core/lib/gprpp/thd_windows.cc \ src/core/lib/profiling/basic_timers.cc \ src/core/lib/profiling/stap_timers.cc \ PUBLIC_HEADERS_C += \ include/grpc/impl/codegen/atm.h \ include/grpc/impl/codegen/atm_gcc_atomic.h \ include/grpc/impl/codegen/atm_gcc_sync.h \ include/grpc/impl/codegen/atm_windows.h \ include/grpc/impl/codegen/byte_buffer.h \ include/grpc/impl/codegen/byte_buffer_reader.h \ include/grpc/impl/codegen/compression_types.h \ include/grpc/impl/codegen/connectivity_state.h \ include/grpc/impl/codegen/fork.h \ include/grpc/impl/codegen/gpr_slice.h \ include/grpc/impl/codegen/gpr_types.h \ include/grpc/impl/codegen/grpc_types.h \ include/grpc/impl/codegen/log.h \ include/grpc/impl/codegen/port_platform.h \ include/grpc/impl/codegen/propagation_bits.h \ include/grpc/impl/codegen/slice.h \ include/grpc/impl/codegen/status.h \ include/grpc/impl/codegen/sync.h \ include/grpc/impl/codegen/sync_abseil.h \ include/grpc/impl/codegen/sync_custom.h \ include/grpc/impl/codegen/sync_generic.h \ include/grpc/impl/codegen/sync_posix.h \ include/grpc/impl/codegen/sync_windows.h \ include/grpc/support/alloc.h \ include/grpc/support/atm.h \ include/grpc/support/atm_gcc_atomic.h \ include/grpc/support/atm_gcc_sync.h \ include/grpc/support/atm_windows.h \ include/grpc/support/cpu.h \ include/grpc/support/log.h \ include/grpc/support/log_windows.h \ include/grpc/support/port_platform.h \ include/grpc/support/string_util.h \ include/grpc/support/sync.h \ include/grpc/support/sync_abseil.h \ include/grpc/support/sync_custom.h \ include/grpc/support/sync_generic.h \ include/grpc/support/sync_posix.h \ include/grpc/support/sync_windows.h \ include/grpc/support/thd_id.h \ include/grpc/support/time.h \ LIBGPR_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGPR_SRC)))) $(LIBDIR)/$(CONFIG)/libgpr.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(LIBGPR_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgpr.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBGPR_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgpr.a endif ifeq ($(SYSTEM),MINGW32) $(LIBDIR)/$(CONFIG)/gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBGPR_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/gpr$(SHARED_VERSION_CORE).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgpr$(SHARED_VERSION_CORE)-dll.a -o $(LIBDIR)/$(CONFIG)/gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGPR_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBS) else $(LIBDIR)/$(CONFIG)/libgpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBGPR_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` ifeq ($(SYSTEM),Darwin) $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGPR_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBS) else $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgpr.so.10 -o $(LIBDIR)/$(CONFIG)/libgpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGPR_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBS) $(Q) ln -sf $(SHARED_PREFIX)gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgpr$(SHARED_VERSION_CORE).so.10 $(Q) ln -sf $(SHARED_PREFIX)gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgpr$(SHARED_VERSION_CORE).so endif endif ifneq ($(NO_DEPS),true) -include $(LIBGPR_OBJS:.o=.dep) endif LIBGRPC_SRC = \ src/core/ext/filters/census/grpc_context.cc \ src/core/ext/filters/client_channel/backend_metric.cc \ src/core/ext/filters/client_channel/backup_poller.cc \ src/core/ext/filters/client_channel/channel_connectivity.cc \ src/core/ext/filters/client_channel/client_channel.cc \ src/core/ext/filters/client_channel/client_channel_channelz.cc \ src/core/ext/filters/client_channel/client_channel_factory.cc \ src/core/ext/filters/client_channel/client_channel_plugin.cc \ src/core/ext/filters/client_channel/global_subchannel_pool.cc \ src/core/ext/filters/client_channel/health/health_check_client.cc \ src/core/ext/filters/client_channel/http_connect_handshaker.cc \ src/core/ext/filters/client_channel/http_proxy.cc \ src/core/ext/filters/client_channel/lb_policy.cc \ src/core/ext/filters/client_channel/lb_policy/address_filtering.cc \ src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc \ src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc \ src/core/ext/filters/client_channel/lb_policy/priority/priority.cc \ src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc \ src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc \ src/core/ext/filters/client_channel/lb_policy/xds/cds.cc \ src/core/ext/filters/client_channel/lb_policy/xds/eds.cc \ src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc \ src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc \ src/core/ext/filters/client_channel/lb_policy_registry.cc \ src/core/ext/filters/client_channel/local_subchannel_pool.cc \ src/core/ext/filters/client_channel/parse_address.cc \ src/core/ext/filters/client_channel/proxy_mapper_registry.cc \ src/core/ext/filters/client_channel/resolver.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc \ src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc \ src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc \ src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc \ src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc \ src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc \ src/core/ext/filters/client_channel/resolver_registry.cc \ src/core/ext/filters/client_channel/resolver_result_parsing.cc \ src/core/ext/filters/client_channel/resolving_lb_policy.cc \ src/core/ext/filters/client_channel/retry_throttle.cc \ src/core/ext/filters/client_channel/server_address.cc \ src/core/ext/filters/client_channel/service_config.cc \ src/core/ext/filters/client_channel/service_config_parser.cc \ src/core/ext/filters/client_channel/subchannel.cc \ src/core/ext/filters/client_channel/subchannel_pool_interface.cc \ src/core/ext/filters/client_channel/xds/xds_api.cc \ src/core/ext/filters/client_channel/xds/xds_bootstrap.cc \ src/core/ext/filters/client_channel/xds/xds_channel_secure.cc \ src/core/ext/filters/client_channel/xds/xds_client.cc \ src/core/ext/filters/client_channel/xds/xds_client_stats.cc \ src/core/ext/filters/client_idle/client_idle_filter.cc \ src/core/ext/filters/deadline/deadline_filter.cc \ src/core/ext/filters/http/client/http_client_filter.cc \ src/core/ext/filters/http/client_authority_filter.cc \ src/core/ext/filters/http/http_filters_plugin.cc \ src/core/ext/filters/http/message_compress/message_compress_filter.cc \ src/core/ext/filters/http/message_compress/message_decompress_filter.cc \ src/core/ext/filters/http/server/http_server_filter.cc \ src/core/ext/filters/max_age/max_age_filter.cc \ src/core/ext/filters/message_size/message_size_filter.cc \ src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc \ src/core/ext/filters/workarounds/workaround_utils.cc \ src/core/ext/transport/chttp2/alpn/alpn.cc \ src/core/ext/transport/chttp2/client/authority.cc \ src/core/ext/transport/chttp2/client/chttp2_connector.cc \ src/core/ext/transport/chttp2/client/insecure/channel_create.cc \ src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc \ src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc \ src/core/ext/transport/chttp2/server/chttp2_server.cc \ src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc \ src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc \ src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc \ src/core/ext/transport/chttp2/transport/bin_decoder.cc \ src/core/ext/transport/chttp2/transport/bin_encoder.cc \ src/core/ext/transport/chttp2/transport/chttp2_plugin.cc \ src/core/ext/transport/chttp2/transport/chttp2_transport.cc \ src/core/ext/transport/chttp2/transport/context_list.cc \ src/core/ext/transport/chttp2/transport/flow_control.cc \ src/core/ext/transport/chttp2/transport/frame_data.cc \ src/core/ext/transport/chttp2/transport/frame_goaway.cc \ src/core/ext/transport/chttp2/transport/frame_ping.cc \ src/core/ext/transport/chttp2/transport/frame_rst_stream.cc \ src/core/ext/transport/chttp2/transport/frame_settings.cc \ src/core/ext/transport/chttp2/transport/frame_window_update.cc \ src/core/ext/transport/chttp2/transport/hpack_encoder.cc \ src/core/ext/transport/chttp2/transport/hpack_parser.cc \ src/core/ext/transport/chttp2/transport/hpack_table.cc \ src/core/ext/transport/chttp2/transport/http2_settings.cc \ src/core/ext/transport/chttp2/transport/huffsyms.cc \ src/core/ext/transport/chttp2/transport/incoming_metadata.cc \ src/core/ext/transport/chttp2/transport/parsing.cc \ src/core/ext/transport/chttp2/transport/stream_lists.cc \ src/core/ext/transport/chttp2/transport/stream_map.cc \ src/core/ext/transport/chttp2/transport/varint.cc \ src/core/ext/transport/chttp2/transport/writing.cc \ src/core/ext/transport/inproc/inproc_plugin.cc \ src/core/ext/transport/inproc/inproc_transport.cc \ src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c \ src/core/ext/upb-generated/envoy/annotations/resource.upb.c \ src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c \ src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c \ src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c \ src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c \ src/core/ext/upb-generated/envoy/api/v2/cds.upb.c \ src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c \ src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c \ src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c \ src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c \ src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c \ src/core/ext/upb-generated/envoy/api/v2/eds.upb.c \ src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c \ src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c \ src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c \ src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c \ src/core/ext/upb-generated/envoy/api/v2/lds.upb.c \ src/core/ext/upb-generated/envoy/api/v2/listener.upb.c \ src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c \ src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c \ src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c \ src/core/ext/upb-generated/envoy/api/v2/rds.upb.c \ src/core/ext/upb-generated/envoy/api/v2/route.upb.c \ src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c \ src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c \ src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c \ src/core/ext/upb-generated/envoy/api/v2/srds.upb.c \ src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c \ src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c \ src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c \ src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c \ src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c \ src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c \ src/core/ext/upb-generated/envoy/type/http.upb.c \ src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c \ src/core/ext/upb-generated/envoy/type/matcher/string.upb.c \ src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c \ src/core/ext/upb-generated/envoy/type/percent.upb.c \ src/core/ext/upb-generated/envoy/type/range.upb.c \ src/core/ext/upb-generated/envoy/type/semantic_version.upb.c \ src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c \ src/core/ext/upb-generated/gogoproto/gogo.upb.c \ src/core/ext/upb-generated/google/api/annotations.upb.c \ src/core/ext/upb-generated/google/api/http.upb.c \ src/core/ext/upb-generated/google/protobuf/any.upb.c \ src/core/ext/upb-generated/google/protobuf/descriptor.upb.c \ src/core/ext/upb-generated/google/protobuf/duration.upb.c \ src/core/ext/upb-generated/google/protobuf/empty.upb.c \ src/core/ext/upb-generated/google/protobuf/struct.upb.c \ src/core/ext/upb-generated/google/protobuf/timestamp.upb.c \ src/core/ext/upb-generated/google/protobuf/wrappers.upb.c \ src/core/ext/upb-generated/google/rpc/status.upb.c \ src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c \ src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c \ src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c \ src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c \ src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c \ src/core/ext/upb-generated/udpa/annotations/migrate.upb.c \ src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c \ src/core/ext/upb-generated/udpa/annotations/status.upb.c \ src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c \ src/core/ext/upb-generated/validate/validate.upb.c \ src/core/lib/avl/avl.cc \ src/core/lib/backoff/backoff.cc \ src/core/lib/channel/channel_args.cc \ src/core/lib/channel/channel_stack.cc \ src/core/lib/channel/channel_stack_builder.cc \ src/core/lib/channel/channel_trace.cc \ src/core/lib/channel/channelz.cc \ src/core/lib/channel/channelz_registry.cc \ src/core/lib/channel/connected_channel.cc \ src/core/lib/channel/handshaker.cc \ src/core/lib/channel/handshaker_registry.cc \ src/core/lib/channel/status_util.cc \ src/core/lib/compression/compression.cc \ src/core/lib/compression/compression_args.cc \ src/core/lib/compression/compression_internal.cc \ src/core/lib/compression/message_compress.cc \ src/core/lib/compression/stream_compression.cc \ src/core/lib/compression/stream_compression_gzip.cc \ src/core/lib/compression/stream_compression_identity.cc \ src/core/lib/debug/stats.cc \ src/core/lib/debug/stats_data.cc \ src/core/lib/debug/trace.cc \ src/core/lib/http/format_request.cc \ src/core/lib/http/httpcli.cc \ src/core/lib/http/httpcli_security_connector.cc \ src/core/lib/http/parser.cc \ src/core/lib/iomgr/buffer_list.cc \ src/core/lib/iomgr/call_combiner.cc \ src/core/lib/iomgr/cfstream_handle.cc \ src/core/lib/iomgr/combiner.cc \ src/core/lib/iomgr/dualstack_socket_posix.cc \ src/core/lib/iomgr/endpoint.cc \ src/core/lib/iomgr/endpoint_cfstream.cc \ src/core/lib/iomgr/endpoint_pair_posix.cc \ src/core/lib/iomgr/endpoint_pair_uv.cc \ src/core/lib/iomgr/endpoint_pair_windows.cc \ src/core/lib/iomgr/error.cc \ src/core/lib/iomgr/error_cfstream.cc \ src/core/lib/iomgr/ev_apple.cc \ src/core/lib/iomgr/ev_epoll1_linux.cc \ src/core/lib/iomgr/ev_epollex_linux.cc \ src/core/lib/iomgr/ev_poll_posix.cc \ src/core/lib/iomgr/ev_posix.cc \ src/core/lib/iomgr/ev_windows.cc \ src/core/lib/iomgr/exec_ctx.cc \ src/core/lib/iomgr/executor.cc \ src/core/lib/iomgr/executor/mpmcqueue.cc \ src/core/lib/iomgr/executor/threadpool.cc \ src/core/lib/iomgr/fork_posix.cc \ src/core/lib/iomgr/fork_windows.cc \ src/core/lib/iomgr/gethostname_fallback.cc \ src/core/lib/iomgr/gethostname_host_name_max.cc \ src/core/lib/iomgr/gethostname_sysconf.cc \ src/core/lib/iomgr/grpc_if_nametoindex_posix.cc \ src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc \ src/core/lib/iomgr/internal_errqueue.cc \ src/core/lib/iomgr/iocp_windows.cc \ src/core/lib/iomgr/iomgr.cc \ src/core/lib/iomgr/iomgr_custom.cc \ src/core/lib/iomgr/iomgr_internal.cc \ src/core/lib/iomgr/iomgr_posix.cc \ src/core/lib/iomgr/iomgr_posix_cfstream.cc \ src/core/lib/iomgr/iomgr_uv.cc \ src/core/lib/iomgr/iomgr_windows.cc \ src/core/lib/iomgr/is_epollexclusive_available.cc \ src/core/lib/iomgr/load_file.cc \ src/core/lib/iomgr/lockfree_event.cc \ src/core/lib/iomgr/poller/eventmanager_libuv.cc \ src/core/lib/iomgr/polling_entity.cc \ src/core/lib/iomgr/pollset.cc \ src/core/lib/iomgr/pollset_custom.cc \ src/core/lib/iomgr/pollset_set.cc \ src/core/lib/iomgr/pollset_set_custom.cc \ src/core/lib/iomgr/pollset_set_windows.cc \ src/core/lib/iomgr/pollset_uv.cc \ src/core/lib/iomgr/pollset_windows.cc \ src/core/lib/iomgr/resolve_address.cc \ src/core/lib/iomgr/resolve_address_custom.cc \ src/core/lib/iomgr/resolve_address_posix.cc \ src/core/lib/iomgr/resolve_address_windows.cc \ src/core/lib/iomgr/resource_quota.cc \ src/core/lib/iomgr/sockaddr_utils.cc \ src/core/lib/iomgr/socket_factory_posix.cc \ src/core/lib/iomgr/socket_mutator.cc \ src/core/lib/iomgr/socket_utils_common_posix.cc \ src/core/lib/iomgr/socket_utils_linux.cc \ src/core/lib/iomgr/socket_utils_posix.cc \ src/core/lib/iomgr/socket_utils_uv.cc \ src/core/lib/iomgr/socket_utils_windows.cc \ src/core/lib/iomgr/socket_windows.cc \ src/core/lib/iomgr/tcp_client.cc \ src/core/lib/iomgr/tcp_client_cfstream.cc \ src/core/lib/iomgr/tcp_client_custom.cc \ src/core/lib/iomgr/tcp_client_posix.cc \ src/core/lib/iomgr/tcp_client_windows.cc \ src/core/lib/iomgr/tcp_custom.cc \ src/core/lib/iomgr/tcp_posix.cc \ src/core/lib/iomgr/tcp_server.cc \ src/core/lib/iomgr/tcp_server_custom.cc \ src/core/lib/iomgr/tcp_server_posix.cc \ src/core/lib/iomgr/tcp_server_utils_posix_common.cc \ src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc \ src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc \ src/core/lib/iomgr/tcp_server_windows.cc \ src/core/lib/iomgr/tcp_uv.cc \ src/core/lib/iomgr/tcp_windows.cc \ src/core/lib/iomgr/time_averaged_stats.cc \ src/core/lib/iomgr/timer.cc \ src/core/lib/iomgr/timer_custom.cc \ src/core/lib/iomgr/timer_generic.cc \ src/core/lib/iomgr/timer_heap.cc \ src/core/lib/iomgr/timer_manager.cc \ src/core/lib/iomgr/timer_uv.cc \ src/core/lib/iomgr/udp_server.cc \ src/core/lib/iomgr/unix_sockets_posix.cc \ src/core/lib/iomgr/unix_sockets_posix_noop.cc \ src/core/lib/iomgr/wakeup_fd_eventfd.cc \ src/core/lib/iomgr/wakeup_fd_nospecial.cc \ src/core/lib/iomgr/wakeup_fd_pipe.cc \ src/core/lib/iomgr/wakeup_fd_posix.cc \ src/core/lib/iomgr/work_serializer.cc \ src/core/lib/json/json_reader.cc \ src/core/lib/json/json_writer.cc \ src/core/lib/security/context/security_context.cc \ src/core/lib/security/credentials/alts/alts_credentials.cc \ src/core/lib/security/credentials/alts/check_gcp_environment.cc \ src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc \ src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc \ src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc \ src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc \ src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc \ src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc \ src/core/lib/security/credentials/composite/composite_credentials.cc \ src/core/lib/security/credentials/credentials.cc \ src/core/lib/security/credentials/credentials_metadata.cc \ src/core/lib/security/credentials/fake/fake_credentials.cc \ src/core/lib/security/credentials/google_default/credentials_generic.cc \ src/core/lib/security/credentials/google_default/google_default_credentials.cc \ src/core/lib/security/credentials/iam/iam_credentials.cc \ src/core/lib/security/credentials/jwt/json_token.cc \ src/core/lib/security/credentials/jwt/jwt_credentials.cc \ src/core/lib/security/credentials/jwt/jwt_verifier.cc \ src/core/lib/security/credentials/local/local_credentials.cc \ src/core/lib/security/credentials/oauth2/oauth2_credentials.cc \ src/core/lib/security/credentials/plugin/plugin_credentials.cc \ src/core/lib/security/credentials/ssl/ssl_credentials.cc \ src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc \ src/core/lib/security/credentials/tls/tls_credentials.cc \ src/core/lib/security/security_connector/alts/alts_security_connector.cc \ src/core/lib/security/security_connector/fake/fake_security_connector.cc \ src/core/lib/security/security_connector/load_system_roots_fallback.cc \ src/core/lib/security/security_connector/load_system_roots_linux.cc \ src/core/lib/security/security_connector/local/local_security_connector.cc \ src/core/lib/security/security_connector/security_connector.cc \ src/core/lib/security/security_connector/ssl/ssl_security_connector.cc \ src/core/lib/security/security_connector/ssl_utils.cc \ src/core/lib/security/security_connector/ssl_utils_config.cc \ src/core/lib/security/security_connector/tls/tls_security_connector.cc \ src/core/lib/security/transport/client_auth_filter.cc \ src/core/lib/security/transport/secure_endpoint.cc \ src/core/lib/security/transport/security_handshaker.cc \ src/core/lib/security/transport/server_auth_filter.cc \ src/core/lib/security/transport/target_authority_table.cc \ src/core/lib/security/transport/tsi_error.cc \ src/core/lib/security/util/json_util.cc \ src/core/lib/slice/b64.cc \ src/core/lib/slice/percent_encoding.cc \ src/core/lib/slice/slice.cc \ src/core/lib/slice/slice_buffer.cc \ src/core/lib/slice/slice_intern.cc \ src/core/lib/slice/slice_string_helpers.cc \ src/core/lib/surface/api_trace.cc \ src/core/lib/surface/byte_buffer.cc \ src/core/lib/surface/byte_buffer_reader.cc \ src/core/lib/surface/call.cc \ src/core/lib/surface/call_details.cc \ src/core/lib/surface/call_log_batch.cc \ src/core/lib/surface/channel.cc \ src/core/lib/surface/channel_init.cc \ src/core/lib/surface/channel_ping.cc \ src/core/lib/surface/channel_stack_type.cc \ src/core/lib/surface/completion_queue.cc \ src/core/lib/surface/completion_queue_factory.cc \ src/core/lib/surface/event_string.cc \ src/core/lib/surface/init.cc \ src/core/lib/surface/init_secure.cc \ src/core/lib/surface/lame_client.cc \ src/core/lib/surface/metadata_array.cc \ src/core/lib/surface/server.cc \ src/core/lib/surface/validate_metadata.cc \ src/core/lib/surface/version.cc \ src/core/lib/transport/bdp_estimator.cc \ src/core/lib/transport/byte_stream.cc \ src/core/lib/transport/connectivity_state.cc \ src/core/lib/transport/error_utils.cc \ src/core/lib/transport/metadata.cc \ src/core/lib/transport/metadata_batch.cc \ src/core/lib/transport/pid_controller.cc \ src/core/lib/transport/static_metadata.cc \ src/core/lib/transport/status_conversion.cc \ src/core/lib/transport/status_metadata.cc \ src/core/lib/transport/timeout_encoding.cc \ src/core/lib/transport/transport.cc \ src/core/lib/transport/transport_op_string.cc \ src/core/lib/uri/uri_parser.cc \ src/core/plugin_registry/grpc_plugin_registry.cc \ src/core/tsi/alts/crypt/aes_gcm.cc \ src/core/tsi/alts/crypt/gsec.cc \ src/core/tsi/alts/frame_protector/alts_counter.cc \ src/core/tsi/alts/frame_protector/alts_crypter.cc \ src/core/tsi/alts/frame_protector/alts_frame_protector.cc \ src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc \ src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc \ src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc \ src/core/tsi/alts/frame_protector/frame_handler.cc \ src/core/tsi/alts/handshaker/alts_handshaker_client.cc \ src/core/tsi/alts/handshaker/alts_shared_resource.cc \ src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc \ src/core/tsi/alts/handshaker/alts_tsi_utils.cc \ src/core/tsi/alts/handshaker/transport_security_common_api.cc \ src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc \ src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc \ src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc \ src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc \ src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc \ src/core/tsi/fake_transport_security.cc \ src/core/tsi/local_transport_security.cc \ src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc \ src/core/tsi/ssl/session_cache/ssl_session_cache.cc \ src/core/tsi/ssl/session_cache/ssl_session_openssl.cc \ src/core/tsi/ssl_transport_security.cc \ src/core/tsi/transport_security.cc \ src/core/tsi/transport_security_grpc.cc \ PUBLIC_HEADERS_C += \ include/grpc/byte_buffer.h \ include/grpc/byte_buffer_reader.h \ include/grpc/census.h \ include/grpc/compression.h \ include/grpc/fork.h \ include/grpc/grpc.h \ include/grpc/grpc_posix.h \ include/grpc/grpc_security.h \ include/grpc/grpc_security_constants.h \ include/grpc/load_reporting.h \ include/grpc/slice.h \ include/grpc/slice_buffer.h \ include/grpc/status.h \ include/grpc/support/workaround_list.h \ LIBGRPC_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure libraries if you don't have OpenSSL. $(LIBDIR)/$(CONFIG)/libgrpc.a: openssl_dep_error $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): openssl_dep_error else $(LIBDIR)/$(CONFIG)/libgrpc.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(LIBGRPC_OBJS) $(LIBGPR_OBJS) $(LIBGRPC_ABSEIL_OBJS) $(ZLIB_MERGE_OBJS) $(CARES_MERGE_OBJS) $(ADDRESS_SORTING_MERGE_OBJS) $(UPB_MERGE_OBJS) $(OPENSSL_MERGE_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBGRPC_OBJS) $(LIBGPR_OBJS) $(LIBGRPC_ABSEIL_OBJS) $(ZLIB_MERGE_OBJS) $(CARES_MERGE_OBJS) $(ADDRESS_SORTING_MERGE_OBJS) $(UPB_MERGE_OBJS) $(OPENSSL_MERGE_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc.a endif ifeq ($(SYSTEM),MINGW32) $(LIBDIR)/$(CONFIG)/grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBGRPC_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OPENSSL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc$(SHARED_VERSION_CORE).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc$(SHARED_VERSION_CORE)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_OBJS) $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBS) else $(LIBDIR)/$(CONFIG)/libgrpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBGRPC_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OPENSSL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` ifeq ($(SYSTEM),Darwin) $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_OBJS) $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBS) else $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc.so.10 -o $(LIBDIR)/$(CONFIG)/libgrpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_OBJS) $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBS) $(Q) ln -sf $(SHARED_PREFIX)grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgrpc$(SHARED_VERSION_CORE).so.10 $(Q) ln -sf $(SHARED_PREFIX)grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgrpc$(SHARED_VERSION_CORE).so endif endif endif ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(LIBGRPC_OBJS:.o=.dep) endif endif LIBGRPC_CSHARP_EXT_SRC = \ src/csharp/ext/grpc_csharp_ext.c \ PUBLIC_HEADERS_C += \ LIBGRPC_CSHARP_EXT_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_CSHARP_EXT_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure libraries if you don't have OpenSSL. $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a: openssl_dep_error $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc_csharp_ext$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): openssl_dep_error else $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(LIBGRPC_CSHARP_EXT_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a $(LIBGRPC_CSHARP_EXT_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a endif ifeq ($(SYSTEM),MINGW32) $(LIBDIR)/$(CONFIG)/grpc_csharp_ext$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBGRPC_CSHARP_EXT_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OPENSSL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc_csharp_ext$(SHARED_VERSION_CORE).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext$(SHARED_VERSION_CORE)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc_csharp_ext$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_CSHARP_EXT_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBS) else $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBGRPC_CSHARP_EXT_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OPENSSL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` ifeq ($(SYSTEM),Darwin) $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc_csharp_ext$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_CSHARP_EXT_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBS) else $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc_csharp_ext.so.10 -o $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_CSHARP_EXT_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBS) $(Q) ln -sf $(SHARED_PREFIX)grpc_csharp_ext$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext$(SHARED_VERSION_CORE).so.10 $(Q) ln -sf $(SHARED_PREFIX)grpc_csharp_ext$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext$(SHARED_VERSION_CORE).so endif endif endif ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(LIBGRPC_CSHARP_EXT_OBJS:.o=.dep) endif endif LIBGRPC_TEST_UTIL_SRC = \ test/core/util/cmdline.cc \ test/core/util/debugger_macros.cc \ test/core/util/fuzzer_util.cc \ test/core/util/grpc_profiler.cc \ test/core/util/histogram.cc \ test/core/util/memory_counters.cc \ test/core/util/mock_endpoint.cc \ test/core/util/parse_hexstring.cc \ test/core/util/passthru_endpoint.cc \ test/core/util/port.cc \ test/core/util/port_isolated_runtime_environment.cc \ test/core/util/port_server_client.cc \ test/core/util/reconnect_server.cc \ test/core/util/slice_splitter.cc \ test/core/util/subprocess_posix.cc \ test/core/util/subprocess_windows.cc \ test/core/util/test_config.cc \ test/core/util/test_tcp_server.cc \ test/core/util/tracer_util.cc \ test/core/util/trickle_endpoint.cc \ PUBLIC_HEADERS_C += \ LIBGRPC_TEST_UTIL_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_TEST_UTIL_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure libraries if you don't have OpenSSL. $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a: openssl_dep_error else $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(LIBGRPC_TEST_UTIL_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBGRPC_TEST_UTIL_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a endif endif ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(LIBGRPC_TEST_UTIL_OBJS:.o=.dep) endif endif LIBGRPC_TEST_UTIL_UNSECURE_SRC = \ test/core/util/cmdline.cc \ test/core/util/debugger_macros.cc \ test/core/util/fuzzer_util.cc \ test/core/util/grpc_profiler.cc \ test/core/util/histogram.cc \ test/core/util/memory_counters.cc \ test/core/util/mock_endpoint.cc \ test/core/util/parse_hexstring.cc \ test/core/util/passthru_endpoint.cc \ test/core/util/port.cc \ test/core/util/port_isolated_runtime_environment.cc \ test/core/util/port_server_client.cc \ test/core/util/reconnect_server.cc \ test/core/util/slice_splitter.cc \ test/core/util/subprocess_posix.cc \ test/core/util/subprocess_windows.cc \ test/core/util/test_config.cc \ test/core/util/test_tcp_server.cc \ test/core/util/tracer_util.cc \ test/core/util/trickle_endpoint.cc \ PUBLIC_HEADERS_C += \ LIBGRPC_TEST_UTIL_UNSECURE_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_TEST_UTIL_UNSECURE_SRC)))) $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(LIBGRPC_TEST_UTIL_UNSECURE_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBGRPC_TEST_UTIL_UNSECURE_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a endif ifneq ($(NO_DEPS),true) -include $(LIBGRPC_TEST_UTIL_UNSECURE_OBJS:.o=.dep) endif LIBGRPC_UNSECURE_SRC = \ src/core/ext/filters/census/grpc_context.cc \ src/core/ext/filters/client_channel/backend_metric.cc \ src/core/ext/filters/client_channel/backup_poller.cc \ src/core/ext/filters/client_channel/channel_connectivity.cc \ src/core/ext/filters/client_channel/client_channel.cc \ src/core/ext/filters/client_channel/client_channel_channelz.cc \ src/core/ext/filters/client_channel/client_channel_factory.cc \ src/core/ext/filters/client_channel/client_channel_plugin.cc \ src/core/ext/filters/client_channel/global_subchannel_pool.cc \ src/core/ext/filters/client_channel/health/health_check_client.cc \ src/core/ext/filters/client_channel/http_connect_handshaker.cc \ src/core/ext/filters/client_channel/http_proxy.cc \ src/core/ext/filters/client_channel/lb_policy.cc \ src/core/ext/filters/client_channel/lb_policy/address_filtering.cc \ src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc \ src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc \ src/core/ext/filters/client_channel/lb_policy/priority/priority.cc \ src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc \ src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc \ src/core/ext/filters/client_channel/lb_policy/xds/cds.cc \ src/core/ext/filters/client_channel/lb_policy/xds/eds.cc \ src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc \ src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc \ src/core/ext/filters/client_channel/lb_policy_registry.cc \ src/core/ext/filters/client_channel/local_subchannel_pool.cc \ src/core/ext/filters/client_channel/parse_address.cc \ src/core/ext/filters/client_channel/proxy_mapper_registry.cc \ src/core/ext/filters/client_channel/resolver.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc \ src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc \ src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc \ src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc \ src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc \ src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc \ src/core/ext/filters/client_channel/resolver_registry.cc \ src/core/ext/filters/client_channel/resolver_result_parsing.cc \ src/core/ext/filters/client_channel/resolving_lb_policy.cc \ src/core/ext/filters/client_channel/retry_throttle.cc \ src/core/ext/filters/client_channel/server_address.cc \ src/core/ext/filters/client_channel/service_config.cc \ src/core/ext/filters/client_channel/service_config_parser.cc \ src/core/ext/filters/client_channel/subchannel.cc \ src/core/ext/filters/client_channel/subchannel_pool_interface.cc \ src/core/ext/filters/client_channel/xds/xds_api.cc \ src/core/ext/filters/client_channel/xds/xds_bootstrap.cc \ src/core/ext/filters/client_channel/xds/xds_channel.cc \ src/core/ext/filters/client_channel/xds/xds_client.cc \ src/core/ext/filters/client_channel/xds/xds_client_stats.cc \ src/core/ext/filters/client_idle/client_idle_filter.cc \ src/core/ext/filters/deadline/deadline_filter.cc \ src/core/ext/filters/http/client/http_client_filter.cc \ src/core/ext/filters/http/client_authority_filter.cc \ src/core/ext/filters/http/http_filters_plugin.cc \ src/core/ext/filters/http/message_compress/message_compress_filter.cc \ src/core/ext/filters/http/message_compress/message_decompress_filter.cc \ src/core/ext/filters/http/server/http_server_filter.cc \ src/core/ext/filters/max_age/max_age_filter.cc \ src/core/ext/filters/message_size/message_size_filter.cc \ src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc \ src/core/ext/filters/workarounds/workaround_utils.cc \ src/core/ext/transport/chttp2/alpn/alpn.cc \ src/core/ext/transport/chttp2/client/authority.cc \ src/core/ext/transport/chttp2/client/chttp2_connector.cc \ src/core/ext/transport/chttp2/client/insecure/channel_create.cc \ src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc \ src/core/ext/transport/chttp2/server/chttp2_server.cc \ src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc \ src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc \ src/core/ext/transport/chttp2/transport/bin_decoder.cc \ src/core/ext/transport/chttp2/transport/bin_encoder.cc \ src/core/ext/transport/chttp2/transport/chttp2_plugin.cc \ src/core/ext/transport/chttp2/transport/chttp2_transport.cc \ src/core/ext/transport/chttp2/transport/context_list.cc \ src/core/ext/transport/chttp2/transport/flow_control.cc \ src/core/ext/transport/chttp2/transport/frame_data.cc \ src/core/ext/transport/chttp2/transport/frame_goaway.cc \ src/core/ext/transport/chttp2/transport/frame_ping.cc \ src/core/ext/transport/chttp2/transport/frame_rst_stream.cc \ src/core/ext/transport/chttp2/transport/frame_settings.cc \ src/core/ext/transport/chttp2/transport/frame_window_update.cc \ src/core/ext/transport/chttp2/transport/hpack_encoder.cc \ src/core/ext/transport/chttp2/transport/hpack_parser.cc \ src/core/ext/transport/chttp2/transport/hpack_table.cc \ src/core/ext/transport/chttp2/transport/http2_settings.cc \ src/core/ext/transport/chttp2/transport/huffsyms.cc \ src/core/ext/transport/chttp2/transport/incoming_metadata.cc \ src/core/ext/transport/chttp2/transport/parsing.cc \ src/core/ext/transport/chttp2/transport/stream_lists.cc \ src/core/ext/transport/chttp2/transport/stream_map.cc \ src/core/ext/transport/chttp2/transport/varint.cc \ src/core/ext/transport/chttp2/transport/writing.cc \ src/core/ext/transport/inproc/inproc_plugin.cc \ src/core/ext/transport/inproc/inproc_transport.cc \ src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c \ src/core/ext/upb-generated/envoy/annotations/resource.upb.c \ src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c \ src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c \ src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c \ src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c \ src/core/ext/upb-generated/envoy/api/v2/cds.upb.c \ src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c \ src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c \ src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c \ src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c \ src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c \ src/core/ext/upb-generated/envoy/api/v2/eds.upb.c \ src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c \ src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c \ src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c \ src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c \ src/core/ext/upb-generated/envoy/api/v2/lds.upb.c \ src/core/ext/upb-generated/envoy/api/v2/listener.upb.c \ src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c \ src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c \ src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c \ src/core/ext/upb-generated/envoy/api/v2/rds.upb.c \ src/core/ext/upb-generated/envoy/api/v2/route.upb.c \ src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c \ src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c \ src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c \ src/core/ext/upb-generated/envoy/api/v2/srds.upb.c \ src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c \ src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c \ src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c \ src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c \ src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c \ src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c \ src/core/ext/upb-generated/envoy/type/http.upb.c \ src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c \ src/core/ext/upb-generated/envoy/type/matcher/string.upb.c \ src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c \ src/core/ext/upb-generated/envoy/type/percent.upb.c \ src/core/ext/upb-generated/envoy/type/range.upb.c \ src/core/ext/upb-generated/envoy/type/semantic_version.upb.c \ src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c \ src/core/ext/upb-generated/gogoproto/gogo.upb.c \ src/core/ext/upb-generated/google/api/annotations.upb.c \ src/core/ext/upb-generated/google/api/http.upb.c \ src/core/ext/upb-generated/google/protobuf/any.upb.c \ src/core/ext/upb-generated/google/protobuf/descriptor.upb.c \ src/core/ext/upb-generated/google/protobuf/duration.upb.c \ src/core/ext/upb-generated/google/protobuf/empty.upb.c \ src/core/ext/upb-generated/google/protobuf/struct.upb.c \ src/core/ext/upb-generated/google/protobuf/timestamp.upb.c \ src/core/ext/upb-generated/google/protobuf/wrappers.upb.c \ src/core/ext/upb-generated/google/rpc/status.upb.c \ src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c \ src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c \ src/core/ext/upb-generated/udpa/annotations/migrate.upb.c \ src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c \ src/core/ext/upb-generated/udpa/annotations/status.upb.c \ src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c \ src/core/ext/upb-generated/validate/validate.upb.c \ src/core/lib/avl/avl.cc \ src/core/lib/backoff/backoff.cc \ src/core/lib/channel/channel_args.cc \ src/core/lib/channel/channel_stack.cc \ src/core/lib/channel/channel_stack_builder.cc \ src/core/lib/channel/channel_trace.cc \ src/core/lib/channel/channelz.cc \ src/core/lib/channel/channelz_registry.cc \ src/core/lib/channel/connected_channel.cc \ src/core/lib/channel/handshaker.cc \ src/core/lib/channel/handshaker_registry.cc \ src/core/lib/channel/status_util.cc \ src/core/lib/compression/compression.cc \ src/core/lib/compression/compression_args.cc \ src/core/lib/compression/compression_internal.cc \ src/core/lib/compression/message_compress.cc \ src/core/lib/compression/stream_compression.cc \ src/core/lib/compression/stream_compression_gzip.cc \ src/core/lib/compression/stream_compression_identity.cc \ src/core/lib/debug/stats.cc \ src/core/lib/debug/stats_data.cc \ src/core/lib/debug/trace.cc \ src/core/lib/http/format_request.cc \ src/core/lib/http/httpcli.cc \ src/core/lib/http/parser.cc \ src/core/lib/iomgr/buffer_list.cc \ src/core/lib/iomgr/call_combiner.cc \ src/core/lib/iomgr/cfstream_handle.cc \ src/core/lib/iomgr/combiner.cc \ src/core/lib/iomgr/dualstack_socket_posix.cc \ src/core/lib/iomgr/endpoint.cc \ src/core/lib/iomgr/endpoint_cfstream.cc \ src/core/lib/iomgr/endpoint_pair_posix.cc \ src/core/lib/iomgr/endpoint_pair_uv.cc \ src/core/lib/iomgr/endpoint_pair_windows.cc \ src/core/lib/iomgr/error.cc \ src/core/lib/iomgr/error_cfstream.cc \ src/core/lib/iomgr/ev_apple.cc \ src/core/lib/iomgr/ev_epoll1_linux.cc \ src/core/lib/iomgr/ev_epollex_linux.cc \ src/core/lib/iomgr/ev_poll_posix.cc \ src/core/lib/iomgr/ev_posix.cc \ src/core/lib/iomgr/ev_windows.cc \ src/core/lib/iomgr/exec_ctx.cc \ src/core/lib/iomgr/executor.cc \ src/core/lib/iomgr/executor/mpmcqueue.cc \ src/core/lib/iomgr/executor/threadpool.cc \ src/core/lib/iomgr/fork_posix.cc \ src/core/lib/iomgr/fork_windows.cc \ src/core/lib/iomgr/gethostname_fallback.cc \ src/core/lib/iomgr/gethostname_host_name_max.cc \ src/core/lib/iomgr/gethostname_sysconf.cc \ src/core/lib/iomgr/grpc_if_nametoindex_posix.cc \ src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc \ src/core/lib/iomgr/internal_errqueue.cc \ src/core/lib/iomgr/iocp_windows.cc \ src/core/lib/iomgr/iomgr.cc \ src/core/lib/iomgr/iomgr_custom.cc \ src/core/lib/iomgr/iomgr_internal.cc \ src/core/lib/iomgr/iomgr_posix.cc \ src/core/lib/iomgr/iomgr_posix_cfstream.cc \ src/core/lib/iomgr/iomgr_uv.cc \ src/core/lib/iomgr/iomgr_windows.cc \ src/core/lib/iomgr/is_epollexclusive_available.cc \ src/core/lib/iomgr/load_file.cc \ src/core/lib/iomgr/lockfree_event.cc \ src/core/lib/iomgr/poller/eventmanager_libuv.cc \ src/core/lib/iomgr/polling_entity.cc \ src/core/lib/iomgr/pollset.cc \ src/core/lib/iomgr/pollset_custom.cc \ src/core/lib/iomgr/pollset_set.cc \ src/core/lib/iomgr/pollset_set_custom.cc \ src/core/lib/iomgr/pollset_set_windows.cc \ src/core/lib/iomgr/pollset_uv.cc \ src/core/lib/iomgr/pollset_windows.cc \ src/core/lib/iomgr/resolve_address.cc \ src/core/lib/iomgr/resolve_address_custom.cc \ src/core/lib/iomgr/resolve_address_posix.cc \ src/core/lib/iomgr/resolve_address_windows.cc \ src/core/lib/iomgr/resource_quota.cc \ src/core/lib/iomgr/sockaddr_utils.cc \ src/core/lib/iomgr/socket_factory_posix.cc \ src/core/lib/iomgr/socket_mutator.cc \ src/core/lib/iomgr/socket_utils_common_posix.cc \ src/core/lib/iomgr/socket_utils_linux.cc \ src/core/lib/iomgr/socket_utils_posix.cc \ src/core/lib/iomgr/socket_utils_uv.cc \ src/core/lib/iomgr/socket_utils_windows.cc \ src/core/lib/iomgr/socket_windows.cc \ src/core/lib/iomgr/tcp_client.cc \ src/core/lib/iomgr/tcp_client_cfstream.cc \ src/core/lib/iomgr/tcp_client_custom.cc \ src/core/lib/iomgr/tcp_client_posix.cc \ src/core/lib/iomgr/tcp_client_windows.cc \ src/core/lib/iomgr/tcp_custom.cc \ src/core/lib/iomgr/tcp_posix.cc \ src/core/lib/iomgr/tcp_server.cc \ src/core/lib/iomgr/tcp_server_custom.cc \ src/core/lib/iomgr/tcp_server_posix.cc \ src/core/lib/iomgr/tcp_server_utils_posix_common.cc \ src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc \ src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc \ src/core/lib/iomgr/tcp_server_windows.cc \ src/core/lib/iomgr/tcp_uv.cc \ src/core/lib/iomgr/tcp_windows.cc \ src/core/lib/iomgr/time_averaged_stats.cc \ src/core/lib/iomgr/timer.cc \ src/core/lib/iomgr/timer_custom.cc \ src/core/lib/iomgr/timer_generic.cc \ src/core/lib/iomgr/timer_heap.cc \ src/core/lib/iomgr/timer_manager.cc \ src/core/lib/iomgr/timer_uv.cc \ src/core/lib/iomgr/udp_server.cc \ src/core/lib/iomgr/unix_sockets_posix.cc \ src/core/lib/iomgr/unix_sockets_posix_noop.cc \ src/core/lib/iomgr/wakeup_fd_eventfd.cc \ src/core/lib/iomgr/wakeup_fd_nospecial.cc \ src/core/lib/iomgr/wakeup_fd_pipe.cc \ src/core/lib/iomgr/wakeup_fd_posix.cc \ src/core/lib/iomgr/work_serializer.cc \ src/core/lib/json/json_reader.cc \ src/core/lib/json/json_writer.cc \ src/core/lib/slice/b64.cc \ src/core/lib/slice/percent_encoding.cc \ src/core/lib/slice/slice.cc \ src/core/lib/slice/slice_buffer.cc \ src/core/lib/slice/slice_intern.cc \ src/core/lib/slice/slice_string_helpers.cc \ src/core/lib/surface/api_trace.cc \ src/core/lib/surface/byte_buffer.cc \ src/core/lib/surface/byte_buffer_reader.cc \ src/core/lib/surface/call.cc \ src/core/lib/surface/call_details.cc \ src/core/lib/surface/call_log_batch.cc \ src/core/lib/surface/channel.cc \ src/core/lib/surface/channel_init.cc \ src/core/lib/surface/channel_ping.cc \ src/core/lib/surface/channel_stack_type.cc \ src/core/lib/surface/completion_queue.cc \ src/core/lib/surface/completion_queue_factory.cc \ src/core/lib/surface/event_string.cc \ src/core/lib/surface/init.cc \ src/core/lib/surface/init_unsecure.cc \ src/core/lib/surface/lame_client.cc \ src/core/lib/surface/metadata_array.cc \ src/core/lib/surface/server.cc \ src/core/lib/surface/validate_metadata.cc \ src/core/lib/surface/version.cc \ src/core/lib/transport/bdp_estimator.cc \ src/core/lib/transport/byte_stream.cc \ src/core/lib/transport/connectivity_state.cc \ src/core/lib/transport/error_utils.cc \ src/core/lib/transport/metadata.cc \ src/core/lib/transport/metadata_batch.cc \ src/core/lib/transport/pid_controller.cc \ src/core/lib/transport/static_metadata.cc \ src/core/lib/transport/status_conversion.cc \ src/core/lib/transport/status_metadata.cc \ src/core/lib/transport/timeout_encoding.cc \ src/core/lib/transport/transport.cc \ src/core/lib/transport/transport_op_string.cc \ src/core/lib/uri/uri_parser.cc \ src/core/plugin_registry/grpc_unsecure_plugin_registry.cc \ PUBLIC_HEADERS_C += \ include/grpc/byte_buffer.h \ include/grpc/byte_buffer_reader.h \ include/grpc/census.h \ include/grpc/compression.h \ include/grpc/fork.h \ include/grpc/grpc.h \ include/grpc/grpc_posix.h \ include/grpc/grpc_security_constants.h \ include/grpc/load_reporting.h \ include/grpc/slice.h \ include/grpc/slice_buffer.h \ include/grpc/status.h \ include/grpc/support/workaround_list.h \ LIBGRPC_UNSECURE_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_UNSECURE_SRC)))) $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(LIBGRPC_UNSECURE_OBJS) $(LIBGPR_OBJS) $(LIBGRPC_ABSEIL_OBJS) $(ZLIB_MERGE_OBJS) $(CARES_MERGE_OBJS) $(ADDRESS_SORTING_MERGE_OBJS) $(UPB_MERGE_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBGRPC_UNSECURE_OBJS) $(LIBGPR_OBJS) $(LIBGRPC_ABSEIL_OBJS) $(ZLIB_MERGE_OBJS) $(CARES_MERGE_OBJS) $(ADDRESS_SORTING_MERGE_OBJS) $(UPB_MERGE_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a endif ifeq ($(SYSTEM),MINGW32) $(LIBDIR)/$(CONFIG)/grpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBGRPC_UNSECURE_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc_unsecure$(SHARED_VERSION_CORE).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc_unsecure$(SHARED_VERSION_CORE)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_UNSECURE_OBJS) $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBS) else $(LIBDIR)/$(CONFIG)/libgrpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBGRPC_UNSECURE_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` ifeq ($(SYSTEM),Darwin) $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_UNSECURE_OBJS) $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBS) else $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc_unsecure.so.10 -o $(LIBDIR)/$(CONFIG)/libgrpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_UNSECURE_OBJS) $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBS) $(Q) ln -sf $(SHARED_PREFIX)grpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgrpc_unsecure$(SHARED_VERSION_CORE).so.10 $(Q) ln -sf $(SHARED_PREFIX)grpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgrpc_unsecure$(SHARED_VERSION_CORE).so endif endif ifneq ($(NO_DEPS),true) -include $(LIBGRPC_UNSECURE_OBJS:.o=.dep) endif LIBBENCHMARK_HELPERS_SRC = \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/microbenchmarks/helpers.cc \ PUBLIC_HEADERS_CXX += \ LIBBENCHMARK_HELPERS_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBENCHMARK_HELPERS_SRC)))) $(LIBBENCHMARK_HELPERS_OBJS): CPPFLAGS += -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX ifeq ($(NO_SECURE),true) # You can't build secure libraries if you don't have OpenSSL. $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build a C++ library if you don't have protobuf - a bit overreached, but still okay. $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a: protobuf_dep_error else $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBBENCHMARK_HELPERS_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBBENCHMARK_HELPERS_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a endif endif endif ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(LIBBENCHMARK_HELPERS_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/helpers.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc LIBGRPC++_SRC = \ src/cpp/client/channel_cc.cc \ src/cpp/client/client_context.cc \ src/cpp/client/client_interceptor.cc \ src/cpp/client/create_channel.cc \ src/cpp/client/create_channel_internal.cc \ src/cpp/client/create_channel_posix.cc \ src/cpp/client/credentials_cc.cc \ src/cpp/client/insecure_credentials.cc \ src/cpp/client/secure_credentials.cc \ src/cpp/codegen/codegen_init.cc \ src/cpp/common/alarm.cc \ src/cpp/common/auth_property_iterator.cc \ src/cpp/common/channel_arguments.cc \ src/cpp/common/channel_filter.cc \ src/cpp/common/completion_queue_cc.cc \ src/cpp/common/core_codegen.cc \ src/cpp/common/resource_quota_cc.cc \ src/cpp/common/rpc_method.cc \ src/cpp/common/secure_auth_context.cc \ src/cpp/common/secure_channel_arguments.cc \ src/cpp/common/secure_create_auth_context.cc \ src/cpp/common/tls_credentials_options.cc \ src/cpp/common/tls_credentials_options_util.cc \ src/cpp/common/validate_service_config.cc \ src/cpp/common/version_cc.cc \ src/cpp/server/async_generic_service.cc \ src/cpp/server/channel_argument_option.cc \ src/cpp/server/create_default_thread_pool.cc \ src/cpp/server/dynamic_thread_pool.cc \ src/cpp/server/external_connection_acceptor_impl.cc \ src/cpp/server/health/default_health_check_service.cc \ src/cpp/server/health/health_check_service.cc \ src/cpp/server/health/health_check_service_server_builder_option.cc \ src/cpp/server/insecure_server_credentials.cc \ src/cpp/server/secure_server_credentials.cc \ src/cpp/server/server_builder.cc \ src/cpp/server/server_callback.cc \ src/cpp/server/server_cc.cc \ src/cpp/server/server_context.cc \ src/cpp/server/server_credentials.cc \ src/cpp/server/server_posix.cc \ src/cpp/thread_manager/thread_manager.cc \ src/cpp/util/byte_buffer_cc.cc \ src/cpp/util/status.cc \ src/cpp/util/string_ref.cc \ src/cpp/util/time_cc.cc \ PUBLIC_HEADERS_CXX += \ include/grpc++/alarm.h \ include/grpc++/channel.h \ include/grpc++/client_context.h \ include/grpc++/completion_queue.h \ include/grpc++/create_channel.h \ include/grpc++/create_channel_posix.h \ include/grpc++/ext/health_check_service_server_builder_option.h \ include/grpc++/generic/async_generic_service.h \ include/grpc++/generic/generic_stub.h \ include/grpc++/grpc++.h \ include/grpc++/health_check_service_interface.h \ include/grpc++/impl/call.h \ include/grpc++/impl/channel_argument_option.h \ include/grpc++/impl/client_unary_call.h \ include/grpc++/impl/codegen/async_stream.h \ include/grpc++/impl/codegen/async_unary_call.h \ include/grpc++/impl/codegen/byte_buffer.h \ include/grpc++/impl/codegen/call.h \ include/grpc++/impl/codegen/call_hook.h \ include/grpc++/impl/codegen/channel_interface.h \ include/grpc++/impl/codegen/client_context.h \ include/grpc++/impl/codegen/client_unary_call.h \ include/grpc++/impl/codegen/completion_queue.h \ include/grpc++/impl/codegen/completion_queue_tag.h \ include/grpc++/impl/codegen/config.h \ include/grpc++/impl/codegen/config_protobuf.h \ include/grpc++/impl/codegen/core_codegen.h \ include/grpc++/impl/codegen/core_codegen_interface.h \ include/grpc++/impl/codegen/create_auth_context.h \ include/grpc++/impl/codegen/grpc_library.h \ include/grpc++/impl/codegen/metadata_map.h \ include/grpc++/impl/codegen/method_handler_impl.h \ include/grpc++/impl/codegen/proto_utils.h \ include/grpc++/impl/codegen/rpc_method.h \ include/grpc++/impl/codegen/rpc_service_method.h \ include/grpc++/impl/codegen/security/auth_context.h \ include/grpc++/impl/codegen/serialization_traits.h \ include/grpc++/impl/codegen/server_context.h \ include/grpc++/impl/codegen/server_interface.h \ include/grpc++/impl/codegen/service_type.h \ include/grpc++/impl/codegen/slice.h \ include/grpc++/impl/codegen/status.h \ include/grpc++/impl/codegen/status_code_enum.h \ include/grpc++/impl/codegen/string_ref.h \ include/grpc++/impl/codegen/stub_options.h \ include/grpc++/impl/codegen/sync_stream.h \ include/grpc++/impl/codegen/time.h \ include/grpc++/impl/grpc_library.h \ include/grpc++/impl/method_handler_impl.h \ include/grpc++/impl/rpc_method.h \ include/grpc++/impl/rpc_service_method.h \ include/grpc++/impl/serialization_traits.h \ include/grpc++/impl/server_builder_option.h \ include/grpc++/impl/server_builder_plugin.h \ include/grpc++/impl/server_initializer.h \ include/grpc++/impl/service_type.h \ include/grpc++/resource_quota.h \ include/grpc++/security/auth_context.h \ include/grpc++/security/auth_metadata_processor.h \ include/grpc++/security/credentials.h \ include/grpc++/security/server_credentials.h \ include/grpc++/server.h \ include/grpc++/server_builder.h \ include/grpc++/server_context.h \ include/grpc++/server_posix.h \ include/grpc++/support/async_stream.h \ include/grpc++/support/async_unary_call.h \ include/grpc++/support/byte_buffer.h \ include/grpc++/support/channel_arguments.h \ include/grpc++/support/config.h \ include/grpc++/support/slice.h \ include/grpc++/support/status.h \ include/grpc++/support/status_code_enum.h \ include/grpc++/support/string_ref.h \ include/grpc++/support/stub_options.h \ include/grpc++/support/sync_stream.h \ include/grpc++/support/time.h \ include/grpcpp/alarm.h \ include/grpcpp/alarm_impl.h \ include/grpcpp/channel.h \ include/grpcpp/channel_impl.h \ include/grpcpp/client_context.h \ include/grpcpp/completion_queue.h \ include/grpcpp/completion_queue_impl.h \ include/grpcpp/create_channel.h \ include/grpcpp/create_channel_impl.h \ include/grpcpp/create_channel_posix.h \ include/grpcpp/create_channel_posix_impl.h \ include/grpcpp/ext/health_check_service_server_builder_option.h \ include/grpcpp/generic/async_generic_service.h \ include/grpcpp/generic/generic_stub.h \ include/grpcpp/generic/generic_stub_impl.h \ include/grpcpp/grpcpp.h \ include/grpcpp/health_check_service_interface.h \ include/grpcpp/health_check_service_interface_impl.h \ include/grpcpp/impl/call.h \ include/grpcpp/impl/channel_argument_option.h \ include/grpcpp/impl/client_unary_call.h \ include/grpcpp/impl/codegen/async_generic_service.h \ include/grpcpp/impl/codegen/async_stream.h \ include/grpcpp/impl/codegen/async_stream_impl.h \ include/grpcpp/impl/codegen/async_unary_call.h \ include/grpcpp/impl/codegen/async_unary_call_impl.h \ include/grpcpp/impl/codegen/byte_buffer.h \ include/grpcpp/impl/codegen/call.h \ include/grpcpp/impl/codegen/call_hook.h \ include/grpcpp/impl/codegen/call_op_set.h \ include/grpcpp/impl/codegen/call_op_set_interface.h \ include/grpcpp/impl/codegen/callback_common.h \ include/grpcpp/impl/codegen/channel_interface.h \ include/grpcpp/impl/codegen/client_callback.h \ include/grpcpp/impl/codegen/client_callback_impl.h \ include/grpcpp/impl/codegen/client_context.h \ include/grpcpp/impl/codegen/client_context_impl.h \ include/grpcpp/impl/codegen/client_interceptor.h \ include/grpcpp/impl/codegen/client_unary_call.h \ include/grpcpp/impl/codegen/completion_queue.h \ include/grpcpp/impl/codegen/completion_queue_impl.h \ include/grpcpp/impl/codegen/completion_queue_tag.h \ include/grpcpp/impl/codegen/config.h \ include/grpcpp/impl/codegen/config_protobuf.h \ include/grpcpp/impl/codegen/core_codegen.h \ include/grpcpp/impl/codegen/core_codegen_interface.h \ include/grpcpp/impl/codegen/create_auth_context.h \ include/grpcpp/impl/codegen/delegating_channel.h \ include/grpcpp/impl/codegen/grpc_library.h \ include/grpcpp/impl/codegen/intercepted_channel.h \ include/grpcpp/impl/codegen/interceptor.h \ include/grpcpp/impl/codegen/interceptor_common.h \ include/grpcpp/impl/codegen/message_allocator.h \ include/grpcpp/impl/codegen/metadata_map.h \ include/grpcpp/impl/codegen/method_handler.h \ include/grpcpp/impl/codegen/method_handler_impl.h \ include/grpcpp/impl/codegen/proto_buffer_reader.h \ include/grpcpp/impl/codegen/proto_buffer_writer.h \ include/grpcpp/impl/codegen/proto_utils.h \ include/grpcpp/impl/codegen/rpc_method.h \ include/grpcpp/impl/codegen/rpc_service_method.h \ include/grpcpp/impl/codegen/security/auth_context.h \ include/grpcpp/impl/codegen/serialization_traits.h \ include/grpcpp/impl/codegen/server_callback.h \ include/grpcpp/impl/codegen/server_callback_handlers.h \ include/grpcpp/impl/codegen/server_callback_impl.h \ include/grpcpp/impl/codegen/server_context.h \ include/grpcpp/impl/codegen/server_context_impl.h \ include/grpcpp/impl/codegen/server_interceptor.h \ include/grpcpp/impl/codegen/server_interface.h \ include/grpcpp/impl/codegen/service_type.h \ include/grpcpp/impl/codegen/slice.h \ include/grpcpp/impl/codegen/status.h \ include/grpcpp/impl/codegen/status_code_enum.h \ include/grpcpp/impl/codegen/string_ref.h \ include/grpcpp/impl/codegen/stub_options.h \ include/grpcpp/impl/codegen/sync.h \ include/grpcpp/impl/codegen/sync_stream.h \ include/grpcpp/impl/codegen/sync_stream_impl.h \ include/grpcpp/impl/codegen/time.h \ include/grpcpp/impl/grpc_library.h \ include/grpcpp/impl/method_handler_impl.h \ include/grpcpp/impl/rpc_method.h \ include/grpcpp/impl/rpc_service_method.h \ include/grpcpp/impl/serialization_traits.h \ include/grpcpp/impl/server_builder_option.h \ include/grpcpp/impl/server_builder_option_impl.h \ include/grpcpp/impl/server_builder_plugin.h \ include/grpcpp/impl/server_initializer.h \ include/grpcpp/impl/server_initializer_impl.h \ include/grpcpp/impl/service_type.h \ include/grpcpp/resource_quota.h \ include/grpcpp/resource_quota_impl.h \ include/grpcpp/security/auth_context.h \ include/grpcpp/security/auth_metadata_processor.h \ include/grpcpp/security/auth_metadata_processor_impl.h \ include/grpcpp/security/credentials.h \ include/grpcpp/security/credentials_impl.h \ include/grpcpp/security/server_credentials.h \ include/grpcpp/security/server_credentials_impl.h \ include/grpcpp/security/tls_credentials_options.h \ include/grpcpp/server.h \ include/grpcpp/server_builder.h \ include/grpcpp/server_builder_impl.h \ include/grpcpp/server_context.h \ include/grpcpp/server_impl.h \ include/grpcpp/server_posix.h \ include/grpcpp/server_posix_impl.h \ include/grpcpp/support/async_stream.h \ include/grpcpp/support/async_stream_impl.h \ include/grpcpp/support/async_unary_call.h \ include/grpcpp/support/async_unary_call_impl.h \ include/grpcpp/support/byte_buffer.h \ include/grpcpp/support/channel_arguments.h \ include/grpcpp/support/channel_arguments_impl.h \ include/grpcpp/support/client_callback.h \ include/grpcpp/support/client_callback_impl.h \ include/grpcpp/support/client_interceptor.h \ include/grpcpp/support/config.h \ include/grpcpp/support/interceptor.h \ include/grpcpp/support/message_allocator.h \ include/grpcpp/support/method_handler.h \ include/grpcpp/support/proto_buffer_reader.h \ include/grpcpp/support/proto_buffer_writer.h \ include/grpcpp/support/server_callback.h \ include/grpcpp/support/server_callback_impl.h \ include/grpcpp/support/server_interceptor.h \ include/grpcpp/support/slice.h \ include/grpcpp/support/status.h \ include/grpcpp/support/status_code_enum.h \ include/grpcpp/support/string_ref.h \ include/grpcpp/support/stub_options.h \ include/grpcpp/support/sync_stream.h \ include/grpcpp/support/sync_stream_impl.h \ include/grpcpp/support/time.h \ include/grpcpp/support/validate_service_config.h \ LIBGRPC++_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC++_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure libraries if you don't have OpenSSL. $(LIBDIR)/$(CONFIG)/libgrpc++.a: openssl_dep_error $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build a C++ library if you don't have protobuf - a bit overreached, but still okay. $(LIBDIR)/$(CONFIG)/libgrpc++.a: protobuf_dep_error $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): protobuf_dep_error else $(LIBDIR)/$(CONFIG)/libgrpc++.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBGRPC++_OBJS) $(LIBGPR_OBJS) $(LIBGRPC_ABSEIL_OBJS) $(ZLIB_MERGE_OBJS) $(CARES_MERGE_OBJS) $(ADDRESS_SORTING_MERGE_OBJS) $(UPB_MERGE_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBGRPC++_OBJS) $(LIBGPR_OBJS) $(LIBGRPC_ABSEIL_OBJS) $(ZLIB_MERGE_OBJS) $(CARES_MERGE_OBJS) $(ADDRESS_SORTING_MERGE_OBJS) $(UPB_MERGE_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc++.a endif ifeq ($(SYSTEM),MINGW32) $(LIBDIR)/$(CONFIG)/grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): $(LIBGRPC++_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBDIR)/$(CONFIG)/grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/address_sorting$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/upb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(OPENSSL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc++$(SHARED_VERSION_CPP).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc++$(SHARED_VERSION_CPP)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgrpc$(SHARED_VERSION_CORE)-dll -lgpr$(SHARED_VERSION_CORE)-dll -laddress_sorting$(SHARED_VERSION_CORE)-dll -lupb$(SHARED_VERSION_CORE)-dll else $(LIBDIR)/$(CONFIG)/libgrpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): $(LIBGRPC++_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBDIR)/$(CONFIG)/libgrpc.$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgpr.$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libaddress_sorting.$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libupb.$(SHARED_EXT_CORE) $(OPENSSL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` ifeq ($(SYSTEM),Darwin) $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgrpc -lgpr -laddress_sorting -lupb else $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc++.so.1 -o $(LIBDIR)/$(CONFIG)/libgrpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgrpc -lgpr -laddress_sorting -lupb $(Q) ln -sf $(SHARED_PREFIX)grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/libgrpc++$(SHARED_VERSION_CPP).so.1 $(Q) ln -sf $(SHARED_PREFIX)grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/libgrpc++$(SHARED_VERSION_CPP).so endif endif endif endif ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(LIBGRPC++_OBJS:.o=.dep) endif endif LIBGRPC++_ALTS_SRC = \ src/cpp/common/alts_context.cc \ src/cpp/common/alts_util.cc \ PUBLIC_HEADERS_CXX += \ include/grpcpp/security/alts_context.h \ include/grpcpp/security/alts_util.h \ LIBGRPC++_ALTS_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC++_ALTS_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure libraries if you don't have OpenSSL. $(LIBDIR)/$(CONFIG)/libgrpc++_alts.a: openssl_dep_error $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_alts$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build a C++ library if you don't have protobuf - a bit overreached, but still okay. $(LIBDIR)/$(CONFIG)/libgrpc++_alts.a: protobuf_dep_error $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_alts$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): protobuf_dep_error else $(LIBDIR)/$(CONFIG)/libgrpc++_alts.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBGRPC++_ALTS_OBJS) $(LIBGPR_OBJS) $(LIBGRPC_ABSEIL_OBJS) $(ZLIB_MERGE_OBJS) $(CARES_MERGE_OBJS) $(ADDRESS_SORTING_MERGE_OBJS) $(UPB_MERGE_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_alts.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libgrpc++_alts.a $(LIBGRPC++_ALTS_OBJS) $(LIBGPR_OBJS) $(LIBGRPC_ABSEIL_OBJS) $(ZLIB_MERGE_OBJS) $(CARES_MERGE_OBJS) $(ADDRESS_SORTING_MERGE_OBJS) $(UPB_MERGE_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc++_alts.a endif ifeq ($(SYSTEM),MINGW32) $(LIBDIR)/$(CONFIG)/grpc++_alts$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): $(LIBGRPC++_ALTS_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBDIR)/$(CONFIG)/grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/address_sorting$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/upb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(OPENSSL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc++_alts$(SHARED_VERSION_CPP).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc++_alts$(SHARED_VERSION_CPP)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc++_alts$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_ALTS_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgrpc++$(SHARED_VERSION_CPP)-dll -lgrpc$(SHARED_VERSION_CORE)-dll -lgpr$(SHARED_VERSION_CORE)-dll -laddress_sorting$(SHARED_VERSION_CORE)-dll -lupb$(SHARED_VERSION_CORE)-dll else $(LIBDIR)/$(CONFIG)/libgrpc++_alts$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): $(LIBGRPC++_ALTS_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBDIR)/$(CONFIG)/libgrpc++.$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/libgrpc.$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgpr.$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libaddress_sorting.$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libupb.$(SHARED_EXT_CORE) $(OPENSSL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` ifeq ($(SYSTEM),Darwin) $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc++_alts$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc++_alts$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_ALTS_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgrpc++ -lgrpc -lgpr -laddress_sorting -lupb else $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc++_alts.so.1 -o $(LIBDIR)/$(CONFIG)/libgrpc++_alts$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_ALTS_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgrpc++ -lgrpc -lgpr -laddress_sorting -lupb $(Q) ln -sf $(SHARED_PREFIX)grpc++_alts$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/libgrpc++_alts$(SHARED_VERSION_CPP).so.1 $(Q) ln -sf $(SHARED_PREFIX)grpc++_alts$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/libgrpc++_alts$(SHARED_VERSION_CPP).so endif endif endif endif ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(LIBGRPC++_ALTS_OBJS:.o=.dep) endif endif LIBGRPC++_ERROR_DETAILS_SRC = \ $(GENDIR)/src/proto/grpc/status/status.pb.cc $(GENDIR)/src/proto/grpc/status/status.grpc.pb.cc \ src/cpp/util/error_details.cc \ PUBLIC_HEADERS_CXX += \ include/grpc++/support/error_details.h \ include/grpcpp/support/error_details.h \ include/grpcpp/support/error_details_impl.h \ LIBGRPC++_ERROR_DETAILS_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC++_ERROR_DETAILS_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure libraries if you don't have OpenSSL. $(LIBDIR)/$(CONFIG)/libgrpc++_error_details.a: openssl_dep_error $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_error_details$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build a C++ library if you don't have protobuf - a bit overreached, but still okay. $(LIBDIR)/$(CONFIG)/libgrpc++_error_details.a: protobuf_dep_error $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_error_details$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): protobuf_dep_error else $(LIBDIR)/$(CONFIG)/libgrpc++_error_details.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBGRPC++_ERROR_DETAILS_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_error_details.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libgrpc++_error_details.a $(LIBGRPC++_ERROR_DETAILS_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc++_error_details.a endif ifeq ($(SYSTEM),MINGW32) $(LIBDIR)/$(CONFIG)/grpc++_error_details$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): $(LIBGRPC++_ERROR_DETAILS_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBDIR)/$(CONFIG)/grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/address_sorting$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/upb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(OPENSSL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc++_error_details$(SHARED_VERSION_CPP).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc++_error_details$(SHARED_VERSION_CPP)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc++_error_details$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_ERROR_DETAILS_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgrpc++$(SHARED_VERSION_CPP)-dll -lgrpc$(SHARED_VERSION_CORE)-dll -lgpr$(SHARED_VERSION_CORE)-dll -laddress_sorting$(SHARED_VERSION_CORE)-dll -lupb$(SHARED_VERSION_CORE)-dll else $(LIBDIR)/$(CONFIG)/libgrpc++_error_details$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): $(LIBGRPC++_ERROR_DETAILS_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBDIR)/$(CONFIG)/libgrpc++.$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/libgrpc.$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgpr.$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libaddress_sorting.$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libupb.$(SHARED_EXT_CORE) $(OPENSSL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` ifeq ($(SYSTEM),Darwin) $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc++_error_details$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc++_error_details$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_ERROR_DETAILS_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgrpc++ -lgrpc -lgpr -laddress_sorting -lupb else $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc++_error_details.so.1 -o $(LIBDIR)/$(CONFIG)/libgrpc++_error_details$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_ERROR_DETAILS_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgrpc++ -lgrpc -lgpr -laddress_sorting -lupb $(Q) ln -sf $(SHARED_PREFIX)grpc++_error_details$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/libgrpc++_error_details$(SHARED_VERSION_CPP).so.1 $(Q) ln -sf $(SHARED_PREFIX)grpc++_error_details$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/libgrpc++_error_details$(SHARED_VERSION_CPP).so endif endif endif endif ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(LIBGRPC++_ERROR_DETAILS_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/src/cpp/util/error_details.o: $(GENDIR)/src/proto/grpc/status/status.pb.cc $(GENDIR)/src/proto/grpc/status/status.grpc.pb.cc LIBGRPC++_REFLECTION_SRC = \ $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc \ src/cpp/ext/proto_server_reflection.cc \ src/cpp/ext/proto_server_reflection_plugin.cc \ PUBLIC_HEADERS_CXX += \ include/grpc++/ext/proto_server_reflection_plugin.h \ include/grpcpp/ext/proto_server_reflection_plugin.h \ include/grpcpp/ext/proto_server_reflection_plugin_impl.h \ LIBGRPC++_REFLECTION_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC++_REFLECTION_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure libraries if you don't have OpenSSL. $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a: openssl_dep_error $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build a C++ library if you don't have protobuf - a bit overreached, but still okay. $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a: protobuf_dep_error $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): protobuf_dep_error else $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBGRPC++_REFLECTION_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBGRPC++_REFLECTION_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a endif ifeq ($(SYSTEM),MINGW32) $(LIBDIR)/$(CONFIG)/grpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): $(LIBGRPC++_REFLECTION_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBDIR)/$(CONFIG)/grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/address_sorting$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/upb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(OPENSSL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc++_reflection$(SHARED_VERSION_CPP).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc++_reflection$(SHARED_VERSION_CPP)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_REFLECTION_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgrpc++$(SHARED_VERSION_CPP)-dll -lgrpc$(SHARED_VERSION_CORE)-dll -lgpr$(SHARED_VERSION_CORE)-dll -laddress_sorting$(SHARED_VERSION_CORE)-dll -lupb$(SHARED_VERSION_CORE)-dll else $(LIBDIR)/$(CONFIG)/libgrpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): $(LIBGRPC++_REFLECTION_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBDIR)/$(CONFIG)/libgrpc++.$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/libgrpc.$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgpr.$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libaddress_sorting.$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libupb.$(SHARED_EXT_CORE) $(OPENSSL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` ifeq ($(SYSTEM),Darwin) $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_REFLECTION_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgrpc++ -lgrpc -lgpr -laddress_sorting -lupb else $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc++_reflection.so.1 -o $(LIBDIR)/$(CONFIG)/libgrpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_REFLECTION_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgrpc++ -lgrpc -lgpr -laddress_sorting -lupb $(Q) ln -sf $(SHARED_PREFIX)grpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/libgrpc++_reflection$(SHARED_VERSION_CPP).so.1 $(Q) ln -sf $(SHARED_PREFIX)grpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/libgrpc++_reflection$(SHARED_VERSION_CPP).so endif endif endif endif ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(LIBGRPC++_REFLECTION_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/src/cpp/ext/proto_server_reflection.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc $(OBJDIR)/$(CONFIG)/src/cpp/ext/proto_server_reflection_plugin.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc LIBGRPC++_TEST_SRC = \ src/cpp/client/channel_test_peer.cc \ PUBLIC_HEADERS_CXX += \ include/grpc++/test/mock_stream.h \ include/grpc++/test/server_context_test_spouse.h \ include/grpcpp/test/channel_test_peer.h \ include/grpcpp/test/default_reactor_test_peer.h \ include/grpcpp/test/mock_stream.h \ include/grpcpp/test/server_context_test_spouse.h \ LIBGRPC++_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC++_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure libraries if you don't have OpenSSL. $(LIBDIR)/$(CONFIG)/libgrpc++_test.a: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build a C++ library if you don't have protobuf - a bit overreached, but still okay. $(LIBDIR)/$(CONFIG)/libgrpc++_test.a: protobuf_dep_error else $(LIBDIR)/$(CONFIG)/libgrpc++_test.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBGRPC++_TEST_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBGRPC++_TEST_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc++_test.a endif endif endif ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(LIBGRPC++_TEST_OBJS:.o=.dep) endif endif LIBGRPC++_TEST_CONFIG_SRC = \ test/cpp/util/test_config_cc.cc \ PUBLIC_HEADERS_CXX += \ LIBGRPC++_TEST_CONFIG_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC++_TEST_CONFIG_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure libraries if you don't have OpenSSL. $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build a C++ library if you don't have protobuf - a bit overreached, but still okay. $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a: protobuf_dep_error else $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBGRPC++_TEST_CONFIG_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBGRPC++_TEST_CONFIG_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a endif endif endif ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(LIBGRPC++_TEST_CONFIG_OBJS:.o=.dep) endif endif LIBGRPC++_TEST_UTIL_SRC = \ test/core/end2end/data/client_certs.cc \ test/core/end2end/data/server1_cert.cc \ test/core/end2end/data/server1_key.cc \ test/core/end2end/data/test_root_cert.cc \ test/cpp/util/byte_buffer_proto_helper.cc \ test/cpp/util/create_test_channel.cc \ test/cpp/util/string_ref_helper.cc \ test/cpp/util/subprocess.cc \ test/cpp/util/test_credentials_provider.cc \ PUBLIC_HEADERS_CXX += \ LIBGRPC++_TEST_UTIL_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC++_TEST_UTIL_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure libraries if you don't have OpenSSL. $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build a C++ library if you don't have protobuf - a bit overreached, but still okay. $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a: protobuf_dep_error else $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBGRPC++_TEST_UTIL_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBGRPC++_TEST_UTIL_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a endif endif endif ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(LIBGRPC++_TEST_UTIL_OBJS:.o=.dep) endif endif LIBGRPC++_UNSECURE_SRC = \ src/cpp/client/channel_cc.cc \ src/cpp/client/client_context.cc \ src/cpp/client/client_interceptor.cc \ src/cpp/client/create_channel.cc \ src/cpp/client/create_channel_internal.cc \ src/cpp/client/create_channel_posix.cc \ src/cpp/client/credentials_cc.cc \ src/cpp/client/insecure_credentials.cc \ src/cpp/codegen/codegen_init.cc \ src/cpp/common/alarm.cc \ src/cpp/common/channel_arguments.cc \ src/cpp/common/channel_filter.cc \ src/cpp/common/completion_queue_cc.cc \ src/cpp/common/core_codegen.cc \ src/cpp/common/insecure_create_auth_context.cc \ src/cpp/common/resource_quota_cc.cc \ src/cpp/common/rpc_method.cc \ src/cpp/common/validate_service_config.cc \ src/cpp/common/version_cc.cc \ src/cpp/server/async_generic_service.cc \ src/cpp/server/channel_argument_option.cc \ src/cpp/server/create_default_thread_pool.cc \ src/cpp/server/dynamic_thread_pool.cc \ src/cpp/server/external_connection_acceptor_impl.cc \ src/cpp/server/health/default_health_check_service.cc \ src/cpp/server/health/health_check_service.cc \ src/cpp/server/health/health_check_service_server_builder_option.cc \ src/cpp/server/insecure_server_credentials.cc \ src/cpp/server/server_builder.cc \ src/cpp/server/server_callback.cc \ src/cpp/server/server_cc.cc \ src/cpp/server/server_context.cc \ src/cpp/server/server_credentials.cc \ src/cpp/server/server_posix.cc \ src/cpp/thread_manager/thread_manager.cc \ src/cpp/util/byte_buffer_cc.cc \ src/cpp/util/status.cc \ src/cpp/util/string_ref.cc \ src/cpp/util/time_cc.cc \ PUBLIC_HEADERS_CXX += \ include/grpc++/alarm.h \ include/grpc++/channel.h \ include/grpc++/client_context.h \ include/grpc++/completion_queue.h \ include/grpc++/create_channel.h \ include/grpc++/create_channel_posix.h \ include/grpc++/ext/health_check_service_server_builder_option.h \ include/grpc++/generic/async_generic_service.h \ include/grpc++/generic/generic_stub.h \ include/grpc++/grpc++.h \ include/grpc++/health_check_service_interface.h \ include/grpc++/impl/call.h \ include/grpc++/impl/channel_argument_option.h \ include/grpc++/impl/client_unary_call.h \ include/grpc++/impl/codegen/async_stream.h \ include/grpc++/impl/codegen/async_unary_call.h \ include/grpc++/impl/codegen/byte_buffer.h \ include/grpc++/impl/codegen/call.h \ include/grpc++/impl/codegen/call_hook.h \ include/grpc++/impl/codegen/channel_interface.h \ include/grpc++/impl/codegen/client_context.h \ include/grpc++/impl/codegen/client_unary_call.h \ include/grpc++/impl/codegen/completion_queue.h \ include/grpc++/impl/codegen/completion_queue_tag.h \ include/grpc++/impl/codegen/config.h \ include/grpc++/impl/codegen/config_protobuf.h \ include/grpc++/impl/codegen/core_codegen.h \ include/grpc++/impl/codegen/core_codegen_interface.h \ include/grpc++/impl/codegen/create_auth_context.h \ include/grpc++/impl/codegen/grpc_library.h \ include/grpc++/impl/codegen/metadata_map.h \ include/grpc++/impl/codegen/method_handler_impl.h \ include/grpc++/impl/codegen/proto_utils.h \ include/grpc++/impl/codegen/rpc_method.h \ include/grpc++/impl/codegen/rpc_service_method.h \ include/grpc++/impl/codegen/security/auth_context.h \ include/grpc++/impl/codegen/serialization_traits.h \ include/grpc++/impl/codegen/server_context.h \ include/grpc++/impl/codegen/server_interface.h \ include/grpc++/impl/codegen/service_type.h \ include/grpc++/impl/codegen/slice.h \ include/grpc++/impl/codegen/status.h \ include/grpc++/impl/codegen/status_code_enum.h \ include/grpc++/impl/codegen/string_ref.h \ include/grpc++/impl/codegen/stub_options.h \ include/grpc++/impl/codegen/sync_stream.h \ include/grpc++/impl/codegen/time.h \ include/grpc++/impl/grpc_library.h \ include/grpc++/impl/method_handler_impl.h \ include/grpc++/impl/rpc_method.h \ include/grpc++/impl/rpc_service_method.h \ include/grpc++/impl/serialization_traits.h \ include/grpc++/impl/server_builder_option.h \ include/grpc++/impl/server_builder_plugin.h \ include/grpc++/impl/server_initializer.h \ include/grpc++/impl/service_type.h \ include/grpc++/resource_quota.h \ include/grpc++/security/auth_context.h \ include/grpc++/security/auth_metadata_processor.h \ include/grpc++/security/credentials.h \ include/grpc++/security/server_credentials.h \ include/grpc++/server.h \ include/grpc++/server_builder.h \ include/grpc++/server_context.h \ include/grpc++/server_posix.h \ include/grpc++/support/async_stream.h \ include/grpc++/support/async_unary_call.h \ include/grpc++/support/byte_buffer.h \ include/grpc++/support/channel_arguments.h \ include/grpc++/support/config.h \ include/grpc++/support/slice.h \ include/grpc++/support/status.h \ include/grpc++/support/status_code_enum.h \ include/grpc++/support/string_ref.h \ include/grpc++/support/stub_options.h \ include/grpc++/support/sync_stream.h \ include/grpc++/support/time.h \ include/grpcpp/alarm.h \ include/grpcpp/alarm_impl.h \ include/grpcpp/channel.h \ include/grpcpp/channel_impl.h \ include/grpcpp/client_context.h \ include/grpcpp/completion_queue.h \ include/grpcpp/completion_queue_impl.h \ include/grpcpp/create_channel.h \ include/grpcpp/create_channel_impl.h \ include/grpcpp/create_channel_posix.h \ include/grpcpp/create_channel_posix_impl.h \ include/grpcpp/ext/health_check_service_server_builder_option.h \ include/grpcpp/generic/async_generic_service.h \ include/grpcpp/generic/generic_stub.h \ include/grpcpp/generic/generic_stub_impl.h \ include/grpcpp/grpcpp.h \ include/grpcpp/health_check_service_interface.h \ include/grpcpp/health_check_service_interface_impl.h \ include/grpcpp/impl/call.h \ include/grpcpp/impl/channel_argument_option.h \ include/grpcpp/impl/client_unary_call.h \ include/grpcpp/impl/codegen/async_generic_service.h \ include/grpcpp/impl/codegen/async_stream.h \ include/grpcpp/impl/codegen/async_stream_impl.h \ include/grpcpp/impl/codegen/async_unary_call.h \ include/grpcpp/impl/codegen/async_unary_call_impl.h \ include/grpcpp/impl/codegen/byte_buffer.h \ include/grpcpp/impl/codegen/call.h \ include/grpcpp/impl/codegen/call_hook.h \ include/grpcpp/impl/codegen/call_op_set.h \ include/grpcpp/impl/codegen/call_op_set_interface.h \ include/grpcpp/impl/codegen/callback_common.h \ include/grpcpp/impl/codegen/channel_interface.h \ include/grpcpp/impl/codegen/client_callback.h \ include/grpcpp/impl/codegen/client_callback_impl.h \ include/grpcpp/impl/codegen/client_context.h \ include/grpcpp/impl/codegen/client_context_impl.h \ include/grpcpp/impl/codegen/client_interceptor.h \ include/grpcpp/impl/codegen/client_unary_call.h \ include/grpcpp/impl/codegen/completion_queue.h \ include/grpcpp/impl/codegen/completion_queue_impl.h \ include/grpcpp/impl/codegen/completion_queue_tag.h \ include/grpcpp/impl/codegen/config.h \ include/grpcpp/impl/codegen/config_protobuf.h \ include/grpcpp/impl/codegen/core_codegen.h \ include/grpcpp/impl/codegen/core_codegen_interface.h \ include/grpcpp/impl/codegen/create_auth_context.h \ include/grpcpp/impl/codegen/delegating_channel.h \ include/grpcpp/impl/codegen/grpc_library.h \ include/grpcpp/impl/codegen/intercepted_channel.h \ include/grpcpp/impl/codegen/interceptor.h \ include/grpcpp/impl/codegen/interceptor_common.h \ include/grpcpp/impl/codegen/message_allocator.h \ include/grpcpp/impl/codegen/metadata_map.h \ include/grpcpp/impl/codegen/method_handler.h \ include/grpcpp/impl/codegen/method_handler_impl.h \ include/grpcpp/impl/codegen/proto_buffer_reader.h \ include/grpcpp/impl/codegen/proto_buffer_writer.h \ include/grpcpp/impl/codegen/proto_utils.h \ include/grpcpp/impl/codegen/rpc_method.h \ include/grpcpp/impl/codegen/rpc_service_method.h \ include/grpcpp/impl/codegen/security/auth_context.h \ include/grpcpp/impl/codegen/serialization_traits.h \ include/grpcpp/impl/codegen/server_callback.h \ include/grpcpp/impl/codegen/server_callback_handlers.h \ include/grpcpp/impl/codegen/server_callback_impl.h \ include/grpcpp/impl/codegen/server_context.h \ include/grpcpp/impl/codegen/server_context_impl.h \ include/grpcpp/impl/codegen/server_interceptor.h \ include/grpcpp/impl/codegen/server_interface.h \ include/grpcpp/impl/codegen/service_type.h \ include/grpcpp/impl/codegen/slice.h \ include/grpcpp/impl/codegen/status.h \ include/grpcpp/impl/codegen/status_code_enum.h \ include/grpcpp/impl/codegen/string_ref.h \ include/grpcpp/impl/codegen/stub_options.h \ include/grpcpp/impl/codegen/sync.h \ include/grpcpp/impl/codegen/sync_stream.h \ include/grpcpp/impl/codegen/sync_stream_impl.h \ include/grpcpp/impl/codegen/time.h \ include/grpcpp/impl/grpc_library.h \ include/grpcpp/impl/method_handler_impl.h \ include/grpcpp/impl/rpc_method.h \ include/grpcpp/impl/rpc_service_method.h \ include/grpcpp/impl/serialization_traits.h \ include/grpcpp/impl/server_builder_option.h \ include/grpcpp/impl/server_builder_option_impl.h \ include/grpcpp/impl/server_builder_plugin.h \ include/grpcpp/impl/server_initializer.h \ include/grpcpp/impl/server_initializer_impl.h \ include/grpcpp/impl/service_type.h \ include/grpcpp/resource_quota.h \ include/grpcpp/resource_quota_impl.h \ include/grpcpp/security/auth_context.h \ include/grpcpp/security/auth_metadata_processor.h \ include/grpcpp/security/auth_metadata_processor_impl.h \ include/grpcpp/security/credentials.h \ include/grpcpp/security/credentials_impl.h \ include/grpcpp/security/server_credentials.h \ include/grpcpp/security/server_credentials_impl.h \ include/grpcpp/security/tls_credentials_options.h \ include/grpcpp/server.h \ include/grpcpp/server_builder.h \ include/grpcpp/server_builder_impl.h \ include/grpcpp/server_context.h \ include/grpcpp/server_impl.h \ include/grpcpp/server_posix.h \ include/grpcpp/server_posix_impl.h \ include/grpcpp/support/async_stream.h \ include/grpcpp/support/async_stream_impl.h \ include/grpcpp/support/async_unary_call.h \ include/grpcpp/support/async_unary_call_impl.h \ include/grpcpp/support/byte_buffer.h \ include/grpcpp/support/channel_arguments.h \ include/grpcpp/support/channel_arguments_impl.h \ include/grpcpp/support/client_callback.h \ include/grpcpp/support/client_callback_impl.h \ include/grpcpp/support/client_interceptor.h \ include/grpcpp/support/config.h \ include/grpcpp/support/interceptor.h \ include/grpcpp/support/message_allocator.h \ include/grpcpp/support/method_handler.h \ include/grpcpp/support/proto_buffer_reader.h \ include/grpcpp/support/proto_buffer_writer.h \ include/grpcpp/support/server_callback.h \ include/grpcpp/support/server_callback_impl.h \ include/grpcpp/support/server_interceptor.h \ include/grpcpp/support/slice.h \ include/grpcpp/support/status.h \ include/grpcpp/support/status_code_enum.h \ include/grpcpp/support/string_ref.h \ include/grpcpp/support/stub_options.h \ include/grpcpp/support/sync_stream.h \ include/grpcpp/support/sync_stream_impl.h \ include/grpcpp/support/time.h \ include/grpcpp/support/validate_service_config.h \ LIBGRPC++_UNSECURE_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC++_UNSECURE_SRC)))) ifeq ($(NO_PROTOBUF),true) # You can't build a C++ library if you don't have protobuf - a bit overreached, but still okay. $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a: protobuf_dep_error $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): protobuf_dep_error else $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBGRPC++_UNSECURE_OBJS) $(LIBGPR_OBJS) $(LIBGRPC_ABSEIL_OBJS) $(ZLIB_MERGE_OBJS) $(CARES_MERGE_OBJS) $(ADDRESS_SORTING_MERGE_OBJS) $(UPB_MERGE_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBGRPC++_UNSECURE_OBJS) $(LIBGPR_OBJS) $(LIBGRPC_ABSEIL_OBJS) $(ZLIB_MERGE_OBJS) $(CARES_MERGE_OBJS) $(ADDRESS_SORTING_MERGE_OBJS) $(UPB_MERGE_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a endif ifeq ($(SYSTEM),MINGW32) $(LIBDIR)/$(CONFIG)/grpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): $(LIBGRPC++_UNSECURE_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBDIR)/$(CONFIG)/grpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/address_sorting$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/upb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc++_unsecure$(SHARED_VERSION_CPP).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc++_unsecure$(SHARED_VERSION_CPP)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_UNSECURE_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgrpc_unsecure$(SHARED_VERSION_CORE)-dll -lgpr$(SHARED_VERSION_CORE)-dll -laddress_sorting$(SHARED_VERSION_CORE)-dll -lupb$(SHARED_VERSION_CORE)-dll else $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): $(LIBGRPC++_UNSECURE_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgpr.$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libaddress_sorting.$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libupb.$(SHARED_EXT_CORE) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` ifeq ($(SYSTEM),Darwin) $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_UNSECURE_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgrpc_unsecure -lgpr -laddress_sorting -lupb else $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc++_unsecure.so.1 -o $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_UNSECURE_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgrpc_unsecure -lgpr -laddress_sorting -lupb $(Q) ln -sf $(SHARED_PREFIX)grpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure$(SHARED_VERSION_CPP).so.1 $(Q) ln -sf $(SHARED_PREFIX)grpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure$(SHARED_VERSION_CPP).so endif endif endif ifneq ($(NO_DEPS),true) -include $(LIBGRPC++_UNSECURE_OBJS:.o=.dep) endif LIBGRPC_PLUGIN_SUPPORT_SRC = \ src/compiler/cpp_generator.cc \ src/compiler/csharp_generator.cc \ src/compiler/node_generator.cc \ src/compiler/objective_c_generator.cc \ src/compiler/php_generator.cc \ src/compiler/python_generator.cc \ src/compiler/ruby_generator.cc \ PUBLIC_HEADERS_CXX += \ include/grpc++/impl/codegen/config_protobuf.h \ include/grpcpp/impl/codegen/config_protobuf.h \ LIBGRPC_PLUGIN_SUPPORT_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_PLUGIN_SUPPORT_SRC)))) ifeq ($(NO_PROTOBUF),true) # You can't build a C++ library if you don't have protobuf - a bit overreached, but still okay. $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a: protobuf_dep_error else $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBGRPC_PLUGIN_SUPPORT_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(LIBGRPC_PLUGIN_SUPPORT_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a endif endif ifneq ($(NO_DEPS),true) -include $(LIBGRPC_PLUGIN_SUPPORT_OBJS:.o=.dep) endif LIBGRPCPP_CHANNELZ_SRC = \ $(GENDIR)/src/proto/grpc/channelz/channelz.pb.cc $(GENDIR)/src/proto/grpc/channelz/channelz.grpc.pb.cc \ src/cpp/server/channelz/channelz_service.cc \ src/cpp/server/channelz/channelz_service_plugin.cc \ PUBLIC_HEADERS_CXX += \ include/grpcpp/ext/channelz_service_plugin.h \ include/grpcpp/ext/channelz_service_plugin_impl.h \ LIBGRPCPP_CHANNELZ_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPCPP_CHANNELZ_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure libraries if you don't have OpenSSL. $(LIBDIR)/$(CONFIG)/libgrpcpp_channelz.a: openssl_dep_error $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpcpp_channelz$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build a C++ library if you don't have protobuf - a bit overreached, but still okay. $(LIBDIR)/$(CONFIG)/libgrpcpp_channelz.a: protobuf_dep_error $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpcpp_channelz$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): protobuf_dep_error else $(LIBDIR)/$(CONFIG)/libgrpcpp_channelz.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBGRPCPP_CHANNELZ_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpcpp_channelz.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libgrpcpp_channelz.a $(LIBGRPCPP_CHANNELZ_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpcpp_channelz.a endif ifeq ($(SYSTEM),MINGW32) $(LIBDIR)/$(CONFIG)/grpcpp_channelz$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): $(LIBGRPCPP_CHANNELZ_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBDIR)/$(CONFIG)/grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/address_sorting$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/upb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(OPENSSL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpcpp_channelz$(SHARED_VERSION_CPP).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpcpp_channelz$(SHARED_VERSION_CPP)-dll.a -o $(LIBDIR)/$(CONFIG)/grpcpp_channelz$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPCPP_CHANNELZ_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgrpc++$(SHARED_VERSION_CPP)-dll -lgrpc$(SHARED_VERSION_CORE)-dll -lgpr$(SHARED_VERSION_CORE)-dll -laddress_sorting$(SHARED_VERSION_CORE)-dll -lupb$(SHARED_VERSION_CORE)-dll else $(LIBDIR)/$(CONFIG)/libgrpcpp_channelz$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): $(LIBGRPCPP_CHANNELZ_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBDIR)/$(CONFIG)/libgrpc++.$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/libgrpc.$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgpr.$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libaddress_sorting.$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libupb.$(SHARED_EXT_CORE) $(OPENSSL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` ifeq ($(SYSTEM),Darwin) $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpcpp_channelz$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpcpp_channelz$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPCPP_CHANNELZ_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgrpc++ -lgrpc -lgpr -laddress_sorting -lupb else $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpcpp_channelz.so.1 -o $(LIBDIR)/$(CONFIG)/libgrpcpp_channelz$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPCPP_CHANNELZ_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgrpc++ -lgrpc -lgpr -laddress_sorting -lupb $(Q) ln -sf $(SHARED_PREFIX)grpcpp_channelz$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/libgrpcpp_channelz$(SHARED_VERSION_CPP).so.1 $(Q) ln -sf $(SHARED_PREFIX)grpcpp_channelz$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/libgrpcpp_channelz$(SHARED_VERSION_CPP).so endif endif endif endif ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(LIBGRPCPP_CHANNELZ_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/src/cpp/server/channelz/channelz_service.o: $(GENDIR)/src/proto/grpc/channelz/channelz.pb.cc $(GENDIR)/src/proto/grpc/channelz/channelz.grpc.pb.cc $(OBJDIR)/$(CONFIG)/src/cpp/server/channelz/channelz_service_plugin.o: $(GENDIR)/src/proto/grpc/channelz/channelz.pb.cc $(GENDIR)/src/proto/grpc/channelz/channelz.grpc.pb.cc LIBBORINGSSL_SRC = \ third_party/boringssl-with-bazel/err_data.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c \ third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c \ third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c \ third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c \ third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c \ third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c \ third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c \ third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c \ third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c \ third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c \ third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c \ third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c \ third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c \ third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c \ third_party/boringssl-with-bazel/src/crypto/base64/base64.c \ third_party/boringssl-with-bazel/src/crypto/bio/bio.c \ third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c \ third_party/boringssl-with-bazel/src/crypto/bio/connect.c \ third_party/boringssl-with-bazel/src/crypto/bio/fd.c \ third_party/boringssl-with-bazel/src/crypto/bio/file.c \ third_party/boringssl-with-bazel/src/crypto/bio/hexdump.c \ third_party/boringssl-with-bazel/src/crypto/bio/pair.c \ third_party/boringssl-with-bazel/src/crypto/bio/printf.c \ third_party/boringssl-with-bazel/src/crypto/bio/socket.c \ third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c \ third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c \ third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c \ third_party/boringssl-with-bazel/src/crypto/buf/buf.c \ third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c \ third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c \ third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c \ third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c \ third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c \ third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c \ third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c \ third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c \ third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesccm.c \ third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c \ third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c \ third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c \ third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c \ third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c \ third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c \ third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c \ third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c \ third_party/boringssl-with-bazel/src/crypto/cmac/cmac.c \ third_party/boringssl-with-bazel/src/crypto/conf/conf.c \ third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-fuchsia.c \ third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-linux.c \ third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c \ third_party/boringssl-with-bazel/src/crypto/cpu-arm.c \ third_party/boringssl-with-bazel/src/crypto/cpu-intel.c \ third_party/boringssl-with-bazel/src/crypto/cpu-ppc64le.c \ third_party/boringssl-with-bazel/src/crypto/crypto.c \ third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c \ third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c \ third_party/boringssl-with-bazel/src/crypto/dh/check.c \ third_party/boringssl-with-bazel/src/crypto/dh/dh.c \ third_party/boringssl-with-bazel/src/crypto/dh/dh_asn1.c \ third_party/boringssl-with-bazel/src/crypto/dh/params.c \ third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c \ third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c \ third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c \ third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c \ third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c \ third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c \ third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c \ third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c \ third_party/boringssl-with-bazel/src/crypto/engine/engine.c \ third_party/boringssl-with-bazel/src/crypto/err/err.c \ third_party/boringssl-with-bazel/src/crypto/evp/digestsign.c \ third_party/boringssl-with-bazel/src/crypto/evp/evp.c \ third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c \ third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c \ third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c \ third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c \ third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c \ third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c \ third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c \ third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c \ third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c \ third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c \ third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c \ third_party/boringssl-with-bazel/src/crypto/evp/pbkdf.c \ third_party/boringssl-with-bazel/src/crypto/evp/print.c \ third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c \ third_party/boringssl-with-bazel/src/crypto/evp/sign.c \ third_party/boringssl-with-bazel/src/crypto/ex_data.c \ third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c \ third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c \ third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c \ third_party/boringssl-with-bazel/src/crypto/hkdf/hkdf.c \ third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c \ third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c \ third_party/boringssl-with-bazel/src/crypto/mem.c \ third_party/boringssl-with-bazel/src/crypto/obj/obj.c \ third_party/boringssl-with-bazel/src/crypto/obj/obj_xref.c \ third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c \ third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c \ third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c \ third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c \ third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c \ third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c \ third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c \ third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c \ third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c \ third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c \ third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c \ third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c \ third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c \ third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c \ third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c \ third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c \ third_party/boringssl-with-bazel/src/crypto/pool/pool.c \ third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c \ third_party/boringssl-with-bazel/src/crypto/rand_extra/forkunsafe.c \ third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c \ third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c \ third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c \ third_party/boringssl-with-bazel/src/crypto/rc4/rc4.c \ third_party/boringssl-with-bazel/src/crypto/refcount_c11.c \ third_party/boringssl-with-bazel/src/crypto/refcount_lock.c \ third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c \ third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.c \ third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c \ third_party/boringssl-with-bazel/src/crypto/stack/stack.c \ third_party/boringssl-with-bazel/src/crypto/thread.c \ third_party/boringssl-with-bazel/src/crypto/thread_none.c \ third_party/boringssl-with-bazel/src/crypto/thread_pthread.c \ third_party/boringssl-with-bazel/src/crypto/thread_win.c \ third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c \ third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c \ third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c \ third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c \ third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c \ third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c \ third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c \ third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c \ third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c \ third_party/boringssl-with-bazel/src/crypto/x509/by_file.c \ third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c \ third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c \ third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c \ third_party/boringssl-with-bazel/src/crypto/x509/t_req.c \ third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c \ third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509name.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_all.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_info.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_name.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_req.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_val.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c \ third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc \ third_party/boringssl-with-bazel/src/ssl/d1_both.cc \ third_party/boringssl-with-bazel/src/ssl/d1_lib.cc \ third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc \ third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc \ third_party/boringssl-with-bazel/src/ssl/dtls_method.cc \ third_party/boringssl-with-bazel/src/ssl/dtls_record.cc \ third_party/boringssl-with-bazel/src/ssl/handoff.cc \ third_party/boringssl-with-bazel/src/ssl/handshake.cc \ third_party/boringssl-with-bazel/src/ssl/handshake_client.cc \ third_party/boringssl-with-bazel/src/ssl/handshake_server.cc \ third_party/boringssl-with-bazel/src/ssl/s3_both.cc \ third_party/boringssl-with-bazel/src/ssl/s3_lib.cc \ third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_file.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_session.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc \ third_party/boringssl-with-bazel/src/ssl/t1_enc.cc \ third_party/boringssl-with-bazel/src/ssl/t1_lib.cc \ third_party/boringssl-with-bazel/src/ssl/tls13_both.cc \ third_party/boringssl-with-bazel/src/ssl/tls13_client.cc \ third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc \ third_party/boringssl-with-bazel/src/ssl/tls13_server.cc \ third_party/boringssl-with-bazel/src/ssl/tls_method.cc \ third_party/boringssl-with-bazel/src/ssl/tls_record.cc \ PUBLIC_HEADERS_C += \ LIBBORINGSSL_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_SRC)))) $(LIBBORINGSSL_OBJS): CPPFLAGS += -Ithird_party/boringssl-with-bazel/src/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX $(LIBBORINGSSL_OBJS): CXXFLAGS += -fno-exceptions $(LIBBORINGSSL_OBJS): CFLAGS += -g $(LIBDIR)/$(CONFIG)/libboringssl.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(LIBBORINGSSL_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libboringssl.a $(LIBBORINGSSL_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl.a endif ifneq ($(NO_DEPS),true) -include $(LIBBORINGSSL_OBJS:.o=.dep) endif LIBBORINGSSL_TEST_UTIL_SRC = \ third_party/boringssl-with-bazel/src/crypto/test/file_test.cc \ third_party/boringssl-with-bazel/src/crypto/test/malloc.cc \ third_party/boringssl-with-bazel/src/crypto/test/test_util.cc \ third_party/boringssl-with-bazel/src/crypto/test/wycheproof_util.cc \ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_TEST_UTIL_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_TEST_UTIL_SRC)))) $(LIBBORINGSSL_TEST_UTIL_OBJS): CPPFLAGS += -Ithird_party/boringssl-with-bazel/src/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX $(LIBBORINGSSL_TEST_UTIL_OBJS): CXXFLAGS += -fno-exceptions $(LIBBORINGSSL_TEST_UTIL_OBJS): CFLAGS += -g ifeq ($(NO_PROTOBUF),true) # You can't build a C++ library if you don't have protobuf - a bit overreached, but still okay. $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a: protobuf_dep_error else $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_TEST_UTIL_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBBORINGSSL_TEST_UTIL_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a endif endif ifneq ($(NO_DEPS),true) -include $(LIBBORINGSSL_TEST_UTIL_OBJS:.o=.dep) endif LIBBENCHMARK_SRC = \ third_party/benchmark/src/benchmark.cc \ third_party/benchmark/src/benchmark_api_internal.cc \ third_party/benchmark/src/benchmark_main.cc \ third_party/benchmark/src/benchmark_name.cc \ third_party/benchmark/src/benchmark_register.cc \ third_party/benchmark/src/benchmark_runner.cc \ third_party/benchmark/src/colorprint.cc \ third_party/benchmark/src/commandlineflags.cc \ third_party/benchmark/src/complexity.cc \ third_party/benchmark/src/console_reporter.cc \ third_party/benchmark/src/counter.cc \ third_party/benchmark/src/csv_reporter.cc \ third_party/benchmark/src/json_reporter.cc \ third_party/benchmark/src/reporter.cc \ third_party/benchmark/src/sleep.cc \ third_party/benchmark/src/statistics.cc \ third_party/benchmark/src/string_util.cc \ third_party/benchmark/src/sysinfo.cc \ third_party/benchmark/src/timers.cc \ PUBLIC_HEADERS_CXX += \ LIBBENCHMARK_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBENCHMARK_SRC)))) $(LIBBENCHMARK_OBJS): CPPFLAGS += -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX ifeq ($(NO_PROTOBUF),true) # You can't build a C++ library if you don't have protobuf - a bit overreached, but still okay. $(LIBDIR)/$(CONFIG)/libbenchmark.a: protobuf_dep_error else $(LIBDIR)/$(CONFIG)/libbenchmark.a: $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(PROTOBUF_DEP) $(LIBBENCHMARK_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libbenchmark.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBBENCHMARK_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libbenchmark.a endif endif ifneq ($(NO_DEPS),true) -include $(LIBBENCHMARK_OBJS:.o=.dep) endif LIBUPB_SRC = \ third_party/upb/upb/decode.c \ third_party/upb/upb/encode.c \ third_party/upb/upb/msg.c \ third_party/upb/upb/port.c \ third_party/upb/upb/table.c \ third_party/upb/upb/upb.c \ PUBLIC_HEADERS_C += \ LIBUPB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBUPB_SRC)))) $(LIBDIR)/$(CONFIG)/libupb.a: $(LIBUPB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libupb.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libupb.a $(LIBUPB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libupb.a endif ifeq ($(SYSTEM),MINGW32) $(LIBDIR)/$(CONFIG)/upb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBUPB_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/upb$(SHARED_VERSION_CORE).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libupb$(SHARED_VERSION_CORE)-dll.a -o $(LIBDIR)/$(CONFIG)/upb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBUPB_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBS) else $(LIBDIR)/$(CONFIG)/libupb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBUPB_OBJS) $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` ifeq ($(SYSTEM),Darwin) $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)upb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libupb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBUPB_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBS) else $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libupb.so.10 -o $(LIBDIR)/$(CONFIG)/libupb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBUPB_OBJS) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBS) $(Q) ln -sf $(SHARED_PREFIX)upb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libupb$(SHARED_VERSION_CORE).so.10 $(Q) ln -sf $(SHARED_PREFIX)upb$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libupb$(SHARED_VERSION_CORE).so endif endif ifneq ($(NO_DEPS),true) -include $(LIBUPB_OBJS:.o=.dep) endif LIBZ_SRC = \ third_party/zlib/adler32.c \ third_party/zlib/compress.c \ third_party/zlib/crc32.c \ third_party/zlib/deflate.c \ third_party/zlib/gzclose.c \ third_party/zlib/gzlib.c \ third_party/zlib/gzread.c \ third_party/zlib/gzwrite.c \ third_party/zlib/infback.c \ third_party/zlib/inffast.c \ third_party/zlib/inflate.c \ third_party/zlib/inftrees.c \ third_party/zlib/trees.c \ third_party/zlib/uncompr.c \ third_party/zlib/zutil.c \ PUBLIC_HEADERS_C += \ LIBZ_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBZ_SRC)))) $(LIBZ_OBJS): CFLAGS += -fvisibility=hidden $(LIBDIR)/$(CONFIG)/libz.a: $(LIBZ_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libz.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libz.a $(LIBZ_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libz.a endif ifneq ($(NO_DEPS),true) -include $(LIBZ_OBJS:.o=.dep) endif LIBARES_SRC = \ third_party/cares/cares/ares__close_sockets.c \ third_party/cares/cares/ares__get_hostent.c \ third_party/cares/cares/ares__read_line.c \ third_party/cares/cares/ares__timeval.c \ third_party/cares/cares/ares_cancel.c \ third_party/cares/cares/ares_create_query.c \ third_party/cares/cares/ares_data.c \ third_party/cares/cares/ares_destroy.c \ third_party/cares/cares/ares_expand_name.c \ third_party/cares/cares/ares_expand_string.c \ third_party/cares/cares/ares_fds.c \ third_party/cares/cares/ares_free_hostent.c \ third_party/cares/cares/ares_free_string.c \ third_party/cares/cares/ares_getenv.c \ third_party/cares/cares/ares_gethostbyaddr.c \ third_party/cares/cares/ares_gethostbyname.c \ third_party/cares/cares/ares_getnameinfo.c \ third_party/cares/cares/ares_getopt.c \ third_party/cares/cares/ares_getsock.c \ third_party/cares/cares/ares_init.c \ third_party/cares/cares/ares_library_init.c \ third_party/cares/cares/ares_llist.c \ third_party/cares/cares/ares_mkquery.c \ third_party/cares/cares/ares_nowarn.c \ third_party/cares/cares/ares_options.c \ third_party/cares/cares/ares_parse_a_reply.c \ third_party/cares/cares/ares_parse_aaaa_reply.c \ third_party/cares/cares/ares_parse_mx_reply.c \ third_party/cares/cares/ares_parse_naptr_reply.c \ third_party/cares/cares/ares_parse_ns_reply.c \ third_party/cares/cares/ares_parse_ptr_reply.c \ third_party/cares/cares/ares_parse_soa_reply.c \ third_party/cares/cares/ares_parse_srv_reply.c \ third_party/cares/cares/ares_parse_txt_reply.c \ third_party/cares/cares/ares_platform.c \ third_party/cares/cares/ares_process.c \ third_party/cares/cares/ares_query.c \ third_party/cares/cares/ares_search.c \ third_party/cares/cares/ares_send.c \ third_party/cares/cares/ares_strcasecmp.c \ third_party/cares/cares/ares_strdup.c \ third_party/cares/cares/ares_strerror.c \ third_party/cares/cares/ares_strsplit.c \ third_party/cares/cares/ares_timeout.c \ third_party/cares/cares/ares_version.c \ third_party/cares/cares/ares_writev.c \ third_party/cares/cares/bitncmp.c \ third_party/cares/cares/inet_net_pton.c \ third_party/cares/cares/inet_ntop.c \ third_party/cares/cares/windows_port.c \ PUBLIC_HEADERS_C += \ LIBARES_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBARES_SRC)))) $(LIBARES_OBJS): CPPFLAGS += -Ithird_party/cares -Ithird_party/cares/cares -fvisibility=hidden -D_GNU_SOURCE $(if $(subst Darwin,,$(SYSTEM)),,-Ithird_party/cares/config_darwin) $(if $(subst FreeBSD,,$(SYSTEM)),,-Ithird_party/cares/config_freebsd) $(if $(subst Linux,,$(SYSTEM)),,-Ithird_party/cares/config_linux) $(if $(subst OpenBSD,,$(SYSTEM)),,-Ithird_party/cares/config_openbsd) -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX $(if $(subst MINGW32,,$(SYSTEM)),-DHAVE_CONFIG_H,) $(LIBARES_OBJS): CFLAGS += -g $(LIBDIR)/$(CONFIG)/libares.a: $(LIBARES_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libares.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libares.a $(LIBARES_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libares.a endif ifneq ($(NO_DEPS),true) -include $(LIBARES_OBJS:.o=.dep) endif # Add private ABSEIL target which contains all sources used by all baselib libraries. LIBGRPC_ABSEIL_SRC = \ third_party/abseil-cpp/absl/base/dynamic_annotations.cc \ third_party/abseil-cpp/absl/base/internal/cycleclock.cc \ third_party/abseil-cpp/absl/base/internal/raw_logging.cc \ third_party/abseil-cpp/absl/base/internal/spinlock.cc \ third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc \ third_party/abseil-cpp/absl/base/internal/sysinfo.cc \ third_party/abseil-cpp/absl/base/internal/thread_identity.cc \ third_party/abseil-cpp/absl/base/internal/throw_delegate.cc \ third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc \ third_party/abseil-cpp/absl/base/log_severity.cc \ third_party/abseil-cpp/absl/numeric/int128.cc \ third_party/abseil-cpp/absl/strings/ascii.cc \ third_party/abseil-cpp/absl/strings/charconv.cc \ third_party/abseil-cpp/absl/strings/escaping.cc \ third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc \ third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc \ third_party/abseil-cpp/absl/strings/internal/escaping.cc \ third_party/abseil-cpp/absl/strings/internal/memutil.cc \ third_party/abseil-cpp/absl/strings/internal/ostringstream.cc \ third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc \ third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc \ third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc \ third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc \ third_party/abseil-cpp/absl/strings/internal/str_format/output.cc \ third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc \ third_party/abseil-cpp/absl/strings/internal/utf8.cc \ third_party/abseil-cpp/absl/strings/match.cc \ third_party/abseil-cpp/absl/strings/numbers.cc \ third_party/abseil-cpp/absl/strings/str_cat.cc \ third_party/abseil-cpp/absl/strings/str_replace.cc \ third_party/abseil-cpp/absl/strings/str_split.cc \ third_party/abseil-cpp/absl/strings/string_view.cc \ third_party/abseil-cpp/absl/strings/substitute.cc \ third_party/abseil-cpp/absl/time/civil_time.cc \ third_party/abseil-cpp/absl/time/clock.cc \ third_party/abseil-cpp/absl/time/duration.cc \ third_party/abseil-cpp/absl/time/format.cc \ third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc \ third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc \ third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc \ third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc \ third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc \ third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc \ third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc \ third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc \ third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc \ third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc \ third_party/abseil-cpp/absl/time/time.cc \ third_party/abseil-cpp/absl/types/bad_optional_access.cc \ LIBGRPC_ABSEIL_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_ABSEIL_SRC)))) $(LIBDIR)/$(CONFIG)/libgrpc_abseil.a: $(LIBGRPC_ABSEIL_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_abseil.a $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libgrpc_abseil.a $(LIBGRPC_ABSEIL_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc_abseil.a endif ifneq ($(NO_DEPS),true) -include $(LIBGRPC_ABSEIL_OBJS:.o=.dep) endif # All of the test targets, and protoc plugins CHECK_EPOLLEXCLUSIVE_SRC = \ test/build/check_epollexclusive.c \ CHECK_EPOLLEXCLUSIVE_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CHECK_EPOLLEXCLUSIVE_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/check_epollexclusive: openssl_dep_error else $(BINDIR)/$(CONFIG)/check_epollexclusive: $(CHECK_EPOLLEXCLUSIVE_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CHECK_EPOLLEXCLUSIVE_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/check_epollexclusive endif $(OBJDIR)/$(CONFIG)/test/build/check_epollexclusive.o: $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a deps_check_epollexclusive: $(CHECK_EPOLLEXCLUSIVE_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CHECK_EPOLLEXCLUSIVE_OBJS:.o=.dep) endif endif GEN_HPACK_TABLES_SRC = \ tools/codegen/core/gen_hpack_tables.cc \ GEN_HPACK_TABLES_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GEN_HPACK_TABLES_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/gen_hpack_tables: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/gen_hpack_tables: protobuf_dep_error else $(BINDIR)/$(CONFIG)/gen_hpack_tables: $(PROTOBUF_DEP) $(GEN_HPACK_TABLES_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(GEN_HPACK_TABLES_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/gen_hpack_tables endif endif $(OBJDIR)/$(CONFIG)/tools/codegen/core/gen_hpack_tables.o: $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a deps_gen_hpack_tables: $(GEN_HPACK_TABLES_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(GEN_HPACK_TABLES_OBJS:.o=.dep) endif endif GEN_LEGAL_METADATA_CHARACTERS_SRC = \ tools/codegen/core/gen_legal_metadata_characters.cc \ GEN_LEGAL_METADATA_CHARACTERS_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GEN_LEGAL_METADATA_CHARACTERS_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/gen_legal_metadata_characters: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/gen_legal_metadata_characters: protobuf_dep_error else $(BINDIR)/$(CONFIG)/gen_legal_metadata_characters: $(PROTOBUF_DEP) $(GEN_LEGAL_METADATA_CHARACTERS_OBJS) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(GEN_LEGAL_METADATA_CHARACTERS_OBJS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/gen_legal_metadata_characters endif endif $(OBJDIR)/$(CONFIG)/tools/codegen/core/gen_legal_metadata_characters.o: deps_gen_legal_metadata_characters: $(GEN_LEGAL_METADATA_CHARACTERS_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(GEN_LEGAL_METADATA_CHARACTERS_OBJS:.o=.dep) endif endif GEN_PERCENT_ENCODING_TABLES_SRC = \ tools/codegen/core/gen_percent_encoding_tables.cc \ GEN_PERCENT_ENCODING_TABLES_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GEN_PERCENT_ENCODING_TABLES_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/gen_percent_encoding_tables: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/gen_percent_encoding_tables: protobuf_dep_error else $(BINDIR)/$(CONFIG)/gen_percent_encoding_tables: $(PROTOBUF_DEP) $(GEN_PERCENT_ENCODING_TABLES_OBJS) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(GEN_PERCENT_ENCODING_TABLES_OBJS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/gen_percent_encoding_tables endif endif $(OBJDIR)/$(CONFIG)/tools/codegen/core/gen_percent_encoding_tables.o: deps_gen_percent_encoding_tables: $(GEN_PERCENT_ENCODING_TABLES_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(GEN_PERCENT_ENCODING_TABLES_OBJS:.o=.dep) endif endif ALGORITHM_TEST_SRC = \ test/core/compression/algorithm_test.cc \ ALGORITHM_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ALGORITHM_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/algorithm_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/algorithm_test: $(ALGORITHM_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ALGORITHM_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/algorithm_test endif $(OBJDIR)/$(CONFIG)/test/core/compression/algorithm_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_algorithm_test: $(ALGORITHM_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ALGORITHM_TEST_OBJS:.o=.dep) endif endif ALLOC_TEST_SRC = \ test/core/gpr/alloc_test.cc \ ALLOC_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ALLOC_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/alloc_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/alloc_test: $(ALLOC_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ALLOC_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/alloc_test endif $(OBJDIR)/$(CONFIG)/test/core/gpr/alloc_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_alloc_test: $(ALLOC_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ALLOC_TEST_OBJS:.o=.dep) endif endif ALPN_TEST_SRC = \ test/core/transport/chttp2/alpn_test.cc \ ALPN_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ALPN_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/alpn_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/alpn_test: $(ALPN_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ALPN_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/alpn_test endif $(OBJDIR)/$(CONFIG)/test/core/transport/chttp2/alpn_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_alpn_test: $(ALPN_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ALPN_TEST_OBJS:.o=.dep) endif endif ALTS_COUNTER_TEST_SRC = \ test/core/tsi/alts/crypt/gsec_test_util.cc \ test/core/tsi/alts/frame_protector/alts_counter_test.cc \ ALTS_COUNTER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ALTS_COUNTER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/alts_counter_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/alts_counter_test: $(ALTS_COUNTER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ALTS_COUNTER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/alts_counter_test endif $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/crypt/gsec_test_util.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/frame_protector/alts_counter_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_alts_counter_test: $(ALTS_COUNTER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ALTS_COUNTER_TEST_OBJS:.o=.dep) endif endif ALTS_CRYPT_TEST_SRC = \ test/core/tsi/alts/crypt/aes_gcm_test.cc \ test/core/tsi/alts/crypt/gsec_test_util.cc \ ALTS_CRYPT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ALTS_CRYPT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/alts_crypt_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/alts_crypt_test: $(ALTS_CRYPT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ALTS_CRYPT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/alts_crypt_test endif $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/crypt/aes_gcm_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/crypt/gsec_test_util.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_alts_crypt_test: $(ALTS_CRYPT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ALTS_CRYPT_TEST_OBJS:.o=.dep) endif endif ALTS_CRYPTER_TEST_SRC = \ test/core/tsi/alts/crypt/gsec_test_util.cc \ test/core/tsi/alts/frame_protector/alts_crypter_test.cc \ ALTS_CRYPTER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ALTS_CRYPTER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/alts_crypter_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/alts_crypter_test: $(ALTS_CRYPTER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ALTS_CRYPTER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/alts_crypter_test endif $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/crypt/gsec_test_util.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/frame_protector/alts_crypter_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_alts_crypter_test: $(ALTS_CRYPTER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ALTS_CRYPTER_TEST_OBJS:.o=.dep) endif endif ALTS_FRAME_PROTECTOR_TEST_SRC = \ test/core/tsi/alts/crypt/gsec_test_util.cc \ test/core/tsi/alts/frame_protector/alts_frame_protector_test.cc \ test/core/tsi/transport_security_test_lib.cc \ ALTS_FRAME_PROTECTOR_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ALTS_FRAME_PROTECTOR_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/alts_frame_protector_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/alts_frame_protector_test: $(ALTS_FRAME_PROTECTOR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ALTS_FRAME_PROTECTOR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/alts_frame_protector_test endif $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/crypt/gsec_test_util.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/frame_protector/alts_frame_protector_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/tsi/transport_security_test_lib.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_alts_frame_protector_test: $(ALTS_FRAME_PROTECTOR_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ALTS_FRAME_PROTECTOR_TEST_OBJS:.o=.dep) endif endif ALTS_GRPC_RECORD_PROTOCOL_TEST_SRC = \ test/core/tsi/alts/crypt/gsec_test_util.cc \ test/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_test.cc \ ALTS_GRPC_RECORD_PROTOCOL_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ALTS_GRPC_RECORD_PROTOCOL_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/alts_grpc_record_protocol_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/alts_grpc_record_protocol_test: $(ALTS_GRPC_RECORD_PROTOCOL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ALTS_GRPC_RECORD_PROTOCOL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/alts_grpc_record_protocol_test endif $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/crypt/gsec_test_util.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_alts_grpc_record_protocol_test: $(ALTS_GRPC_RECORD_PROTOCOL_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ALTS_GRPC_RECORD_PROTOCOL_TEST_OBJS:.o=.dep) endif endif ALTS_HANDSHAKER_CLIENT_TEST_SRC = \ test/core/tsi/alts/handshaker/alts_handshaker_client_test.cc \ test/core/tsi/alts/handshaker/alts_handshaker_service_api_test_lib.cc \ ALTS_HANDSHAKER_CLIENT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ALTS_HANDSHAKER_CLIENT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/alts_handshaker_client_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/alts_handshaker_client_test: $(ALTS_HANDSHAKER_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ALTS_HANDSHAKER_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/alts_handshaker_client_test endif $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/handshaker/alts_handshaker_client_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/handshaker/alts_handshaker_service_api_test_lib.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_alts_handshaker_client_test: $(ALTS_HANDSHAKER_CLIENT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ALTS_HANDSHAKER_CLIENT_TEST_OBJS:.o=.dep) endif endif ALTS_IOVEC_RECORD_PROTOCOL_TEST_SRC = \ test/core/tsi/alts/crypt/gsec_test_util.cc \ test/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol_test.cc \ ALTS_IOVEC_RECORD_PROTOCOL_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ALTS_IOVEC_RECORD_PROTOCOL_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/alts_iovec_record_protocol_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/alts_iovec_record_protocol_test: $(ALTS_IOVEC_RECORD_PROTOCOL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ALTS_IOVEC_RECORD_PROTOCOL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/alts_iovec_record_protocol_test endif $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/crypt/gsec_test_util.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_alts_iovec_record_protocol_test: $(ALTS_IOVEC_RECORD_PROTOCOL_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ALTS_IOVEC_RECORD_PROTOCOL_TEST_OBJS:.o=.dep) endif endif ALTS_SECURITY_CONNECTOR_TEST_SRC = \ test/core/security/alts_security_connector_test.cc \ ALTS_SECURITY_CONNECTOR_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ALTS_SECURITY_CONNECTOR_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/alts_security_connector_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/alts_security_connector_test: $(ALTS_SECURITY_CONNECTOR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ALTS_SECURITY_CONNECTOR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/alts_security_connector_test endif $(OBJDIR)/$(CONFIG)/test/core/security/alts_security_connector_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_alts_security_connector_test: $(ALTS_SECURITY_CONNECTOR_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ALTS_SECURITY_CONNECTOR_TEST_OBJS:.o=.dep) endif endif ALTS_TSI_HANDSHAKER_TEST_SRC = \ test/core/tsi/alts/handshaker/alts_handshaker_service_api_test_lib.cc \ test/core/tsi/alts/handshaker/alts_tsi_handshaker_test.cc \ ALTS_TSI_HANDSHAKER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ALTS_TSI_HANDSHAKER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/alts_tsi_handshaker_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/alts_tsi_handshaker_test: $(ALTS_TSI_HANDSHAKER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ALTS_TSI_HANDSHAKER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/alts_tsi_handshaker_test endif $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/handshaker/alts_handshaker_service_api_test_lib.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/handshaker/alts_tsi_handshaker_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_alts_tsi_handshaker_test: $(ALTS_TSI_HANDSHAKER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ALTS_TSI_HANDSHAKER_TEST_OBJS:.o=.dep) endif endif ALTS_TSI_UTILS_TEST_SRC = \ test/core/tsi/alts/handshaker/alts_handshaker_service_api_test_lib.cc \ test/core/tsi/alts/handshaker/alts_tsi_utils_test.cc \ ALTS_TSI_UTILS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ALTS_TSI_UTILS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/alts_tsi_utils_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/alts_tsi_utils_test: $(ALTS_TSI_UTILS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ALTS_TSI_UTILS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/alts_tsi_utils_test endif $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/handshaker/alts_handshaker_service_api_test_lib.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/handshaker/alts_tsi_utils_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_alts_tsi_utils_test: $(ALTS_TSI_UTILS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ALTS_TSI_UTILS_TEST_OBJS:.o=.dep) endif endif ALTS_ZERO_COPY_GRPC_PROTECTOR_TEST_SRC = \ test/core/tsi/alts/crypt/gsec_test_util.cc \ test/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector_test.cc \ ALTS_ZERO_COPY_GRPC_PROTECTOR_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ALTS_ZERO_COPY_GRPC_PROTECTOR_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/alts_zero_copy_grpc_protector_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/alts_zero_copy_grpc_protector_test: $(ALTS_ZERO_COPY_GRPC_PROTECTOR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ALTS_ZERO_COPY_GRPC_PROTECTOR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/alts_zero_copy_grpc_protector_test endif $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/crypt/gsec_test_util.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_alts_zero_copy_grpc_protector_test: $(ALTS_ZERO_COPY_GRPC_PROTECTOR_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ALTS_ZERO_COPY_GRPC_PROTECTOR_TEST_OBJS:.o=.dep) endif endif ARENA_TEST_SRC = \ test/core/gpr/arena_test.cc \ ARENA_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ARENA_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/arena_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/arena_test: $(ARENA_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ARENA_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/arena_test endif $(OBJDIR)/$(CONFIG)/test/core/gpr/arena_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_arena_test: $(ARENA_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ARENA_TEST_OBJS:.o=.dep) endif endif AUTH_CONTEXT_TEST_SRC = \ test/core/security/auth_context_test.cc \ AUTH_CONTEXT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(AUTH_CONTEXT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/auth_context_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/auth_context_test: $(AUTH_CONTEXT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(AUTH_CONTEXT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/auth_context_test endif $(OBJDIR)/$(CONFIG)/test/core/security/auth_context_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_auth_context_test: $(AUTH_CONTEXT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(AUTH_CONTEXT_TEST_OBJS:.o=.dep) endif endif AVL_TEST_SRC = \ test/core/avl/avl_test.cc \ AVL_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(AVL_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/avl_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/avl_test: $(AVL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(AVL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/avl_test endif $(OBJDIR)/$(CONFIG)/test/core/avl/avl_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_avl_test: $(AVL_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(AVL_TEST_OBJS:.o=.dep) endif endif B64_TEST_SRC = \ test/core/slice/b64_test.cc \ B64_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(B64_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/b64_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/b64_test: $(B64_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(B64_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/b64_test endif $(OBJDIR)/$(CONFIG)/test/core/slice/b64_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_b64_test: $(B64_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(B64_TEST_OBJS:.o=.dep) endif endif BAD_SERVER_RESPONSE_TEST_SRC = \ test/core/end2end/bad_server_response_test.cc \ test/core/end2end/cq_verifier.cc \ BAD_SERVER_RESPONSE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BAD_SERVER_RESPONSE_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bad_server_response_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/bad_server_response_test: $(BAD_SERVER_RESPONSE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BAD_SERVER_RESPONSE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/bad_server_response_test endif $(OBJDIR)/$(CONFIG)/test/core/end2end/bad_server_response_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_bad_server_response_test: $(BAD_SERVER_RESPONSE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BAD_SERVER_RESPONSE_TEST_OBJS:.o=.dep) endif endif BAD_SSL_ALPN_TEST_SRC = \ test/core/bad_ssl/bad_ssl_test.cc \ test/core/end2end/cq_verifier.cc \ BAD_SSL_ALPN_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BAD_SSL_ALPN_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bad_ssl_alpn_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/bad_ssl_alpn_test: $(BAD_SSL_ALPN_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BAD_SSL_ALPN_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/bad_ssl_alpn_test endif $(OBJDIR)/$(CONFIG)/test/core/bad_ssl/bad_ssl_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_bad_ssl_alpn_test: $(BAD_SSL_ALPN_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BAD_SSL_ALPN_TEST_OBJS:.o=.dep) endif endif BAD_SSL_CERT_TEST_SRC = \ test/core/bad_ssl/bad_ssl_test.cc \ test/core/end2end/cq_verifier.cc \ BAD_SSL_CERT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BAD_SSL_CERT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bad_ssl_cert_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/bad_ssl_cert_test: $(BAD_SSL_CERT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BAD_SSL_CERT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/bad_ssl_cert_test endif $(OBJDIR)/$(CONFIG)/test/core/bad_ssl/bad_ssl_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_bad_ssl_cert_test: $(BAD_SSL_CERT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BAD_SSL_CERT_TEST_OBJS:.o=.dep) endif endif BIN_DECODER_TEST_SRC = \ test/core/transport/chttp2/bin_decoder_test.cc \ BIN_DECODER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BIN_DECODER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bin_decoder_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/bin_decoder_test: $(BIN_DECODER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BIN_DECODER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/bin_decoder_test endif $(OBJDIR)/$(CONFIG)/test/core/transport/chttp2/bin_decoder_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_bin_decoder_test: $(BIN_DECODER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BIN_DECODER_TEST_OBJS:.o=.dep) endif endif BIN_ENCODER_TEST_SRC = \ test/core/transport/chttp2/bin_encoder_test.cc \ BIN_ENCODER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BIN_ENCODER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bin_encoder_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/bin_encoder_test: $(BIN_ENCODER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BIN_ENCODER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/bin_encoder_test endif $(OBJDIR)/$(CONFIG)/test/core/transport/chttp2/bin_encoder_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_bin_encoder_test: $(BIN_ENCODER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BIN_ENCODER_TEST_OBJS:.o=.dep) endif endif BUFFER_LIST_TEST_SRC = \ test/core/iomgr/buffer_list_test.cc \ BUFFER_LIST_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BUFFER_LIST_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/buffer_list_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/buffer_list_test: $(BUFFER_LIST_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BUFFER_LIST_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/buffer_list_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/buffer_list_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_buffer_list_test: $(BUFFER_LIST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BUFFER_LIST_TEST_OBJS:.o=.dep) endif endif CHANNEL_ARGS_TEST_SRC = \ test/core/channel/channel_args_test.cc \ CHANNEL_ARGS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CHANNEL_ARGS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/channel_args_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/channel_args_test: $(CHANNEL_ARGS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CHANNEL_ARGS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/channel_args_test endif $(OBJDIR)/$(CONFIG)/test/core/channel/channel_args_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_channel_args_test: $(CHANNEL_ARGS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CHANNEL_ARGS_TEST_OBJS:.o=.dep) endif endif CHANNEL_CREATE_TEST_SRC = \ test/core/surface/channel_create_test.cc \ CHANNEL_CREATE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CHANNEL_CREATE_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/channel_create_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/channel_create_test: $(CHANNEL_CREATE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CHANNEL_CREATE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/channel_create_test endif $(OBJDIR)/$(CONFIG)/test/core/surface/channel_create_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_channel_create_test: $(CHANNEL_CREATE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CHANNEL_CREATE_TEST_OBJS:.o=.dep) endif endif CHANNEL_STACK_BUILDER_TEST_SRC = \ test/core/channel/channel_stack_builder_test.cc \ CHANNEL_STACK_BUILDER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CHANNEL_STACK_BUILDER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/channel_stack_builder_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/channel_stack_builder_test: $(CHANNEL_STACK_BUILDER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CHANNEL_STACK_BUILDER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/channel_stack_builder_test endif $(OBJDIR)/$(CONFIG)/test/core/channel/channel_stack_builder_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_channel_stack_builder_test: $(CHANNEL_STACK_BUILDER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CHANNEL_STACK_BUILDER_TEST_OBJS:.o=.dep) endif endif CHANNEL_STACK_TEST_SRC = \ test/core/channel/channel_stack_test.cc \ CHANNEL_STACK_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CHANNEL_STACK_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/channel_stack_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/channel_stack_test: $(CHANNEL_STACK_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CHANNEL_STACK_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/channel_stack_test endif $(OBJDIR)/$(CONFIG)/test/core/channel/channel_stack_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_channel_stack_test: $(CHANNEL_STACK_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CHANNEL_STACK_TEST_OBJS:.o=.dep) endif endif CHECK_GCP_ENVIRONMENT_LINUX_TEST_SRC = \ test/core/security/check_gcp_environment_linux_test.cc \ CHECK_GCP_ENVIRONMENT_LINUX_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CHECK_GCP_ENVIRONMENT_LINUX_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/check_gcp_environment_linux_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/check_gcp_environment_linux_test: $(CHECK_GCP_ENVIRONMENT_LINUX_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CHECK_GCP_ENVIRONMENT_LINUX_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/check_gcp_environment_linux_test endif $(OBJDIR)/$(CONFIG)/test/core/security/check_gcp_environment_linux_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_check_gcp_environment_linux_test: $(CHECK_GCP_ENVIRONMENT_LINUX_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CHECK_GCP_ENVIRONMENT_LINUX_TEST_OBJS:.o=.dep) endif endif CHECK_GCP_ENVIRONMENT_WINDOWS_TEST_SRC = \ test/core/security/check_gcp_environment_windows_test.cc \ CHECK_GCP_ENVIRONMENT_WINDOWS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CHECK_GCP_ENVIRONMENT_WINDOWS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/check_gcp_environment_windows_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/check_gcp_environment_windows_test: $(CHECK_GCP_ENVIRONMENT_WINDOWS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CHECK_GCP_ENVIRONMENT_WINDOWS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/check_gcp_environment_windows_test endif $(OBJDIR)/$(CONFIG)/test/core/security/check_gcp_environment_windows_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_check_gcp_environment_windows_test: $(CHECK_GCP_ENVIRONMENT_WINDOWS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CHECK_GCP_ENVIRONMENT_WINDOWS_TEST_OBJS:.o=.dep) endif endif CLIENT_SSL_TEST_SRC = \ test/core/handshake/client_ssl.cc \ CLIENT_SSL_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CLIENT_SSL_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/client_ssl_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/client_ssl_test: $(CLIENT_SSL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CLIENT_SSL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/client_ssl_test endif $(OBJDIR)/$(CONFIG)/test/core/handshake/client_ssl.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_client_ssl_test: $(CLIENT_SSL_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CLIENT_SSL_TEST_OBJS:.o=.dep) endif endif CMDLINE_TEST_SRC = \ test/core/util/cmdline_test.cc \ CMDLINE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CMDLINE_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/cmdline_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/cmdline_test: $(CMDLINE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CMDLINE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/cmdline_test endif $(OBJDIR)/$(CONFIG)/test/core/util/cmdline_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_cmdline_test: $(CMDLINE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CMDLINE_TEST_OBJS:.o=.dep) endif endif COMBINER_TEST_SRC = \ test/core/iomgr/combiner_test.cc \ COMBINER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(COMBINER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/combiner_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/combiner_test: $(COMBINER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(COMBINER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/combiner_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/combiner_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_combiner_test: $(COMBINER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(COMBINER_TEST_OBJS:.o=.dep) endif endif COMPLETION_QUEUE_THREADING_TEST_SRC = \ test/core/surface/completion_queue_threading_test.cc \ COMPLETION_QUEUE_THREADING_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(COMPLETION_QUEUE_THREADING_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/completion_queue_threading_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/completion_queue_threading_test: $(COMPLETION_QUEUE_THREADING_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(COMPLETION_QUEUE_THREADING_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/completion_queue_threading_test endif $(OBJDIR)/$(CONFIG)/test/core/surface/completion_queue_threading_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_completion_queue_threading_test: $(COMPLETION_QUEUE_THREADING_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(COMPLETION_QUEUE_THREADING_TEST_OBJS:.o=.dep) endif endif COMPRESSION_TEST_SRC = \ test/core/compression/compression_test.cc \ COMPRESSION_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(COMPRESSION_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/compression_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/compression_test: $(COMPRESSION_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(COMPRESSION_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/compression_test endif $(OBJDIR)/$(CONFIG)/test/core/compression/compression_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_compression_test: $(COMPRESSION_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(COMPRESSION_TEST_OBJS:.o=.dep) endif endif CONCURRENT_CONNECTIVITY_TEST_SRC = \ test/core/surface/concurrent_connectivity_test.cc \ CONCURRENT_CONNECTIVITY_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CONCURRENT_CONNECTIVITY_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/concurrent_connectivity_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/concurrent_connectivity_test: $(CONCURRENT_CONNECTIVITY_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CONCURRENT_CONNECTIVITY_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/concurrent_connectivity_test endif $(OBJDIR)/$(CONFIG)/test/core/surface/concurrent_connectivity_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_concurrent_connectivity_test: $(CONCURRENT_CONNECTIVITY_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CONCURRENT_CONNECTIVITY_TEST_OBJS:.o=.dep) endif endif CONNECTION_REFUSED_TEST_SRC = \ test/core/end2end/connection_refused_test.cc \ test/core/end2end/cq_verifier.cc \ CONNECTION_REFUSED_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CONNECTION_REFUSED_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/connection_refused_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/connection_refused_test: $(CONNECTION_REFUSED_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CONNECTION_REFUSED_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/connection_refused_test endif $(OBJDIR)/$(CONFIG)/test/core/end2end/connection_refused_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_connection_refused_test: $(CONNECTION_REFUSED_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CONNECTION_REFUSED_TEST_OBJS:.o=.dep) endif endif CPU_TEST_SRC = \ test/core/gpr/cpu_test.cc \ CPU_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CPU_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/cpu_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/cpu_test: $(CPU_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CPU_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/cpu_test endif $(OBJDIR)/$(CONFIG)/test/core/gpr/cpu_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_cpu_test: $(CPU_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CPU_TEST_OBJS:.o=.dep) endif endif DNS_RESOLVER_CONNECTIVITY_USING_ARES_RESOLVER_TEST_SRC = \ test/core/client_channel/resolvers/dns_resolver_connectivity_test.cc \ DNS_RESOLVER_CONNECTIVITY_USING_ARES_RESOLVER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(DNS_RESOLVER_CONNECTIVITY_USING_ARES_RESOLVER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/dns_resolver_connectivity_using_ares_resolver_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/dns_resolver_connectivity_using_ares_resolver_test: $(DNS_RESOLVER_CONNECTIVITY_USING_ARES_RESOLVER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(DNS_RESOLVER_CONNECTIVITY_USING_ARES_RESOLVER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/dns_resolver_connectivity_using_ares_resolver_test endif $(OBJDIR)/$(CONFIG)/test/core/client_channel/resolvers/dns_resolver_connectivity_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_dns_resolver_connectivity_using_ares_resolver_test: $(DNS_RESOLVER_CONNECTIVITY_USING_ARES_RESOLVER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(DNS_RESOLVER_CONNECTIVITY_USING_ARES_RESOLVER_TEST_OBJS:.o=.dep) endif endif DNS_RESOLVER_CONNECTIVITY_USING_NATIVE_RESOLVER_TEST_SRC = \ test/core/client_channel/resolvers/dns_resolver_connectivity_test.cc \ DNS_RESOLVER_CONNECTIVITY_USING_NATIVE_RESOLVER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(DNS_RESOLVER_CONNECTIVITY_USING_NATIVE_RESOLVER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/dns_resolver_connectivity_using_native_resolver_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/dns_resolver_connectivity_using_native_resolver_test: $(DNS_RESOLVER_CONNECTIVITY_USING_NATIVE_RESOLVER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(DNS_RESOLVER_CONNECTIVITY_USING_NATIVE_RESOLVER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/dns_resolver_connectivity_using_native_resolver_test endif $(OBJDIR)/$(CONFIG)/test/core/client_channel/resolvers/dns_resolver_connectivity_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_dns_resolver_connectivity_using_native_resolver_test: $(DNS_RESOLVER_CONNECTIVITY_USING_NATIVE_RESOLVER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(DNS_RESOLVER_CONNECTIVITY_USING_NATIVE_RESOLVER_TEST_OBJS:.o=.dep) endif endif DNS_RESOLVER_COOLDOWN_TEST_SRC = \ test/core/client_channel/resolvers/dns_resolver_cooldown_test.cc \ DNS_RESOLVER_COOLDOWN_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(DNS_RESOLVER_COOLDOWN_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/dns_resolver_cooldown_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/dns_resolver_cooldown_test: $(DNS_RESOLVER_COOLDOWN_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(DNS_RESOLVER_COOLDOWN_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/dns_resolver_cooldown_test endif $(OBJDIR)/$(CONFIG)/test/core/client_channel/resolvers/dns_resolver_cooldown_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_dns_resolver_cooldown_test: $(DNS_RESOLVER_COOLDOWN_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(DNS_RESOLVER_COOLDOWN_TEST_OBJS:.o=.dep) endif endif DNS_RESOLVER_TEST_SRC = \ test/core/client_channel/resolvers/dns_resolver_test.cc \ DNS_RESOLVER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(DNS_RESOLVER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/dns_resolver_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/dns_resolver_test: $(DNS_RESOLVER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(DNS_RESOLVER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/dns_resolver_test endif $(OBJDIR)/$(CONFIG)/test/core/client_channel/resolvers/dns_resolver_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_dns_resolver_test: $(DNS_RESOLVER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(DNS_RESOLVER_TEST_OBJS:.o=.dep) endif endif DUALSTACK_SOCKET_TEST_SRC = \ test/core/end2end/cq_verifier.cc \ test/core/end2end/dualstack_socket_test.cc \ DUALSTACK_SOCKET_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(DUALSTACK_SOCKET_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/dualstack_socket_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/dualstack_socket_test: $(DUALSTACK_SOCKET_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(DUALSTACK_SOCKET_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/dualstack_socket_test endif $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/dualstack_socket_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_dualstack_socket_test: $(DUALSTACK_SOCKET_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(DUALSTACK_SOCKET_TEST_OBJS:.o=.dep) endif endif ENDPOINT_PAIR_TEST_SRC = \ test/core/iomgr/endpoint_pair_test.cc \ test/core/iomgr/endpoint_tests.cc \ ENDPOINT_PAIR_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ENDPOINT_PAIR_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/endpoint_pair_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/endpoint_pair_test: $(ENDPOINT_PAIR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ENDPOINT_PAIR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/endpoint_pair_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/endpoint_pair_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/iomgr/endpoint_tests.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_endpoint_pair_test: $(ENDPOINT_PAIR_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ENDPOINT_PAIR_TEST_OBJS:.o=.dep) endif endif ENV_TEST_SRC = \ test/core/gpr/env_test.cc \ ENV_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ENV_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/env_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/env_test: $(ENV_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ENV_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/env_test endif $(OBJDIR)/$(CONFIG)/test/core/gpr/env_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_env_test: $(ENV_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ENV_TEST_OBJS:.o=.dep) endif endif ERROR_TEST_SRC = \ test/core/iomgr/endpoint_tests.cc \ test/core/iomgr/error_test.cc \ ERROR_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ERROR_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/error_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/error_test: $(ERROR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ERROR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/error_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/endpoint_tests.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/iomgr/error_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_error_test: $(ERROR_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ERROR_TEST_OBJS:.o=.dep) endif endif EV_EPOLLEX_LINUX_TEST_SRC = \ test/core/iomgr/ev_epollex_linux_test.cc \ EV_EPOLLEX_LINUX_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(EV_EPOLLEX_LINUX_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/ev_epollex_linux_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/ev_epollex_linux_test: $(EV_EPOLLEX_LINUX_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(EV_EPOLLEX_LINUX_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/ev_epollex_linux_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/ev_epollex_linux_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_ev_epollex_linux_test: $(EV_EPOLLEX_LINUX_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(EV_EPOLLEX_LINUX_TEST_OBJS:.o=.dep) endif endif FAKE_RESOLVER_TEST_SRC = \ test/core/client_channel/resolvers/fake_resolver_test.cc \ FAKE_RESOLVER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(FAKE_RESOLVER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/fake_resolver_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/fake_resolver_test: $(FAKE_RESOLVER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(FAKE_RESOLVER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/fake_resolver_test endif $(OBJDIR)/$(CONFIG)/test/core/client_channel/resolvers/fake_resolver_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_fake_resolver_test: $(FAKE_RESOLVER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(FAKE_RESOLVER_TEST_OBJS:.o=.dep) endif endif FAKE_TRANSPORT_SECURITY_TEST_SRC = \ test/core/tsi/fake_transport_security_test.cc \ test/core/tsi/transport_security_test_lib.cc \ FAKE_TRANSPORT_SECURITY_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(FAKE_TRANSPORT_SECURITY_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/fake_transport_security_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/fake_transport_security_test: $(FAKE_TRANSPORT_SECURITY_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(FAKE_TRANSPORT_SECURITY_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/fake_transport_security_test endif $(OBJDIR)/$(CONFIG)/test/core/tsi/fake_transport_security_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/tsi/transport_security_test_lib.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_fake_transport_security_test: $(FAKE_TRANSPORT_SECURITY_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(FAKE_TRANSPORT_SECURITY_TEST_OBJS:.o=.dep) endif endif FD_CONSERVATION_POSIX_TEST_SRC = \ test/core/iomgr/fd_conservation_posix_test.cc \ FD_CONSERVATION_POSIX_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(FD_CONSERVATION_POSIX_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/fd_conservation_posix_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/fd_conservation_posix_test: $(FD_CONSERVATION_POSIX_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(FD_CONSERVATION_POSIX_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/fd_conservation_posix_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/fd_conservation_posix_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_fd_conservation_posix_test: $(FD_CONSERVATION_POSIX_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(FD_CONSERVATION_POSIX_TEST_OBJS:.o=.dep) endif endif FD_POSIX_TEST_SRC = \ test/core/iomgr/fd_posix_test.cc \ FD_POSIX_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(FD_POSIX_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/fd_posix_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/fd_posix_test: $(FD_POSIX_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(FD_POSIX_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/fd_posix_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/fd_posix_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_fd_posix_test: $(FD_POSIX_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(FD_POSIX_TEST_OBJS:.o=.dep) endif endif FLING_STREAM_TEST_SRC = \ test/core/end2end/data/client_certs.cc \ test/core/end2end/data/server1_cert.cc \ test/core/end2end/data/server1_key.cc \ test/core/end2end/data/test_root_cert.cc \ test/core/fling/fling_stream_test.cc \ FLING_STREAM_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(FLING_STREAM_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/fling_stream_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/fling_stream_test: $(FLING_STREAM_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(FLING_STREAM_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/fling_stream_test endif $(OBJDIR)/$(CONFIG)/test/core/end2end/data/client_certs.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/data/server1_cert.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/data/server1_key.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/data/test_root_cert.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/fling/fling_stream_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_fling_stream_test: $(FLING_STREAM_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(FLING_STREAM_TEST_OBJS:.o=.dep) endif endif FLING_TEST_SRC = \ test/core/end2end/data/client_certs.cc \ test/core/end2end/data/server1_cert.cc \ test/core/end2end/data/server1_key.cc \ test/core/end2end/data/test_root_cert.cc \ test/core/fling/fling_test.cc \ FLING_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(FLING_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/fling_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/fling_test: $(FLING_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(FLING_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/fling_test endif $(OBJDIR)/$(CONFIG)/test/core/end2end/data/client_certs.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/data/server1_cert.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/data/server1_key.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/data/test_root_cert.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/fling/fling_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_fling_test: $(FLING_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(FLING_TEST_OBJS:.o=.dep) endif endif FORK_TEST_SRC = \ test/core/gprpp/fork_test.cc \ FORK_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(FORK_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/fork_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/fork_test: $(FORK_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(FORK_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/fork_test endif $(OBJDIR)/$(CONFIG)/test/core/gprpp/fork_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_fork_test: $(FORK_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(FORK_TEST_OBJS:.o=.dep) endif endif FORMAT_REQUEST_TEST_SRC = \ test/core/end2end/data/client_certs.cc \ test/core/end2end/data/server1_cert.cc \ test/core/end2end/data/server1_key.cc \ test/core/end2end/data/test_root_cert.cc \ test/core/http/format_request_test.cc \ FORMAT_REQUEST_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(FORMAT_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/format_request_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/format_request_test: $(FORMAT_REQUEST_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(FORMAT_REQUEST_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/format_request_test endif $(OBJDIR)/$(CONFIG)/test/core/end2end/data/client_certs.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/data/server1_cert.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/data/server1_key.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/data/test_root_cert.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/http/format_request_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_format_request_test: $(FORMAT_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(FORMAT_REQUEST_TEST_OBJS:.o=.dep) endif endif FRAME_HANDLER_TEST_SRC = \ test/core/tsi/alts/crypt/gsec_test_util.cc \ test/core/tsi/alts/frame_protector/frame_handler_test.cc \ FRAME_HANDLER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(FRAME_HANDLER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/frame_handler_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/frame_handler_test: $(FRAME_HANDLER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(FRAME_HANDLER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/frame_handler_test endif $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/crypt/gsec_test_util.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/frame_protector/frame_handler_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_frame_handler_test: $(FRAME_HANDLER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(FRAME_HANDLER_TEST_OBJS:.o=.dep) endif endif GOAWAY_SERVER_TEST_SRC = \ test/core/end2end/cq_verifier.cc \ test/core/end2end/goaway_server_test.cc \ GOAWAY_SERVER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GOAWAY_SERVER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/goaway_server_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/goaway_server_test: $(GOAWAY_SERVER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(GOAWAY_SERVER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/goaway_server_test endif $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/goaway_server_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_goaway_server_test: $(GOAWAY_SERVER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(GOAWAY_SERVER_TEST_OBJS:.o=.dep) endif endif GRPC_ALTS_CREDENTIALS_OPTIONS_TEST_SRC = \ test/core/security/grpc_alts_credentials_options_test.cc \ GRPC_ALTS_CREDENTIALS_OPTIONS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_ALTS_CREDENTIALS_OPTIONS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/grpc_alts_credentials_options_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/grpc_alts_credentials_options_test: $(GRPC_ALTS_CREDENTIALS_OPTIONS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(GRPC_ALTS_CREDENTIALS_OPTIONS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/grpc_alts_credentials_options_test endif $(OBJDIR)/$(CONFIG)/test/core/security/grpc_alts_credentials_options_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_grpc_alts_credentials_options_test: $(GRPC_ALTS_CREDENTIALS_OPTIONS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(GRPC_ALTS_CREDENTIALS_OPTIONS_TEST_OBJS:.o=.dep) endif endif GRPC_BYTE_BUFFER_READER_TEST_SRC = \ test/core/surface/byte_buffer_reader_test.cc \ GRPC_BYTE_BUFFER_READER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_BYTE_BUFFER_READER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/grpc_byte_buffer_reader_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/grpc_byte_buffer_reader_test: $(GRPC_BYTE_BUFFER_READER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(GRPC_BYTE_BUFFER_READER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/grpc_byte_buffer_reader_test endif $(OBJDIR)/$(CONFIG)/test/core/surface/byte_buffer_reader_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_grpc_byte_buffer_reader_test: $(GRPC_BYTE_BUFFER_READER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(GRPC_BYTE_BUFFER_READER_TEST_OBJS:.o=.dep) endif endif GRPC_COMPLETION_QUEUE_TEST_SRC = \ test/core/surface/completion_queue_test.cc \ GRPC_COMPLETION_QUEUE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_COMPLETION_QUEUE_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/grpc_completion_queue_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/grpc_completion_queue_test: $(GRPC_COMPLETION_QUEUE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(GRPC_COMPLETION_QUEUE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/grpc_completion_queue_test endif $(OBJDIR)/$(CONFIG)/test/core/surface/completion_queue_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_grpc_completion_queue_test: $(GRPC_COMPLETION_QUEUE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(GRPC_COMPLETION_QUEUE_TEST_OBJS:.o=.dep) endif endif GRPC_IPV6_LOOPBACK_AVAILABLE_TEST_SRC = \ test/core/iomgr/grpc_ipv6_loopback_available_test.cc \ GRPC_IPV6_LOOPBACK_AVAILABLE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_IPV6_LOOPBACK_AVAILABLE_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/grpc_ipv6_loopback_available_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/grpc_ipv6_loopback_available_test: $(GRPC_IPV6_LOOPBACK_AVAILABLE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(GRPC_IPV6_LOOPBACK_AVAILABLE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/grpc_ipv6_loopback_available_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/grpc_ipv6_loopback_available_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_grpc_ipv6_loopback_available_test: $(GRPC_IPV6_LOOPBACK_AVAILABLE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(GRPC_IPV6_LOOPBACK_AVAILABLE_TEST_OBJS:.o=.dep) endif endif HANDSHAKE_SERVER_WITH_READAHEAD_HANDSHAKER_TEST_SRC = \ test/core/handshake/readahead_handshaker_server_ssl.cc \ test/core/handshake/server_ssl_common.cc \ HANDSHAKE_SERVER_WITH_READAHEAD_HANDSHAKER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HANDSHAKE_SERVER_WITH_READAHEAD_HANDSHAKER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/handshake_server_with_readahead_handshaker_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/handshake_server_with_readahead_handshaker_test: $(HANDSHAKE_SERVER_WITH_READAHEAD_HANDSHAKER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(HANDSHAKE_SERVER_WITH_READAHEAD_HANDSHAKER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/handshake_server_with_readahead_handshaker_test endif $(OBJDIR)/$(CONFIG)/test/core/handshake/readahead_handshaker_server_ssl.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/handshake/server_ssl_common.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_handshake_server_with_readahead_handshaker_test: $(HANDSHAKE_SERVER_WITH_READAHEAD_HANDSHAKER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(HANDSHAKE_SERVER_WITH_READAHEAD_HANDSHAKER_TEST_OBJS:.o=.dep) endif endif HANDSHAKE_VERIFY_PEER_OPTIONS_TEST_SRC = \ test/core/handshake/verify_peer_options.cc \ HANDSHAKE_VERIFY_PEER_OPTIONS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HANDSHAKE_VERIFY_PEER_OPTIONS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/handshake_verify_peer_options_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/handshake_verify_peer_options_test: $(HANDSHAKE_VERIFY_PEER_OPTIONS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(HANDSHAKE_VERIFY_PEER_OPTIONS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/handshake_verify_peer_options_test endif $(OBJDIR)/$(CONFIG)/test/core/handshake/verify_peer_options.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_handshake_verify_peer_options_test: $(HANDSHAKE_VERIFY_PEER_OPTIONS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(HANDSHAKE_VERIFY_PEER_OPTIONS_TEST_OBJS:.o=.dep) endif endif HISTOGRAM_TEST_SRC = \ test/core/util/histogram_test.cc \ HISTOGRAM_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HISTOGRAM_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/histogram_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/histogram_test: $(HISTOGRAM_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(HISTOGRAM_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/histogram_test endif $(OBJDIR)/$(CONFIG)/test/core/util/histogram_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_histogram_test: $(HISTOGRAM_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(HISTOGRAM_TEST_OBJS:.o=.dep) endif endif HOST_PORT_TEST_SRC = \ test/core/gprpp/host_port_test.cc \ HOST_PORT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HOST_PORT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/host_port_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/host_port_test: $(HOST_PORT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(HOST_PORT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/host_port_test endif $(OBJDIR)/$(CONFIG)/test/core/gprpp/host_port_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_host_port_test: $(HOST_PORT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(HOST_PORT_TEST_OBJS:.o=.dep) endif endif HPACK_ENCODER_TEST_SRC = \ test/core/transport/chttp2/hpack_encoder_test.cc \ HPACK_ENCODER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HPACK_ENCODER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/hpack_encoder_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/hpack_encoder_test: $(HPACK_ENCODER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(HPACK_ENCODER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/hpack_encoder_test endif $(OBJDIR)/$(CONFIG)/test/core/transport/chttp2/hpack_encoder_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_hpack_encoder_test: $(HPACK_ENCODER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(HPACK_ENCODER_TEST_OBJS:.o=.dep) endif endif HPACK_PARSER_TEST_SRC = \ test/core/transport/chttp2/hpack_parser_test.cc \ HPACK_PARSER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HPACK_PARSER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/hpack_parser_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/hpack_parser_test: $(HPACK_PARSER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(HPACK_PARSER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/hpack_parser_test endif $(OBJDIR)/$(CONFIG)/test/core/transport/chttp2/hpack_parser_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_hpack_parser_test: $(HPACK_PARSER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(HPACK_PARSER_TEST_OBJS:.o=.dep) endif endif HPACK_TABLE_TEST_SRC = \ test/core/transport/chttp2/hpack_table_test.cc \ HPACK_TABLE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HPACK_TABLE_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/hpack_table_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/hpack_table_test: $(HPACK_TABLE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(HPACK_TABLE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/hpack_table_test endif $(OBJDIR)/$(CONFIG)/test/core/transport/chttp2/hpack_table_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_hpack_table_test: $(HPACK_TABLE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(HPACK_TABLE_TEST_OBJS:.o=.dep) endif endif HTTPCLI_TEST_SRC = \ test/core/end2end/data/client_certs.cc \ test/core/end2end/data/server1_cert.cc \ test/core/end2end/data/server1_key.cc \ test/core/end2end/data/test_root_cert.cc \ test/core/http/httpcli_test.cc \ HTTPCLI_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTPCLI_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/httpcli_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/httpcli_test: $(HTTPCLI_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(HTTPCLI_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/httpcli_test endif $(OBJDIR)/$(CONFIG)/test/core/end2end/data/client_certs.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/data/server1_cert.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/data/server1_key.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/data/test_root_cert.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/http/httpcli_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_httpcli_test: $(HTTPCLI_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(HTTPCLI_TEST_OBJS:.o=.dep) endif endif HTTPSCLI_TEST_SRC = \ test/core/end2end/data/client_certs.cc \ test/core/end2end/data/server1_cert.cc \ test/core/end2end/data/server1_key.cc \ test/core/end2end/data/test_root_cert.cc \ test/core/http/httpscli_test.cc \ HTTPSCLI_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTPSCLI_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/httpscli_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/httpscli_test: $(HTTPSCLI_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(HTTPSCLI_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/httpscli_test endif $(OBJDIR)/$(CONFIG)/test/core/end2end/data/client_certs.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/data/server1_cert.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/data/server1_key.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/data/test_root_cert.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/http/httpscli_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_httpscli_test: $(HTTPSCLI_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(HTTPSCLI_TEST_OBJS:.o=.dep) endif endif INIT_TEST_SRC = \ test/core/surface/init_test.cc \ INIT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(INIT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/init_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/init_test: $(INIT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(INIT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/init_test endif $(OBJDIR)/$(CONFIG)/test/core/surface/init_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_init_test: $(INIT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(INIT_TEST_OBJS:.o=.dep) endif endif INPROC_CALLBACK_TEST_SRC = \ test/core/end2end/inproc_callback_test.cc \ INPROC_CALLBACK_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(INPROC_CALLBACK_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/inproc_callback_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/inproc_callback_test: $(INPROC_CALLBACK_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libend2end_tests.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(INPROC_CALLBACK_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libend2end_tests.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/inproc_callback_test endif $(OBJDIR)/$(CONFIG)/test/core/end2end/inproc_callback_test.o: $(LIBDIR)/$(CONFIG)/libend2end_tests.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_inproc_callback_test: $(INPROC_CALLBACK_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(INPROC_CALLBACK_TEST_OBJS:.o=.dep) endif endif INVALID_CALL_ARGUMENT_TEST_SRC = \ test/core/end2end/cq_verifier.cc \ test/core/end2end/invalid_call_argument_test.cc \ INVALID_CALL_ARGUMENT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(INVALID_CALL_ARGUMENT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/invalid_call_argument_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/invalid_call_argument_test: $(INVALID_CALL_ARGUMENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(INVALID_CALL_ARGUMENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/invalid_call_argument_test endif $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/invalid_call_argument_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_invalid_call_argument_test: $(INVALID_CALL_ARGUMENT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(INVALID_CALL_ARGUMENT_TEST_OBJS:.o=.dep) endif endif JSON_TOKEN_TEST_SRC = \ test/core/security/json_token_test.cc \ JSON_TOKEN_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(JSON_TOKEN_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/json_token_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/json_token_test: $(JSON_TOKEN_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(JSON_TOKEN_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/json_token_test endif $(OBJDIR)/$(CONFIG)/test/core/security/json_token_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_json_token_test: $(JSON_TOKEN_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(JSON_TOKEN_TEST_OBJS:.o=.dep) endif endif JWT_VERIFIER_TEST_SRC = \ test/core/security/jwt_verifier_test.cc \ JWT_VERIFIER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(JWT_VERIFIER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/jwt_verifier_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/jwt_verifier_test: $(JWT_VERIFIER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(JWT_VERIFIER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/jwt_verifier_test endif $(OBJDIR)/$(CONFIG)/test/core/security/jwt_verifier_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_jwt_verifier_test: $(JWT_VERIFIER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(JWT_VERIFIER_TEST_OBJS:.o=.dep) endif endif LAME_CLIENT_TEST_SRC = \ test/core/end2end/cq_verifier.cc \ test/core/surface/lame_client_test.cc \ LAME_CLIENT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LAME_CLIENT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/lame_client_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/lame_client_test: $(LAME_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(LAME_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/lame_client_test endif $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/surface/lame_client_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_lame_client_test: $(LAME_CLIENT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(LAME_CLIENT_TEST_OBJS:.o=.dep) endif endif LOAD_FILE_TEST_SRC = \ test/core/iomgr/load_file_test.cc \ LOAD_FILE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LOAD_FILE_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/load_file_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/load_file_test: $(LOAD_FILE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(LOAD_FILE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/load_file_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/load_file_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_load_file_test: $(LOAD_FILE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(LOAD_FILE_TEST_OBJS:.o=.dep) endif endif LOG_TEST_SRC = \ test/core/gpr/log_test.cc \ LOG_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LOG_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/log_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/log_test: $(LOG_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(LOG_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/log_test endif $(OBJDIR)/$(CONFIG)/test/core/gpr/log_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_log_test: $(LOG_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(LOG_TEST_OBJS:.o=.dep) endif endif MANUAL_CONSTRUCTOR_TEST_SRC = \ test/core/gprpp/manual_constructor_test.cc \ MANUAL_CONSTRUCTOR_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(MANUAL_CONSTRUCTOR_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/manual_constructor_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/manual_constructor_test: $(MANUAL_CONSTRUCTOR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(MANUAL_CONSTRUCTOR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/manual_constructor_test endif $(OBJDIR)/$(CONFIG)/test/core/gprpp/manual_constructor_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_manual_constructor_test: $(MANUAL_CONSTRUCTOR_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(MANUAL_CONSTRUCTOR_TEST_OBJS:.o=.dep) endif endif MESSAGE_COMPRESS_TEST_SRC = \ test/core/compression/message_compress_test.cc \ MESSAGE_COMPRESS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(MESSAGE_COMPRESS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/message_compress_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/message_compress_test: $(MESSAGE_COMPRESS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(MESSAGE_COMPRESS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/message_compress_test endif $(OBJDIR)/$(CONFIG)/test/core/compression/message_compress_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_message_compress_test: $(MESSAGE_COMPRESS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(MESSAGE_COMPRESS_TEST_OBJS:.o=.dep) endif endif METADATA_TEST_SRC = \ test/core/transport/metadata_test.cc \ METADATA_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(METADATA_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/metadata_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/metadata_test: $(METADATA_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(METADATA_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/metadata_test endif $(OBJDIR)/$(CONFIG)/test/core/transport/metadata_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_metadata_test: $(METADATA_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(METADATA_TEST_OBJS:.o=.dep) endif endif MINIMAL_STACK_IS_MINIMAL_TEST_SRC = \ test/core/channel/minimal_stack_is_minimal_test.cc \ MINIMAL_STACK_IS_MINIMAL_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(MINIMAL_STACK_IS_MINIMAL_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/minimal_stack_is_minimal_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/minimal_stack_is_minimal_test: $(MINIMAL_STACK_IS_MINIMAL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(MINIMAL_STACK_IS_MINIMAL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/minimal_stack_is_minimal_test endif $(OBJDIR)/$(CONFIG)/test/core/channel/minimal_stack_is_minimal_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_minimal_stack_is_minimal_test: $(MINIMAL_STACK_IS_MINIMAL_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(MINIMAL_STACK_IS_MINIMAL_TEST_OBJS:.o=.dep) endif endif MPMCQUEUE_TEST_SRC = \ test/core/iomgr/mpmcqueue_test.cc \ MPMCQUEUE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(MPMCQUEUE_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/mpmcqueue_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/mpmcqueue_test: $(MPMCQUEUE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(MPMCQUEUE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/mpmcqueue_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/mpmcqueue_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_mpmcqueue_test: $(MPMCQUEUE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(MPMCQUEUE_TEST_OBJS:.o=.dep) endif endif MPSCQ_TEST_SRC = \ test/core/gprpp/mpscq_test.cc \ MPSCQ_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(MPSCQ_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/mpscq_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/mpscq_test: $(MPSCQ_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(MPSCQ_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/mpscq_test endif $(OBJDIR)/$(CONFIG)/test/core/gprpp/mpscq_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_mpscq_test: $(MPSCQ_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(MPSCQ_TEST_OBJS:.o=.dep) endif endif MULTIPLE_SERVER_QUEUES_TEST_SRC = \ test/core/end2end/cq_verifier.cc \ test/core/end2end/multiple_server_queues_test.cc \ MULTIPLE_SERVER_QUEUES_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(MULTIPLE_SERVER_QUEUES_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/multiple_server_queues_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/multiple_server_queues_test: $(MULTIPLE_SERVER_QUEUES_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(MULTIPLE_SERVER_QUEUES_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/multiple_server_queues_test endif $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/multiple_server_queues_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_multiple_server_queues_test: $(MULTIPLE_SERVER_QUEUES_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(MULTIPLE_SERVER_QUEUES_TEST_OBJS:.o=.dep) endif endif MURMUR_HASH_TEST_SRC = \ test/core/gpr/murmur_hash_test.cc \ MURMUR_HASH_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(MURMUR_HASH_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/murmur_hash_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/murmur_hash_test: $(MURMUR_HASH_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(MURMUR_HASH_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/murmur_hash_test endif $(OBJDIR)/$(CONFIG)/test/core/gpr/murmur_hash_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_murmur_hash_test: $(MURMUR_HASH_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(MURMUR_HASH_TEST_OBJS:.o=.dep) endif endif NO_SERVER_TEST_SRC = \ test/core/end2end/cq_verifier.cc \ test/core/end2end/no_server_test.cc \ NO_SERVER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(NO_SERVER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/no_server_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/no_server_test: $(NO_SERVER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(NO_SERVER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/no_server_test endif $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/no_server_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_no_server_test: $(NO_SERVER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(NO_SERVER_TEST_OBJS:.o=.dep) endif endif NUM_EXTERNAL_CONNECTIVITY_WATCHERS_TEST_SRC = \ test/core/surface/num_external_connectivity_watchers_test.cc \ NUM_EXTERNAL_CONNECTIVITY_WATCHERS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(NUM_EXTERNAL_CONNECTIVITY_WATCHERS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/num_external_connectivity_watchers_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/num_external_connectivity_watchers_test: $(NUM_EXTERNAL_CONNECTIVITY_WATCHERS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(NUM_EXTERNAL_CONNECTIVITY_WATCHERS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/num_external_connectivity_watchers_test endif $(OBJDIR)/$(CONFIG)/test/core/surface/num_external_connectivity_watchers_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_num_external_connectivity_watchers_test: $(NUM_EXTERNAL_CONNECTIVITY_WATCHERS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(NUM_EXTERNAL_CONNECTIVITY_WATCHERS_TEST_OBJS:.o=.dep) endif endif PARSE_ADDRESS_TEST_SRC = \ test/core/client_channel/parse_address_test.cc \ PARSE_ADDRESS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(PARSE_ADDRESS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/parse_address_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/parse_address_test: $(PARSE_ADDRESS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(PARSE_ADDRESS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/parse_address_test endif $(OBJDIR)/$(CONFIG)/test/core/client_channel/parse_address_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_parse_address_test: $(PARSE_ADDRESS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(PARSE_ADDRESS_TEST_OBJS:.o=.dep) endif endif PARSE_ADDRESS_WITH_NAMED_SCOPE_ID_TEST_SRC = \ test/core/client_channel/parse_address_with_named_scope_id_test.cc \ PARSE_ADDRESS_WITH_NAMED_SCOPE_ID_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(PARSE_ADDRESS_WITH_NAMED_SCOPE_ID_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/parse_address_with_named_scope_id_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/parse_address_with_named_scope_id_test: $(PARSE_ADDRESS_WITH_NAMED_SCOPE_ID_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(PARSE_ADDRESS_WITH_NAMED_SCOPE_ID_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/parse_address_with_named_scope_id_test endif $(OBJDIR)/$(CONFIG)/test/core/client_channel/parse_address_with_named_scope_id_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_parse_address_with_named_scope_id_test: $(PARSE_ADDRESS_WITH_NAMED_SCOPE_ID_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(PARSE_ADDRESS_WITH_NAMED_SCOPE_ID_TEST_OBJS:.o=.dep) endif endif PARSER_TEST_SRC = \ test/core/end2end/data/client_certs.cc \ test/core/end2end/data/server1_cert.cc \ test/core/end2end/data/server1_key.cc \ test/core/end2end/data/test_root_cert.cc \ test/core/http/parser_test.cc \ PARSER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(PARSER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/parser_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/parser_test: $(PARSER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(PARSER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/parser_test endif $(OBJDIR)/$(CONFIG)/test/core/end2end/data/client_certs.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/data/server1_cert.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/data/server1_key.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/data/test_root_cert.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/http/parser_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_parser_test: $(PARSER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(PARSER_TEST_OBJS:.o=.dep) endif endif PERCENT_ENCODING_TEST_SRC = \ test/core/slice/percent_encoding_test.cc \ PERCENT_ENCODING_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(PERCENT_ENCODING_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/percent_encoding_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/percent_encoding_test: $(PERCENT_ENCODING_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(PERCENT_ENCODING_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/percent_encoding_test endif $(OBJDIR)/$(CONFIG)/test/core/slice/percent_encoding_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_percent_encoding_test: $(PERCENT_ENCODING_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(PERCENT_ENCODING_TEST_OBJS:.o=.dep) endif endif PUBLIC_HEADERS_MUST_BE_C89_SRC = \ test/core/surface/public_headers_must_be_c89.c \ PUBLIC_HEADERS_MUST_BE_C89_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(PUBLIC_HEADERS_MUST_BE_C89_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/public_headers_must_be_c89: openssl_dep_error else $(BINDIR)/$(CONFIG)/public_headers_must_be_c89: $(PUBLIC_HEADERS_MUST_BE_C89_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(PUBLIC_HEADERS_MUST_BE_C89_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/public_headers_must_be_c89 endif $(OBJDIR)/$(CONFIG)/test/core/surface/public_headers_must_be_c89.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_public_headers_must_be_c89: $(PUBLIC_HEADERS_MUST_BE_C89_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(PUBLIC_HEADERS_MUST_BE_C89_OBJS:.o=.dep) endif endif RESOLVE_ADDRESS_USING_ARES_RESOLVER_POSIX_TEST_SRC = \ test/core/iomgr/resolve_address_posix_test.cc \ RESOLVE_ADDRESS_USING_ARES_RESOLVER_POSIX_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(RESOLVE_ADDRESS_USING_ARES_RESOLVER_POSIX_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/resolve_address_using_ares_resolver_posix_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/resolve_address_using_ares_resolver_posix_test: $(RESOLVE_ADDRESS_USING_ARES_RESOLVER_POSIX_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(RESOLVE_ADDRESS_USING_ARES_RESOLVER_POSIX_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/resolve_address_using_ares_resolver_posix_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/resolve_address_posix_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_resolve_address_using_ares_resolver_posix_test: $(RESOLVE_ADDRESS_USING_ARES_RESOLVER_POSIX_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(RESOLVE_ADDRESS_USING_ARES_RESOLVER_POSIX_TEST_OBJS:.o=.dep) endif endif RESOLVE_ADDRESS_USING_ARES_RESOLVER_TEST_SRC = \ test/core/iomgr/resolve_address_test.cc \ RESOLVE_ADDRESS_USING_ARES_RESOLVER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(RESOLVE_ADDRESS_USING_ARES_RESOLVER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/resolve_address_using_ares_resolver_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/resolve_address_using_ares_resolver_test: $(RESOLVE_ADDRESS_USING_ARES_RESOLVER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(RESOLVE_ADDRESS_USING_ARES_RESOLVER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/resolve_address_using_ares_resolver_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/resolve_address_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_resolve_address_using_ares_resolver_test: $(RESOLVE_ADDRESS_USING_ARES_RESOLVER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(RESOLVE_ADDRESS_USING_ARES_RESOLVER_TEST_OBJS:.o=.dep) endif endif RESOLVE_ADDRESS_USING_NATIVE_RESOLVER_POSIX_TEST_SRC = \ test/core/iomgr/resolve_address_posix_test.cc \ RESOLVE_ADDRESS_USING_NATIVE_RESOLVER_POSIX_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(RESOLVE_ADDRESS_USING_NATIVE_RESOLVER_POSIX_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/resolve_address_using_native_resolver_posix_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/resolve_address_using_native_resolver_posix_test: $(RESOLVE_ADDRESS_USING_NATIVE_RESOLVER_POSIX_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(RESOLVE_ADDRESS_USING_NATIVE_RESOLVER_POSIX_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/resolve_address_using_native_resolver_posix_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/resolve_address_posix_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_resolve_address_using_native_resolver_posix_test: $(RESOLVE_ADDRESS_USING_NATIVE_RESOLVER_POSIX_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(RESOLVE_ADDRESS_USING_NATIVE_RESOLVER_POSIX_TEST_OBJS:.o=.dep) endif endif RESOLVE_ADDRESS_USING_NATIVE_RESOLVER_TEST_SRC = \ test/core/iomgr/resolve_address_test.cc \ RESOLVE_ADDRESS_USING_NATIVE_RESOLVER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(RESOLVE_ADDRESS_USING_NATIVE_RESOLVER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/resolve_address_using_native_resolver_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/resolve_address_using_native_resolver_test: $(RESOLVE_ADDRESS_USING_NATIVE_RESOLVER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(RESOLVE_ADDRESS_USING_NATIVE_RESOLVER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/resolve_address_using_native_resolver_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/resolve_address_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_resolve_address_using_native_resolver_test: $(RESOLVE_ADDRESS_USING_NATIVE_RESOLVER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(RESOLVE_ADDRESS_USING_NATIVE_RESOLVER_TEST_OBJS:.o=.dep) endif endif RESOURCE_QUOTA_TEST_SRC = \ test/core/iomgr/resource_quota_test.cc \ RESOURCE_QUOTA_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(RESOURCE_QUOTA_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/resource_quota_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/resource_quota_test: $(RESOURCE_QUOTA_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(RESOURCE_QUOTA_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/resource_quota_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/resource_quota_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_resource_quota_test: $(RESOURCE_QUOTA_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(RESOURCE_QUOTA_TEST_OBJS:.o=.dep) endif endif SECURE_CHANNEL_CREATE_TEST_SRC = \ test/core/surface/secure_channel_create_test.cc \ SECURE_CHANNEL_CREATE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SECURE_CHANNEL_CREATE_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/secure_channel_create_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/secure_channel_create_test: $(SECURE_CHANNEL_CREATE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SECURE_CHANNEL_CREATE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/secure_channel_create_test endif $(OBJDIR)/$(CONFIG)/test/core/surface/secure_channel_create_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_secure_channel_create_test: $(SECURE_CHANNEL_CREATE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SECURE_CHANNEL_CREATE_TEST_OBJS:.o=.dep) endif endif SECURE_ENDPOINT_TEST_SRC = \ test/core/iomgr/endpoint_tests.cc \ test/core/security/secure_endpoint_test.cc \ SECURE_ENDPOINT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SECURE_ENDPOINT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/secure_endpoint_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/secure_endpoint_test: $(SECURE_ENDPOINT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SECURE_ENDPOINT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/secure_endpoint_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/endpoint_tests.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/security/secure_endpoint_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_secure_endpoint_test: $(SECURE_ENDPOINT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SECURE_ENDPOINT_TEST_OBJS:.o=.dep) endif endif SECURITY_CONNECTOR_TEST_SRC = \ test/core/security/security_connector_test.cc \ SECURITY_CONNECTOR_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SECURITY_CONNECTOR_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/security_connector_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/security_connector_test: $(SECURITY_CONNECTOR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SECURITY_CONNECTOR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/security_connector_test endif $(OBJDIR)/$(CONFIG)/test/core/security/security_connector_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_security_connector_test: $(SECURITY_CONNECTOR_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SECURITY_CONNECTOR_TEST_OBJS:.o=.dep) endif endif SEQUENTIAL_CONNECTIVITY_TEST_SRC = \ test/core/surface/sequential_connectivity_test.cc \ SEQUENTIAL_CONNECTIVITY_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SEQUENTIAL_CONNECTIVITY_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/sequential_connectivity_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/sequential_connectivity_test: $(SEQUENTIAL_CONNECTIVITY_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SEQUENTIAL_CONNECTIVITY_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/sequential_connectivity_test endif $(OBJDIR)/$(CONFIG)/test/core/surface/sequential_connectivity_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_sequential_connectivity_test: $(SEQUENTIAL_CONNECTIVITY_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SEQUENTIAL_CONNECTIVITY_TEST_OBJS:.o=.dep) endif endif SERVER_CHTTP2_TEST_SRC = \ test/core/surface/server_chttp2_test.cc \ SERVER_CHTTP2_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SERVER_CHTTP2_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/server_chttp2_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/server_chttp2_test: $(SERVER_CHTTP2_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SERVER_CHTTP2_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/server_chttp2_test endif $(OBJDIR)/$(CONFIG)/test/core/surface/server_chttp2_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_server_chttp2_test: $(SERVER_CHTTP2_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SERVER_CHTTP2_TEST_OBJS:.o=.dep) endif endif SERVER_SSL_TEST_SRC = \ test/core/handshake/server_ssl.cc \ test/core/handshake/server_ssl_common.cc \ SERVER_SSL_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SERVER_SSL_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/server_ssl_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/server_ssl_test: $(SERVER_SSL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SERVER_SSL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/server_ssl_test endif $(OBJDIR)/$(CONFIG)/test/core/handshake/server_ssl.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/handshake/server_ssl_common.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_server_ssl_test: $(SERVER_SSL_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SERVER_SSL_TEST_OBJS:.o=.dep) endif endif SERVER_TEST_SRC = \ test/core/surface/server_test.cc \ SERVER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SERVER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/server_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/server_test: $(SERVER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SERVER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/server_test endif $(OBJDIR)/$(CONFIG)/test/core/surface/server_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_server_test: $(SERVER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SERVER_TEST_OBJS:.o=.dep) endif endif SLICE_BUFFER_TEST_SRC = \ test/core/slice/slice_buffer_test.cc \ SLICE_BUFFER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SLICE_BUFFER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/slice_buffer_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/slice_buffer_test: $(SLICE_BUFFER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SLICE_BUFFER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/slice_buffer_test endif $(OBJDIR)/$(CONFIG)/test/core/slice/slice_buffer_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_slice_buffer_test: $(SLICE_BUFFER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SLICE_BUFFER_TEST_OBJS:.o=.dep) endif endif SLICE_STRING_HELPERS_TEST_SRC = \ test/core/slice/slice_string_helpers_test.cc \ SLICE_STRING_HELPERS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SLICE_STRING_HELPERS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/slice_string_helpers_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/slice_string_helpers_test: $(SLICE_STRING_HELPERS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SLICE_STRING_HELPERS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/slice_string_helpers_test endif $(OBJDIR)/$(CONFIG)/test/core/slice/slice_string_helpers_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_slice_string_helpers_test: $(SLICE_STRING_HELPERS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SLICE_STRING_HELPERS_TEST_OBJS:.o=.dep) endif endif SOCKADDR_RESOLVER_TEST_SRC = \ test/core/client_channel/resolvers/sockaddr_resolver_test.cc \ SOCKADDR_RESOLVER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SOCKADDR_RESOLVER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/sockaddr_resolver_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/sockaddr_resolver_test: $(SOCKADDR_RESOLVER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SOCKADDR_RESOLVER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/sockaddr_resolver_test endif $(OBJDIR)/$(CONFIG)/test/core/client_channel/resolvers/sockaddr_resolver_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_sockaddr_resolver_test: $(SOCKADDR_RESOLVER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SOCKADDR_RESOLVER_TEST_OBJS:.o=.dep) endif endif SOCKADDR_UTILS_TEST_SRC = \ test/core/iomgr/sockaddr_utils_test.cc \ SOCKADDR_UTILS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SOCKADDR_UTILS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/sockaddr_utils_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/sockaddr_utils_test: $(SOCKADDR_UTILS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SOCKADDR_UTILS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/sockaddr_utils_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/sockaddr_utils_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_sockaddr_utils_test: $(SOCKADDR_UTILS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SOCKADDR_UTILS_TEST_OBJS:.o=.dep) endif endif SOCKET_UTILS_TEST_SRC = \ test/core/iomgr/socket_utils_test.cc \ SOCKET_UTILS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SOCKET_UTILS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/socket_utils_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/socket_utils_test: $(SOCKET_UTILS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SOCKET_UTILS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/socket_utils_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/socket_utils_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_socket_utils_test: $(SOCKET_UTILS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SOCKET_UTILS_TEST_OBJS:.o=.dep) endif endif SPINLOCK_TEST_SRC = \ test/core/gpr/spinlock_test.cc \ SPINLOCK_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SPINLOCK_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/spinlock_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/spinlock_test: $(SPINLOCK_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SPINLOCK_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/spinlock_test endif $(OBJDIR)/$(CONFIG)/test/core/gpr/spinlock_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_spinlock_test: $(SPINLOCK_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SPINLOCK_TEST_OBJS:.o=.dep) endif endif SSL_CREDENTIALS_TEST_SRC = \ test/core/security/ssl_credentials_test.cc \ SSL_CREDENTIALS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SSL_CREDENTIALS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/ssl_credentials_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/ssl_credentials_test: $(SSL_CREDENTIALS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SSL_CREDENTIALS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/ssl_credentials_test endif $(OBJDIR)/$(CONFIG)/test/core/security/ssl_credentials_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_ssl_credentials_test: $(SSL_CREDENTIALS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SSL_CREDENTIALS_TEST_OBJS:.o=.dep) endif endif SSL_TRANSPORT_SECURITY_TEST_SRC = \ test/core/tsi/ssl_transport_security_test.cc \ test/core/tsi/transport_security_test_lib.cc \ SSL_TRANSPORT_SECURITY_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SSL_TRANSPORT_SECURITY_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/ssl_transport_security_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/ssl_transport_security_test: $(SSL_TRANSPORT_SECURITY_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SSL_TRANSPORT_SECURITY_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/ssl_transport_security_test endif $(OBJDIR)/$(CONFIG)/test/core/tsi/ssl_transport_security_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/tsi/transport_security_test_lib.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_ssl_transport_security_test: $(SSL_TRANSPORT_SECURITY_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SSL_TRANSPORT_SECURITY_TEST_OBJS:.o=.dep) endif endif STATUS_CONVERSION_TEST_SRC = \ test/core/transport/status_conversion_test.cc \ STATUS_CONVERSION_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(STATUS_CONVERSION_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/status_conversion_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/status_conversion_test: $(STATUS_CONVERSION_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(STATUS_CONVERSION_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/status_conversion_test endif $(OBJDIR)/$(CONFIG)/test/core/transport/status_conversion_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_status_conversion_test: $(STATUS_CONVERSION_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(STATUS_CONVERSION_TEST_OBJS:.o=.dep) endif endif STREAM_COMPRESSION_TEST_SRC = \ test/core/compression/stream_compression_test.cc \ STREAM_COMPRESSION_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(STREAM_COMPRESSION_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/stream_compression_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/stream_compression_test: $(STREAM_COMPRESSION_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(STREAM_COMPRESSION_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/stream_compression_test endif $(OBJDIR)/$(CONFIG)/test/core/compression/stream_compression_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_stream_compression_test: $(STREAM_COMPRESSION_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(STREAM_COMPRESSION_TEST_OBJS:.o=.dep) endif endif STREAM_MAP_TEST_SRC = \ test/core/transport/chttp2/stream_map_test.cc \ STREAM_MAP_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(STREAM_MAP_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/stream_map_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/stream_map_test: $(STREAM_MAP_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(STREAM_MAP_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/stream_map_test endif $(OBJDIR)/$(CONFIG)/test/core/transport/chttp2/stream_map_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_stream_map_test: $(STREAM_MAP_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(STREAM_MAP_TEST_OBJS:.o=.dep) endif endif STREAM_OWNED_SLICE_TEST_SRC = \ test/core/transport/stream_owned_slice_test.cc \ STREAM_OWNED_SLICE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(STREAM_OWNED_SLICE_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/stream_owned_slice_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/stream_owned_slice_test: $(STREAM_OWNED_SLICE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(STREAM_OWNED_SLICE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/stream_owned_slice_test endif $(OBJDIR)/$(CONFIG)/test/core/transport/stream_owned_slice_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_stream_owned_slice_test: $(STREAM_OWNED_SLICE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(STREAM_OWNED_SLICE_TEST_OBJS:.o=.dep) endif endif STRING_TEST_SRC = \ test/core/gpr/string_test.cc \ STRING_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(STRING_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/string_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/string_test: $(STRING_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(STRING_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/string_test endif $(OBJDIR)/$(CONFIG)/test/core/gpr/string_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_string_test: $(STRING_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(STRING_TEST_OBJS:.o=.dep) endif endif SYNC_TEST_SRC = \ test/core/gpr/sync_test.cc \ SYNC_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SYNC_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/sync_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/sync_test: $(SYNC_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SYNC_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/sync_test endif $(OBJDIR)/$(CONFIG)/test/core/gpr/sync_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_sync_test: $(SYNC_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SYNC_TEST_OBJS:.o=.dep) endif endif TCP_CLIENT_POSIX_TEST_SRC = \ test/core/iomgr/tcp_client_posix_test.cc \ TCP_CLIENT_POSIX_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(TCP_CLIENT_POSIX_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/tcp_client_posix_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/tcp_client_posix_test: $(TCP_CLIENT_POSIX_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(TCP_CLIENT_POSIX_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/tcp_client_posix_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/tcp_client_posix_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_tcp_client_posix_test: $(TCP_CLIENT_POSIX_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(TCP_CLIENT_POSIX_TEST_OBJS:.o=.dep) endif endif TCP_POSIX_TEST_SRC = \ test/core/iomgr/endpoint_tests.cc \ test/core/iomgr/tcp_posix_test.cc \ TCP_POSIX_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(TCP_POSIX_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/tcp_posix_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/tcp_posix_test: $(TCP_POSIX_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(TCP_POSIX_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/tcp_posix_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/endpoint_tests.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/iomgr/tcp_posix_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_tcp_posix_test: $(TCP_POSIX_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(TCP_POSIX_TEST_OBJS:.o=.dep) endif endif TCP_SERVER_POSIX_TEST_SRC = \ test/core/iomgr/tcp_server_posix_test.cc \ TCP_SERVER_POSIX_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(TCP_SERVER_POSIX_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/tcp_server_posix_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/tcp_server_posix_test: $(TCP_SERVER_POSIX_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(TCP_SERVER_POSIX_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/tcp_server_posix_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/tcp_server_posix_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_tcp_server_posix_test: $(TCP_SERVER_POSIX_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(TCP_SERVER_POSIX_TEST_OBJS:.o=.dep) endif endif TEST_CORE_GPR_TIME_TEST_SRC = \ test/core/gpr/time_test.cc \ TEST_CORE_GPR_TIME_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(TEST_CORE_GPR_TIME_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/test_core_gpr_time_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/test_core_gpr_time_test: $(TEST_CORE_GPR_TIME_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(TEST_CORE_GPR_TIME_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/test_core_gpr_time_test endif $(OBJDIR)/$(CONFIG)/test/core/gpr/time_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_test_core_gpr_time_test: $(TEST_CORE_GPR_TIME_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(TEST_CORE_GPR_TIME_TEST_OBJS:.o=.dep) endif endif TEST_CORE_SECURITY_CREDENTIALS_TEST_SRC = \ test/core/security/credentials_test.cc \ TEST_CORE_SECURITY_CREDENTIALS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(TEST_CORE_SECURITY_CREDENTIALS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/test_core_security_credentials_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/test_core_security_credentials_test: $(TEST_CORE_SECURITY_CREDENTIALS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(TEST_CORE_SECURITY_CREDENTIALS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/test_core_security_credentials_test endif $(OBJDIR)/$(CONFIG)/test/core/security/credentials_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_test_core_security_credentials_test: $(TEST_CORE_SECURITY_CREDENTIALS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(TEST_CORE_SECURITY_CREDENTIALS_TEST_OBJS:.o=.dep) endif endif TEST_CORE_SLICE_SLICE_TEST_SRC = \ test/core/slice/slice_test.cc \ TEST_CORE_SLICE_SLICE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(TEST_CORE_SLICE_SLICE_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/test_core_slice_slice_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/test_core_slice_slice_test: $(TEST_CORE_SLICE_SLICE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(TEST_CORE_SLICE_SLICE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/test_core_slice_slice_test endif $(OBJDIR)/$(CONFIG)/test/core/slice/slice_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_test_core_slice_slice_test: $(TEST_CORE_SLICE_SLICE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(TEST_CORE_SLICE_SLICE_TEST_OBJS:.o=.dep) endif endif THD_TEST_SRC = \ test/core/gprpp/thd_test.cc \ THD_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(THD_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/thd_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/thd_test: $(THD_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(THD_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/thd_test endif $(OBJDIR)/$(CONFIG)/test/core/gprpp/thd_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_thd_test: $(THD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(THD_TEST_OBJS:.o=.dep) endif endif THREADPOOL_TEST_SRC = \ test/core/iomgr/threadpool_test.cc \ THREADPOOL_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(THREADPOOL_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/threadpool_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/threadpool_test: $(THREADPOOL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(THREADPOOL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/threadpool_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/threadpool_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_threadpool_test: $(THREADPOOL_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(THREADPOOL_TEST_OBJS:.o=.dep) endif endif TIME_AVERAGED_STATS_TEST_SRC = \ test/core/iomgr/time_averaged_stats_test.cc \ TIME_AVERAGED_STATS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(TIME_AVERAGED_STATS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/time_averaged_stats_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/time_averaged_stats_test: $(TIME_AVERAGED_STATS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(TIME_AVERAGED_STATS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/time_averaged_stats_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/time_averaged_stats_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_time_averaged_stats_test: $(TIME_AVERAGED_STATS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(TIME_AVERAGED_STATS_TEST_OBJS:.o=.dep) endif endif TIMEOUT_ENCODING_TEST_SRC = \ test/core/transport/timeout_encoding_test.cc \ TIMEOUT_ENCODING_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(TIMEOUT_ENCODING_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/timeout_encoding_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/timeout_encoding_test: $(TIMEOUT_ENCODING_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(TIMEOUT_ENCODING_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/timeout_encoding_test endif $(OBJDIR)/$(CONFIG)/test/core/transport/timeout_encoding_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_timeout_encoding_test: $(TIMEOUT_ENCODING_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(TIMEOUT_ENCODING_TEST_OBJS:.o=.dep) endif endif TIMER_HEAP_TEST_SRC = \ test/core/iomgr/timer_heap_test.cc \ TIMER_HEAP_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(TIMER_HEAP_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/timer_heap_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/timer_heap_test: $(TIMER_HEAP_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(TIMER_HEAP_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/timer_heap_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/timer_heap_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_timer_heap_test: $(TIMER_HEAP_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(TIMER_HEAP_TEST_OBJS:.o=.dep) endif endif TIMER_LIST_TEST_SRC = \ test/core/iomgr/timer_list_test.cc \ TIMER_LIST_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(TIMER_LIST_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/timer_list_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/timer_list_test: $(TIMER_LIST_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(TIMER_LIST_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/timer_list_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/timer_list_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_timer_list_test: $(TIMER_LIST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(TIMER_LIST_TEST_OBJS:.o=.dep) endif endif TLS_TEST_SRC = \ test/core/gpr/tls_test.cc \ TLS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(TLS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/tls_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/tls_test: $(TLS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(TLS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/tls_test endif $(OBJDIR)/$(CONFIG)/test/core/gpr/tls_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_tls_test: $(TLS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(TLS_TEST_OBJS:.o=.dep) endif endif TRANSPORT_SECURITY_COMMON_API_TEST_SRC = \ test/core/tsi/alts/handshaker/transport_security_common_api_test.cc \ TRANSPORT_SECURITY_COMMON_API_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(TRANSPORT_SECURITY_COMMON_API_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/transport_security_common_api_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/transport_security_common_api_test: $(TRANSPORT_SECURITY_COMMON_API_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(TRANSPORT_SECURITY_COMMON_API_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/transport_security_common_api_test endif $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/handshaker/transport_security_common_api_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_transport_security_common_api_test: $(TRANSPORT_SECURITY_COMMON_API_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(TRANSPORT_SECURITY_COMMON_API_TEST_OBJS:.o=.dep) endif endif TRANSPORT_SECURITY_TEST_SRC = \ test/core/tsi/transport_security_test.cc \ TRANSPORT_SECURITY_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(TRANSPORT_SECURITY_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/transport_security_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/transport_security_test: $(TRANSPORT_SECURITY_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(TRANSPORT_SECURITY_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/transport_security_test endif $(OBJDIR)/$(CONFIG)/test/core/tsi/transport_security_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_transport_security_test: $(TRANSPORT_SECURITY_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(TRANSPORT_SECURITY_TEST_OBJS:.o=.dep) endif endif UDP_SERVER_TEST_SRC = \ test/core/iomgr/udp_server_test.cc \ UDP_SERVER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(UDP_SERVER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/udp_server_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/udp_server_test: $(UDP_SERVER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(UDP_SERVER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/udp_server_test endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/udp_server_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_udp_server_test: $(UDP_SERVER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(UDP_SERVER_TEST_OBJS:.o=.dep) endif endif URI_PARSER_TEST_SRC = \ test/core/client_channel/uri_parser_test.cc \ URI_PARSER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(URI_PARSER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/uri_parser_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/uri_parser_test: $(URI_PARSER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(URI_PARSER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/uri_parser_test endif $(OBJDIR)/$(CONFIG)/test/core/client_channel/uri_parser_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_uri_parser_test: $(URI_PARSER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(URI_PARSER_TEST_OBJS:.o=.dep) endif endif USEFUL_TEST_SRC = \ test/core/gpr/useful_test.cc \ USEFUL_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(USEFUL_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/useful_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/useful_test: $(USEFUL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(USEFUL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/useful_test endif $(OBJDIR)/$(CONFIG)/test/core/gpr/useful_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_useful_test: $(USEFUL_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(USEFUL_TEST_OBJS:.o=.dep) endif endif VARINT_TEST_SRC = \ test/core/transport/chttp2/varint_test.cc \ VARINT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(VARINT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/varint_test: openssl_dep_error else $(BINDIR)/$(CONFIG)/varint_test: $(VARINT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(VARINT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/varint_test endif $(OBJDIR)/$(CONFIG)/test/core/transport/chttp2/varint_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_varint_test: $(VARINT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(VARINT_TEST_OBJS:.o=.dep) endif endif ADDRESS_SORTING_TEST_SRC = \ test/cpp/naming/address_sorting_test.cc \ ADDRESS_SORTING_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ADDRESS_SORTING_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/address_sorting_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/address_sorting_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/address_sorting_test: $(PROTOBUF_DEP) $(ADDRESS_SORTING_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ADDRESS_SORTING_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/address_sorting_test endif endif $(OBJDIR)/$(CONFIG)/test/cpp/naming/address_sorting_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_address_sorting_test: $(ADDRESS_SORTING_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ADDRESS_SORTING_TEST_OBJS:.o=.dep) endif endif ADDRESS_SORTING_TEST_UNSECURE_SRC = \ test/cpp/naming/address_sorting_test.cc \ test/cpp/util/byte_buffer_proto_helper.cc \ test/cpp/util/string_ref_helper.cc \ test/cpp/util/subprocess.cc \ ADDRESS_SORTING_TEST_UNSECURE_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ADDRESS_SORTING_TEST_UNSECURE_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/address_sorting_test_unsecure: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/address_sorting_test_unsecure: protobuf_dep_error else $(BINDIR)/$(CONFIG)/address_sorting_test_unsecure: $(PROTOBUF_DEP) $(ADDRESS_SORTING_TEST_UNSECURE_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ADDRESS_SORTING_TEST_UNSECURE_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/address_sorting_test_unsecure endif endif $(OBJDIR)/$(CONFIG)/test/cpp/naming/address_sorting_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/byte_buffer_proto_helper.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/string_ref_helper.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/subprocess.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_address_sorting_test_unsecure: $(ADDRESS_SORTING_TEST_UNSECURE_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ADDRESS_SORTING_TEST_UNSECURE_OBJS:.o=.dep) endif endif ALARM_TEST_SRC = \ test/cpp/common/alarm_test.cc \ ALARM_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ALARM_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/alarm_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/alarm_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/alarm_test: $(PROTOBUF_DEP) $(ALARM_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ALARM_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/alarm_test endif endif $(OBJDIR)/$(CONFIG)/test/cpp/common/alarm_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_alarm_test: $(ALARM_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ALARM_TEST_OBJS:.o=.dep) endif endif ALTS_CONCURRENT_CONNECTIVITY_TEST_SRC = \ $(GENDIR)/test/core/tsi/alts/fake_handshaker/handshaker.pb.cc $(GENDIR)/test/core/tsi/alts/fake_handshaker/handshaker.grpc.pb.cc \ $(GENDIR)/test/core/tsi/alts/fake_handshaker/transport_security_common.pb.cc $(GENDIR)/test/core/tsi/alts/fake_handshaker/transport_security_common.grpc.pb.cc \ test/core/end2end/cq_verifier.cc \ test/core/tsi/alts/fake_handshaker/fake_handshaker_server.cc \ test/core/tsi/alts/handshaker/alts_concurrent_connectivity_test.cc \ ALTS_CONCURRENT_CONNECTIVITY_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ALTS_CONCURRENT_CONNECTIVITY_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/alts_concurrent_connectivity_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/alts_concurrent_connectivity_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/alts_concurrent_connectivity_test: $(PROTOBUF_DEP) $(ALTS_CONCURRENT_CONNECTIVITY_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ALTS_CONCURRENT_CONNECTIVITY_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/alts_concurrent_connectivity_test endif endif $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/fake_handshaker/handshaker.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/fake_handshaker/transport_security_common.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/fake_handshaker/fake_handshaker_server.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/handshaker/alts_concurrent_connectivity_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_alts_concurrent_connectivity_test: $(ALTS_CONCURRENT_CONNECTIVITY_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ALTS_CONCURRENT_CONNECTIVITY_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(GENDIR)/test/core/tsi/alts/fake_handshaker/handshaker.pb.cc $(GENDIR)/test/core/tsi/alts/fake_handshaker/handshaker.grpc.pb.cc $(GENDIR)/test/core/tsi/alts/fake_handshaker/transport_security_common.pb.cc $(GENDIR)/test/core/tsi/alts/fake_handshaker/transport_security_common.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/fake_handshaker/fake_handshaker_server.o: $(GENDIR)/test/core/tsi/alts/fake_handshaker/handshaker.pb.cc $(GENDIR)/test/core/tsi/alts/fake_handshaker/handshaker.grpc.pb.cc $(GENDIR)/test/core/tsi/alts/fake_handshaker/transport_security_common.pb.cc $(GENDIR)/test/core/tsi/alts/fake_handshaker/transport_security_common.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/core/tsi/alts/handshaker/alts_concurrent_connectivity_test.o: $(GENDIR)/test/core/tsi/alts/fake_handshaker/handshaker.pb.cc $(GENDIR)/test/core/tsi/alts/fake_handshaker/handshaker.grpc.pb.cc $(GENDIR)/test/core/tsi/alts/fake_handshaker/transport_security_common.pb.cc $(GENDIR)/test/core/tsi/alts/fake_handshaker/transport_security_common.grpc.pb.cc ALTS_CREDENTIALS_FUZZER_SRC = \ test/core/security/alts_credentials_fuzzer.cc \ test/core/util/fuzzer_corpus_test.cc \ ALTS_CREDENTIALS_FUZZER_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ALTS_CREDENTIALS_FUZZER_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/alts_credentials_fuzzer: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/alts_credentials_fuzzer: protobuf_dep_error else $(BINDIR)/$(CONFIG)/alts_credentials_fuzzer: $(PROTOBUF_DEP) $(ALTS_CREDENTIALS_FUZZER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ALTS_CREDENTIALS_FUZZER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -lFuzzer -o $(BINDIR)/$(CONFIG)/alts_credentials_fuzzer endif endif $(OBJDIR)/$(CONFIG)/test/core/security/alts_credentials_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/fuzzer_corpus_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_alts_credentials_fuzzer: $(ALTS_CREDENTIALS_FUZZER_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ALTS_CREDENTIALS_FUZZER_OBJS:.o=.dep) endif endif ALTS_UTIL_TEST_SRC = \ test/cpp/common/alts_util_test.cc \ ALTS_UTIL_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ALTS_UTIL_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/alts_util_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/alts_util_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/alts_util_test: $(PROTOBUF_DEP) $(ALTS_UTIL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_alts.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ALTS_UTIL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_alts.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/alts_util_test endif endif $(OBJDIR)/$(CONFIG)/test/cpp/common/alts_util_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_alts.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_alts_util_test: $(ALTS_UTIL_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ALTS_UTIL_TEST_OBJS:.o=.dep) endif endif ASYNC_END2END_TEST_SRC = \ $(GENDIR)/src/proto/grpc/health/v1/health.pb.cc $(GENDIR)/src/proto/grpc/health/v1/health.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/async_end2end_test.cc \ ASYNC_END2END_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ASYNC_END2END_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/async_end2end_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/async_end2end_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/async_end2end_test: $(PROTOBUF_DEP) $(ASYNC_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ASYNC_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/async_end2end_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/health/v1/health.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/duplicate/echo_duplicate.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/async_end2end_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_async_end2end_test: $(ASYNC_END2END_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ASYNC_END2END_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/async_end2end_test.o: $(GENDIR)/src/proto/grpc/health/v1/health.pb.cc $(GENDIR)/src/proto/grpc/health/v1/health.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc AUTH_PROPERTY_ITERATOR_TEST_SRC = \ test/cpp/common/auth_property_iterator_test.cc \ AUTH_PROPERTY_ITERATOR_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(AUTH_PROPERTY_ITERATOR_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/auth_property_iterator_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/auth_property_iterator_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/auth_property_iterator_test: $(PROTOBUF_DEP) $(AUTH_PROPERTY_ITERATOR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(AUTH_PROPERTY_ITERATOR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/auth_property_iterator_test endif endif $(OBJDIR)/$(CONFIG)/test/cpp/common/auth_property_iterator_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_auth_property_iterator_test: $(AUTH_PROPERTY_ITERATOR_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(AUTH_PROPERTY_ITERATOR_TEST_OBJS:.o=.dep) endif endif BACKOFF_TEST_SRC = \ test/core/backoff/backoff_test.cc \ BACKOFF_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BACKOFF_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/backoff_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/backoff_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/backoff_test: $(PROTOBUF_DEP) $(BACKOFF_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BACKOFF_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/backoff_test endif endif $(OBJDIR)/$(CONFIG)/test/core/backoff/backoff_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_backoff_test: $(BACKOFF_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BACKOFF_TEST_OBJS:.o=.dep) endif endif BAD_STREAMING_ID_BAD_CLIENT_TEST_SRC = \ test/core/bad_client/bad_client.cc \ test/core/bad_client/tests/bad_streaming_id.cc \ test/core/end2end/cq_verifier.cc \ BAD_STREAMING_ID_BAD_CLIENT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BAD_STREAMING_ID_BAD_CLIENT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bad_streaming_id_bad_client_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/bad_streaming_id_bad_client_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/bad_streaming_id_bad_client_test: $(PROTOBUF_DEP) $(BAD_STREAMING_ID_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BAD_STREAMING_ID_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bad_streaming_id_bad_client_test endif endif $(OBJDIR)/$(CONFIG)/test/core/bad_client/bad_client.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/bad_client/tests/bad_streaming_id.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_bad_streaming_id_bad_client_test: $(BAD_STREAMING_ID_BAD_CLIENT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BAD_STREAMING_ID_BAD_CLIENT_TEST_OBJS:.o=.dep) endif endif BADREQ_BAD_CLIENT_TEST_SRC = \ test/core/bad_client/bad_client.cc \ test/core/bad_client/tests/badreq.cc \ test/core/end2end/cq_verifier.cc \ BADREQ_BAD_CLIENT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BADREQ_BAD_CLIENT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/badreq_bad_client_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/badreq_bad_client_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/badreq_bad_client_test: $(PROTOBUF_DEP) $(BADREQ_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BADREQ_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/badreq_bad_client_test endif endif $(OBJDIR)/$(CONFIG)/test/core/bad_client/bad_client.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/bad_client/tests/badreq.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_badreq_bad_client_test: $(BADREQ_BAD_CLIENT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BADREQ_BAD_CLIENT_TEST_OBJS:.o=.dep) endif endif BDP_ESTIMATOR_TEST_SRC = \ test/core/transport/bdp_estimator_test.cc \ BDP_ESTIMATOR_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BDP_ESTIMATOR_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bdp_estimator_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/bdp_estimator_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/bdp_estimator_test: $(PROTOBUF_DEP) $(BDP_ESTIMATOR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BDP_ESTIMATOR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bdp_estimator_test endif endif $(OBJDIR)/$(CONFIG)/test/core/transport/bdp_estimator_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_bdp_estimator_test: $(BDP_ESTIMATOR_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BDP_ESTIMATOR_TEST_OBJS:.o=.dep) endif endif BM_ALARM_SRC = \ test/cpp/microbenchmarks/bm_alarm.cc \ BM_ALARM_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_ALARM_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bm_alarm: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/bm_alarm: protobuf_dep_error else $(BINDIR)/$(CONFIG)/bm_alarm: $(PROTOBUF_DEP) $(BM_ALARM_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BM_ALARM_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_alarm endif endif $(BM_ALARM_OBJS): CPPFLAGS += -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_alarm.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a deps_bm_alarm: $(BM_ALARM_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BM_ALARM_OBJS:.o=.dep) endif endif BM_ARENA_SRC = \ test/cpp/microbenchmarks/bm_arena.cc \ BM_ARENA_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_ARENA_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bm_arena: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/bm_arena: protobuf_dep_error else $(BINDIR)/$(CONFIG)/bm_arena: $(PROTOBUF_DEP) $(BM_ARENA_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BM_ARENA_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_arena endif endif $(BM_ARENA_OBJS): CPPFLAGS += -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_arena.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a deps_bm_arena: $(BM_ARENA_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BM_ARENA_OBJS:.o=.dep) endif endif BM_BYTE_BUFFER_SRC = \ test/cpp/microbenchmarks/bm_byte_buffer.cc \ BM_BYTE_BUFFER_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_BYTE_BUFFER_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bm_byte_buffer: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/bm_byte_buffer: protobuf_dep_error else $(BINDIR)/$(CONFIG)/bm_byte_buffer: $(PROTOBUF_DEP) $(BM_BYTE_BUFFER_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BM_BYTE_BUFFER_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_byte_buffer endif endif $(BM_BYTE_BUFFER_OBJS): CPPFLAGS += -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_byte_buffer.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a deps_bm_byte_buffer: $(BM_BYTE_BUFFER_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BM_BYTE_BUFFER_OBJS:.o=.dep) endif endif BM_CALL_CREATE_SRC = \ test/cpp/microbenchmarks/bm_call_create.cc \ BM_CALL_CREATE_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_CALL_CREATE_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bm_call_create: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/bm_call_create: protobuf_dep_error else $(BINDIR)/$(CONFIG)/bm_call_create: $(PROTOBUF_DEP) $(BM_CALL_CREATE_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BM_CALL_CREATE_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_call_create endif endif $(BM_CALL_CREATE_OBJS): CPPFLAGS += -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_call_create.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a deps_bm_call_create: $(BM_CALL_CREATE_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BM_CALL_CREATE_OBJS:.o=.dep) endif endif BM_CALLBACK_STREAMING_PING_PONG_SRC = \ test/cpp/microbenchmarks/bm_callback_streaming_ping_pong.cc \ test/cpp/microbenchmarks/callback_test_service.cc \ test/cpp/util/byte_buffer_proto_helper.cc \ test/cpp/util/string_ref_helper.cc \ test/cpp/util/subprocess.cc \ BM_CALLBACK_STREAMING_PING_PONG_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_CALLBACK_STREAMING_PING_PONG_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bm_callback_streaming_ping_pong: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/bm_callback_streaming_ping_pong: protobuf_dep_error else $(BINDIR)/$(CONFIG)/bm_callback_streaming_ping_pong: $(PROTOBUF_DEP) $(BM_CALLBACK_STREAMING_PING_PONG_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BM_CALLBACK_STREAMING_PING_PONG_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_callback_streaming_ping_pong endif endif $(BM_CALLBACK_STREAMING_PING_PONG_OBJS): CPPFLAGS += -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_callback_streaming_ping_pong.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/callback_test_service.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(OBJDIR)/$(CONFIG)/test/cpp/util/byte_buffer_proto_helper.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(OBJDIR)/$(CONFIG)/test/cpp/util/string_ref_helper.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(OBJDIR)/$(CONFIG)/test/cpp/util/subprocess.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a deps_bm_callback_streaming_ping_pong: $(BM_CALLBACK_STREAMING_PING_PONG_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BM_CALLBACK_STREAMING_PING_PONG_OBJS:.o=.dep) endif endif BM_CALLBACK_UNARY_PING_PONG_SRC = \ test/cpp/microbenchmarks/bm_callback_unary_ping_pong.cc \ test/cpp/microbenchmarks/callback_test_service.cc \ test/cpp/util/byte_buffer_proto_helper.cc \ test/cpp/util/string_ref_helper.cc \ test/cpp/util/subprocess.cc \ BM_CALLBACK_UNARY_PING_PONG_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_CALLBACK_UNARY_PING_PONG_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bm_callback_unary_ping_pong: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/bm_callback_unary_ping_pong: protobuf_dep_error else $(BINDIR)/$(CONFIG)/bm_callback_unary_ping_pong: $(PROTOBUF_DEP) $(BM_CALLBACK_UNARY_PING_PONG_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BM_CALLBACK_UNARY_PING_PONG_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_callback_unary_ping_pong endif endif $(BM_CALLBACK_UNARY_PING_PONG_OBJS): CPPFLAGS += -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_callback_unary_ping_pong.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/callback_test_service.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(OBJDIR)/$(CONFIG)/test/cpp/util/byte_buffer_proto_helper.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(OBJDIR)/$(CONFIG)/test/cpp/util/string_ref_helper.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(OBJDIR)/$(CONFIG)/test/cpp/util/subprocess.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a deps_bm_callback_unary_ping_pong: $(BM_CALLBACK_UNARY_PING_PONG_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BM_CALLBACK_UNARY_PING_PONG_OBJS:.o=.dep) endif endif BM_CHANNEL_SRC = \ test/cpp/microbenchmarks/bm_channel.cc \ BM_CHANNEL_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_CHANNEL_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bm_channel: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/bm_channel: protobuf_dep_error else $(BINDIR)/$(CONFIG)/bm_channel: $(PROTOBUF_DEP) $(BM_CHANNEL_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BM_CHANNEL_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_channel endif endif $(BM_CHANNEL_OBJS): CPPFLAGS += -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_channel.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a deps_bm_channel: $(BM_CHANNEL_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BM_CHANNEL_OBJS:.o=.dep) endif endif BM_CHTTP2_HPACK_SRC = \ test/cpp/microbenchmarks/bm_chttp2_hpack.cc \ BM_CHTTP2_HPACK_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_CHTTP2_HPACK_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bm_chttp2_hpack: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/bm_chttp2_hpack: protobuf_dep_error else $(BINDIR)/$(CONFIG)/bm_chttp2_hpack: $(PROTOBUF_DEP) $(BM_CHTTP2_HPACK_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BM_CHTTP2_HPACK_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_chttp2_hpack endif endif $(BM_CHTTP2_HPACK_OBJS): CPPFLAGS += -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_chttp2_hpack.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a deps_bm_chttp2_hpack: $(BM_CHTTP2_HPACK_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BM_CHTTP2_HPACK_OBJS:.o=.dep) endif endif BM_CHTTP2_TRANSPORT_SRC = \ test/cpp/microbenchmarks/bm_chttp2_transport.cc \ BM_CHTTP2_TRANSPORT_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_CHTTP2_TRANSPORT_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bm_chttp2_transport: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/bm_chttp2_transport: protobuf_dep_error else $(BINDIR)/$(CONFIG)/bm_chttp2_transport: $(PROTOBUF_DEP) $(BM_CHTTP2_TRANSPORT_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BM_CHTTP2_TRANSPORT_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_chttp2_transport endif endif $(BM_CHTTP2_TRANSPORT_OBJS): CPPFLAGS += -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_chttp2_transport.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a deps_bm_chttp2_transport: $(BM_CHTTP2_TRANSPORT_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BM_CHTTP2_TRANSPORT_OBJS:.o=.dep) endif endif BM_CLOSURE_SRC = \ test/cpp/microbenchmarks/bm_closure.cc \ BM_CLOSURE_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_CLOSURE_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bm_closure: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/bm_closure: protobuf_dep_error else $(BINDIR)/$(CONFIG)/bm_closure: $(PROTOBUF_DEP) $(BM_CLOSURE_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BM_CLOSURE_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_closure endif endif $(BM_CLOSURE_OBJS): CPPFLAGS += -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_closure.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a deps_bm_closure: $(BM_CLOSURE_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BM_CLOSURE_OBJS:.o=.dep) endif endif BM_CQ_SRC = \ test/cpp/microbenchmarks/bm_cq.cc \ BM_CQ_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_CQ_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bm_cq: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/bm_cq: protobuf_dep_error else $(BINDIR)/$(CONFIG)/bm_cq: $(PROTOBUF_DEP) $(BM_CQ_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BM_CQ_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_cq endif endif $(BM_CQ_OBJS): CPPFLAGS += -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_cq.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a deps_bm_cq: $(BM_CQ_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BM_CQ_OBJS:.o=.dep) endif endif BM_CQ_MULTIPLE_THREADS_SRC = \ test/cpp/microbenchmarks/bm_cq_multiple_threads.cc \ BM_CQ_MULTIPLE_THREADS_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_CQ_MULTIPLE_THREADS_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bm_cq_multiple_threads: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/bm_cq_multiple_threads: protobuf_dep_error else $(BINDIR)/$(CONFIG)/bm_cq_multiple_threads: $(PROTOBUF_DEP) $(BM_CQ_MULTIPLE_THREADS_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BM_CQ_MULTIPLE_THREADS_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_cq_multiple_threads endif endif $(BM_CQ_MULTIPLE_THREADS_OBJS): CPPFLAGS += -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_cq_multiple_threads.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a deps_bm_cq_multiple_threads: $(BM_CQ_MULTIPLE_THREADS_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BM_CQ_MULTIPLE_THREADS_OBJS:.o=.dep) endif endif BM_ERROR_SRC = \ test/cpp/microbenchmarks/bm_error.cc \ BM_ERROR_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_ERROR_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bm_error: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/bm_error: protobuf_dep_error else $(BINDIR)/$(CONFIG)/bm_error: $(PROTOBUF_DEP) $(BM_ERROR_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BM_ERROR_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_error endif endif $(BM_ERROR_OBJS): CPPFLAGS += -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_error.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a deps_bm_error: $(BM_ERROR_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BM_ERROR_OBJS:.o=.dep) endif endif BM_FULLSTACK_STREAMING_PING_PONG_SRC = \ test/cpp/microbenchmarks/bm_fullstack_streaming_ping_pong.cc \ BM_FULLSTACK_STREAMING_PING_PONG_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_FULLSTACK_STREAMING_PING_PONG_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_ping_pong: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_ping_pong: protobuf_dep_error else $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_ping_pong: $(PROTOBUF_DEP) $(BM_FULLSTACK_STREAMING_PING_PONG_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BM_FULLSTACK_STREAMING_PING_PONG_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_ping_pong endif endif $(BM_FULLSTACK_STREAMING_PING_PONG_OBJS): CPPFLAGS += -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_fullstack_streaming_ping_pong.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a deps_bm_fullstack_streaming_ping_pong: $(BM_FULLSTACK_STREAMING_PING_PONG_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BM_FULLSTACK_STREAMING_PING_PONG_OBJS:.o=.dep) endif endif BM_FULLSTACK_STREAMING_PUMP_SRC = \ test/cpp/microbenchmarks/bm_fullstack_streaming_pump.cc \ BM_FULLSTACK_STREAMING_PUMP_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_FULLSTACK_STREAMING_PUMP_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_pump: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_pump: protobuf_dep_error else $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_pump: $(PROTOBUF_DEP) $(BM_FULLSTACK_STREAMING_PUMP_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BM_FULLSTACK_STREAMING_PUMP_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_pump endif endif $(BM_FULLSTACK_STREAMING_PUMP_OBJS): CPPFLAGS += -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_fullstack_streaming_pump.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a deps_bm_fullstack_streaming_pump: $(BM_FULLSTACK_STREAMING_PUMP_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BM_FULLSTACK_STREAMING_PUMP_OBJS:.o=.dep) endif endif BM_FULLSTACK_TRICKLE_SRC = \ test/cpp/microbenchmarks/bm_fullstack_trickle.cc \ BM_FULLSTACK_TRICKLE_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_FULLSTACK_TRICKLE_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bm_fullstack_trickle: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/bm_fullstack_trickle: protobuf_dep_error else $(BINDIR)/$(CONFIG)/bm_fullstack_trickle: $(PROTOBUF_DEP) $(BM_FULLSTACK_TRICKLE_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BM_FULLSTACK_TRICKLE_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_fullstack_trickle endif endif $(BM_FULLSTACK_TRICKLE_OBJS): CPPFLAGS += -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_fullstack_trickle.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a deps_bm_fullstack_trickle: $(BM_FULLSTACK_TRICKLE_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BM_FULLSTACK_TRICKLE_OBJS:.o=.dep) endif endif BM_FULLSTACK_UNARY_PING_PONG_SRC = \ test/cpp/microbenchmarks/bm_fullstack_unary_ping_pong.cc \ BM_FULLSTACK_UNARY_PING_PONG_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_FULLSTACK_UNARY_PING_PONG_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bm_fullstack_unary_ping_pong: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/bm_fullstack_unary_ping_pong: protobuf_dep_error else $(BINDIR)/$(CONFIG)/bm_fullstack_unary_ping_pong: $(PROTOBUF_DEP) $(BM_FULLSTACK_UNARY_PING_PONG_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BM_FULLSTACK_UNARY_PING_PONG_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_fullstack_unary_ping_pong endif endif $(BM_FULLSTACK_UNARY_PING_PONG_OBJS): CPPFLAGS += -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_fullstack_unary_ping_pong.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a deps_bm_fullstack_unary_ping_pong: $(BM_FULLSTACK_UNARY_PING_PONG_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BM_FULLSTACK_UNARY_PING_PONG_OBJS:.o=.dep) endif endif BM_METADATA_SRC = \ test/cpp/microbenchmarks/bm_metadata.cc \ BM_METADATA_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_METADATA_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bm_metadata: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/bm_metadata: protobuf_dep_error else $(BINDIR)/$(CONFIG)/bm_metadata: $(PROTOBUF_DEP) $(BM_METADATA_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BM_METADATA_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_metadata endif endif $(BM_METADATA_OBJS): CPPFLAGS += -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_metadata.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a deps_bm_metadata: $(BM_METADATA_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BM_METADATA_OBJS:.o=.dep) endif endif BM_POLLSET_SRC = \ test/cpp/microbenchmarks/bm_pollset.cc \ BM_POLLSET_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_POLLSET_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bm_pollset: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/bm_pollset: protobuf_dep_error else $(BINDIR)/$(CONFIG)/bm_pollset: $(PROTOBUF_DEP) $(BM_POLLSET_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BM_POLLSET_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_pollset endif endif $(BM_POLLSET_OBJS): CPPFLAGS += -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_pollset.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a deps_bm_pollset: $(BM_POLLSET_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BM_POLLSET_OBJS:.o=.dep) endif endif BM_THREADPOOL_SRC = \ test/cpp/microbenchmarks/bm_threadpool.cc \ BM_THREADPOOL_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_THREADPOOL_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bm_threadpool: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/bm_threadpool: protobuf_dep_error else $(BINDIR)/$(CONFIG)/bm_threadpool: $(PROTOBUF_DEP) $(BM_THREADPOOL_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BM_THREADPOOL_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_threadpool endif endif $(BM_THREADPOOL_OBJS): CPPFLAGS += -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_threadpool.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a deps_bm_threadpool: $(BM_THREADPOOL_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BM_THREADPOOL_OBJS:.o=.dep) endif endif BM_TIMER_SRC = \ test/cpp/microbenchmarks/bm_timer.cc \ BM_TIMER_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_TIMER_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/bm_timer: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/bm_timer: protobuf_dep_error else $(BINDIR)/$(CONFIG)/bm_timer: $(PROTOBUF_DEP) $(BM_TIMER_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BM_TIMER_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_timer endif endif $(BM_TIMER_OBJS): CPPFLAGS += -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_timer.o: $(LIBDIR)/$(CONFIG)/libbenchmark_helpers.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a deps_bm_timer: $(BM_TIMER_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BM_TIMER_OBJS:.o=.dep) endif endif BYTE_BUFFER_TEST_SRC = \ test/cpp/util/byte_buffer_test.cc \ BYTE_BUFFER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BYTE_BUFFER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/byte_buffer_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/byte_buffer_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/byte_buffer_test: $(PROTOBUF_DEP) $(BYTE_BUFFER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BYTE_BUFFER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/byte_buffer_test endif endif $(OBJDIR)/$(CONFIG)/test/cpp/util/byte_buffer_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_byte_buffer_test: $(BYTE_BUFFER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BYTE_BUFFER_TEST_OBJS:.o=.dep) endif endif BYTE_STREAM_TEST_SRC = \ test/core/transport/byte_stream_test.cc \ BYTE_STREAM_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BYTE_STREAM_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/byte_stream_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/byte_stream_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/byte_stream_test: $(PROTOBUF_DEP) $(BYTE_STREAM_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BYTE_STREAM_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/byte_stream_test endif endif $(OBJDIR)/$(CONFIG)/test/core/transport/byte_stream_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_byte_stream_test: $(BYTE_STREAM_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(BYTE_STREAM_TEST_OBJS:.o=.dep) endif endif CANCEL_ARES_QUERY_TEST_SRC = \ test/core/end2end/cq_verifier.cc \ test/cpp/naming/cancel_ares_query_test.cc \ test/cpp/naming/dns_test_util.cc \ CANCEL_ARES_QUERY_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CANCEL_ARES_QUERY_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/cancel_ares_query_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/cancel_ares_query_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/cancel_ares_query_test: $(PROTOBUF_DEP) $(CANCEL_ARES_QUERY_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CANCEL_ARES_QUERY_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/cancel_ares_query_test endif endif $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/naming/cancel_ares_query_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/naming/dns_test_util.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_cancel_ares_query_test: $(CANCEL_ARES_QUERY_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CANCEL_ARES_QUERY_TEST_OBJS:.o=.dep) endif endif CFSTREAM_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/cfstream_test.cc \ test/cpp/end2end/test_service_impl.cc \ CFSTREAM_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CFSTREAM_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/cfstream_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/cfstream_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/cfstream_test: $(PROTOBUF_DEP) $(CFSTREAM_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CFSTREAM_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/cfstream_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/cfstream_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_cfstream_test: $(CFSTREAM_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CFSTREAM_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/cfstream_test.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc CHANNEL_ARGUMENTS_TEST_SRC = \ test/cpp/common/channel_arguments_test.cc \ CHANNEL_ARGUMENTS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CHANNEL_ARGUMENTS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/channel_arguments_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/channel_arguments_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/channel_arguments_test: $(PROTOBUF_DEP) $(CHANNEL_ARGUMENTS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CHANNEL_ARGUMENTS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/channel_arguments_test endif endif $(OBJDIR)/$(CONFIG)/test/cpp/common/channel_arguments_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_channel_arguments_test: $(CHANNEL_ARGUMENTS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CHANNEL_ARGUMENTS_TEST_OBJS:.o=.dep) endif endif CHANNEL_FILTER_TEST_SRC = \ test/cpp/common/channel_filter_test.cc \ CHANNEL_FILTER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CHANNEL_FILTER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/channel_filter_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/channel_filter_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/channel_filter_test: $(PROTOBUF_DEP) $(CHANNEL_FILTER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CHANNEL_FILTER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/channel_filter_test endif endif $(OBJDIR)/$(CONFIG)/test/cpp/common/channel_filter_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_channel_filter_test: $(CHANNEL_FILTER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CHANNEL_FILTER_TEST_OBJS:.o=.dep) endif endif CHANNEL_TRACE_TEST_SRC = \ $(GENDIR)/src/proto/grpc/channelz/channelz.pb.cc $(GENDIR)/src/proto/grpc/channelz/channelz.grpc.pb.cc \ test/core/channel/channel_trace_test.cc \ test/cpp/util/channel_trace_proto_helper.cc \ CHANNEL_TRACE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CHANNEL_TRACE_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/channel_trace_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/channel_trace_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/channel_trace_test: $(PROTOBUF_DEP) $(CHANNEL_TRACE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CHANNEL_TRACE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/channel_trace_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/channelz/channelz.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/channel/channel_trace_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/channel_trace_proto_helper.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_channel_trace_test: $(CHANNEL_TRACE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CHANNEL_TRACE_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/core/channel/channel_trace_test.o: $(GENDIR)/src/proto/grpc/channelz/channelz.pb.cc $(GENDIR)/src/proto/grpc/channelz/channelz.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/channel_trace_proto_helper.o: $(GENDIR)/src/proto/grpc/channelz/channelz.pb.cc $(GENDIR)/src/proto/grpc/channelz/channelz.grpc.pb.cc CHANNELZ_REGISTRY_TEST_SRC = \ test/core/channel/channelz_registry_test.cc \ CHANNELZ_REGISTRY_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CHANNELZ_REGISTRY_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/channelz_registry_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/channelz_registry_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/channelz_registry_test: $(PROTOBUF_DEP) $(CHANNELZ_REGISTRY_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CHANNELZ_REGISTRY_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/channelz_registry_test endif endif $(OBJDIR)/$(CONFIG)/test/core/channel/channelz_registry_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_channelz_registry_test: $(CHANNELZ_REGISTRY_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CHANNELZ_REGISTRY_TEST_OBJS:.o=.dep) endif endif CHANNELZ_SERVICE_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/channelz_service_test.cc \ test/cpp/end2end/test_service_impl.cc \ CHANNELZ_SERVICE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CHANNELZ_SERVICE_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/channelz_service_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/channelz_service_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/channelz_service_test: $(PROTOBUF_DEP) $(CHANNELZ_SERVICE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpcpp_channelz.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CHANNELZ_SERVICE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpcpp_channelz.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/channelz_service_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpcpp_channelz.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpcpp_channelz.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpcpp_channelz.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/channelz_service_test.o: $(LIBDIR)/$(CONFIG)/libgrpcpp_channelz.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(LIBDIR)/$(CONFIG)/libgrpcpp_channelz.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_channelz_service_test: $(CHANNELZ_SERVICE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CHANNELZ_SERVICE_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/channelz_service_test.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc CHANNELZ_TEST_SRC = \ $(GENDIR)/src/proto/grpc/channelz/channelz.pb.cc $(GENDIR)/src/proto/grpc/channelz/channelz.grpc.pb.cc \ test/core/channel/channelz_test.cc \ test/cpp/util/channel_trace_proto_helper.cc \ CHANNELZ_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CHANNELZ_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/channelz_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/channelz_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/channelz_test: $(PROTOBUF_DEP) $(CHANNELZ_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CHANNELZ_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/channelz_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/channelz/channelz.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/channel/channelz_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/channel_trace_proto_helper.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_channelz_test: $(CHANNELZ_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CHANNELZ_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/core/channel/channelz_test.o: $(GENDIR)/src/proto/grpc/channelz/channelz.pb.cc $(GENDIR)/src/proto/grpc/channelz/channelz.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/channel_trace_proto_helper.o: $(GENDIR)/src/proto/grpc/channelz/channelz.pb.cc $(GENDIR)/src/proto/grpc/channelz/channelz.grpc.pb.cc CLI_CALL_TEST_SRC = \ $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/util/cli_call.cc \ test/cpp/util/cli_call_test.cc \ test/cpp/util/cli_credentials.cc \ test/cpp/util/grpc_tool.cc \ test/cpp/util/proto_file_parser.cc \ test/cpp/util/proto_reflection_descriptor_database.cc \ test/cpp/util/service_describer.cc \ CLI_CALL_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CLI_CALL_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/cli_call_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/cli_call_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/cli_call_test: $(PROTOBUF_DEP) $(CLI_CALL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CLI_CALL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/cli_call_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/reflection/v1alpha/reflection.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/cli_call.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/cli_call_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/cli_credentials.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/grpc_tool.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/proto_file_parser.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/proto_reflection_descriptor_database.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/service_describer.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_cli_call_test: $(CLI_CALL_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CLI_CALL_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/util/cli_call.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/cli_call_test.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/cli_credentials.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/grpc_tool.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/proto_file_parser.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/proto_reflection_descriptor_database.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/service_describer.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc CLIENT_CALLBACK_END2END_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/client_callback_end2end_test.cc \ test/cpp/end2end/interceptors_util.cc \ test/cpp/end2end/test_service_impl.cc \ CLIENT_CALLBACK_END2END_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CLIENT_CALLBACK_END2END_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/client_callback_end2end_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/client_callback_end2end_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/client_callback_end2end_test: $(PROTOBUF_DEP) $(CLIENT_CALLBACK_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CLIENT_CALLBACK_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/client_callback_end2end_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/client_callback_end2end_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/interceptors_util.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_client_callback_end2end_test: $(CLIENT_CALLBACK_END2END_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CLIENT_CALLBACK_END2END_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/client_callback_end2end_test.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/interceptors_util.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc CLIENT_CHANNEL_STRESS_TEST_SRC = \ $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.pb.cc $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/client/client_channel_stress_test.cc \ test/cpp/end2end/test_service_impl.cc \ CLIENT_CHANNEL_STRESS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CLIENT_CHANNEL_STRESS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/client_channel_stress_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/client_channel_stress_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/client_channel_stress_test: $(PROTOBUF_DEP) $(CLIENT_CHANNEL_STRESS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CLIENT_CHANNEL_STRESS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/client_channel_stress_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/lb/v1/load_balancer.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/duplicate/echo_duplicate.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/client/client_channel_stress_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_client_channel_stress_test: $(CLIENT_CHANNEL_STRESS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CLIENT_CHANNEL_STRESS_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/client/client_channel_stress_test.o: $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.pb.cc $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.pb.cc $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc CLIENT_FUZZER_SRC = \ test/core/end2end/fuzzers/client_fuzzer.cc \ test/core/util/fuzzer_corpus_test.cc \ CLIENT_FUZZER_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CLIENT_FUZZER_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/client_fuzzer: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/client_fuzzer: protobuf_dep_error else $(BINDIR)/$(CONFIG)/client_fuzzer: $(PROTOBUF_DEP) $(CLIENT_FUZZER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CLIENT_FUZZER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -lFuzzer -o $(BINDIR)/$(CONFIG)/client_fuzzer endif endif $(OBJDIR)/$(CONFIG)/test/core/end2end/fuzzers/client_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/fuzzer_corpus_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_client_fuzzer: $(CLIENT_FUZZER_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CLIENT_FUZZER_OBJS:.o=.dep) endif endif CLIENT_INTERCEPTORS_END2END_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/client_interceptors_end2end_test.cc \ test/cpp/end2end/interceptors_util.cc \ test/cpp/end2end/test_service_impl.cc \ CLIENT_INTERCEPTORS_END2END_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CLIENT_INTERCEPTORS_END2END_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/client_interceptors_end2end_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/client_interceptors_end2end_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/client_interceptors_end2end_test: $(PROTOBUF_DEP) $(CLIENT_INTERCEPTORS_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CLIENT_INTERCEPTORS_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/client_interceptors_end2end_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/client_interceptors_end2end_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/interceptors_util.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_client_interceptors_end2end_test: $(CLIENT_INTERCEPTORS_END2END_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CLIENT_INTERCEPTORS_END2END_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/client_interceptors_end2end_test.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/interceptors_util.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc CLIENT_LB_END2END_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/xds/orca_load_report_for_test.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/orca_load_report_for_test.grpc.pb.cc \ test/core/util/test_lb_policies.cc \ test/cpp/end2end/client_lb_end2end_test.cc \ test/cpp/end2end/test_service_impl.cc \ CLIENT_LB_END2END_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CLIENT_LB_END2END_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/client_lb_end2end_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/client_lb_end2end_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/client_lb_end2end_test: $(PROTOBUF_DEP) $(CLIENT_LB_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CLIENT_LB_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/client_lb_end2end_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/duplicate/echo_duplicate.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/xds/orca_load_report_for_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/test_lb_policies.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/client_lb_end2end_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_client_lb_end2end_test: $(CLIENT_LB_END2END_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CLIENT_LB_END2END_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/core/util/test_lb_policies.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/orca_load_report_for_test.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/orca_load_report_for_test.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/client_lb_end2end_test.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/orca_load_report_for_test.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/orca_load_report_for_test.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/orca_load_report_for_test.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/orca_load_report_for_test.grpc.pb.cc CODEGEN_TEST_FULL_SRC = \ test/cpp/codegen/codegen_test_full.cc \ CODEGEN_TEST_FULL_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CODEGEN_TEST_FULL_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/codegen_test_full: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/codegen_test_full: protobuf_dep_error else $(BINDIR)/$(CONFIG)/codegen_test_full: $(PROTOBUF_DEP) $(CODEGEN_TEST_FULL_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CODEGEN_TEST_FULL_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/codegen_test_full endif endif $(OBJDIR)/$(CONFIG)/test/cpp/codegen/codegen_test_full.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_codegen_test_full: $(CODEGEN_TEST_FULL_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CODEGEN_TEST_FULL_OBJS:.o=.dep) endif endif CODEGEN_TEST_MINIMAL_SRC = \ test/cpp/codegen/codegen_test_minimal.cc \ CODEGEN_TEST_MINIMAL_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CODEGEN_TEST_MINIMAL_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/codegen_test_minimal: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/codegen_test_minimal: protobuf_dep_error else $(BINDIR)/$(CONFIG)/codegen_test_minimal: $(PROTOBUF_DEP) $(CODEGEN_TEST_MINIMAL_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CODEGEN_TEST_MINIMAL_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/codegen_test_minimal endif endif $(OBJDIR)/$(CONFIG)/test/cpp/codegen/codegen_test_minimal.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_codegen_test_minimal: $(CODEGEN_TEST_MINIMAL_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CODEGEN_TEST_MINIMAL_OBJS:.o=.dep) endif endif CONNECTION_PREFIX_BAD_CLIENT_TEST_SRC = \ test/core/bad_client/bad_client.cc \ test/core/bad_client/tests/connection_prefix.cc \ test/core/end2end/cq_verifier.cc \ CONNECTION_PREFIX_BAD_CLIENT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CONNECTION_PREFIX_BAD_CLIENT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/connection_prefix_bad_client_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/connection_prefix_bad_client_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/connection_prefix_bad_client_test: $(PROTOBUF_DEP) $(CONNECTION_PREFIX_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CONNECTION_PREFIX_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/connection_prefix_bad_client_test endif endif $(OBJDIR)/$(CONFIG)/test/core/bad_client/bad_client.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/bad_client/tests/connection_prefix.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_connection_prefix_bad_client_test: $(CONNECTION_PREFIX_BAD_CLIENT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CONNECTION_PREFIX_BAD_CLIENT_TEST_OBJS:.o=.dep) endif endif CONNECTIVITY_STATE_TEST_SRC = \ test/core/transport/connectivity_state_test.cc \ CONNECTIVITY_STATE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CONNECTIVITY_STATE_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/connectivity_state_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/connectivity_state_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/connectivity_state_test: $(PROTOBUF_DEP) $(CONNECTIVITY_STATE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CONNECTIVITY_STATE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/connectivity_state_test endif endif $(OBJDIR)/$(CONFIG)/test/core/transport/connectivity_state_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_connectivity_state_test: $(CONNECTIVITY_STATE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CONNECTIVITY_STATE_TEST_OBJS:.o=.dep) endif endif CONTEXT_LIST_TEST_SRC = \ test/core/transport/chttp2/context_list_test.cc \ CONTEXT_LIST_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CONTEXT_LIST_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/context_list_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/context_list_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/context_list_test: $(PROTOBUF_DEP) $(CONTEXT_LIST_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CONTEXT_LIST_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/context_list_test endif endif $(OBJDIR)/$(CONFIG)/test/core/transport/chttp2/context_list_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_context_list_test: $(CONTEXT_LIST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CONTEXT_LIST_TEST_OBJS:.o=.dep) endif endif DELEGATING_CHANNEL_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/delegating_channel_test.cc \ test/cpp/end2end/test_service_impl.cc \ DELEGATING_CHANNEL_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(DELEGATING_CHANNEL_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/delegating_channel_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/delegating_channel_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/delegating_channel_test: $(PROTOBUF_DEP) $(DELEGATING_CHANNEL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(DELEGATING_CHANNEL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/delegating_channel_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/delegating_channel_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_delegating_channel_test: $(DELEGATING_CHANNEL_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(DELEGATING_CHANNEL_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/delegating_channel_test.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc DESTROY_GRPCLB_CHANNEL_WITH_ACTIVE_CONNECT_STRESS_TEST_SRC = \ test/cpp/client/destroy_grpclb_channel_with_active_connect_stress_test.cc \ DESTROY_GRPCLB_CHANNEL_WITH_ACTIVE_CONNECT_STRESS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(DESTROY_GRPCLB_CHANNEL_WITH_ACTIVE_CONNECT_STRESS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/destroy_grpclb_channel_with_active_connect_stress_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/destroy_grpclb_channel_with_active_connect_stress_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/destroy_grpclb_channel_with_active_connect_stress_test: $(PROTOBUF_DEP) $(DESTROY_GRPCLB_CHANNEL_WITH_ACTIVE_CONNECT_STRESS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(DESTROY_GRPCLB_CHANNEL_WITH_ACTIVE_CONNECT_STRESS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/destroy_grpclb_channel_with_active_connect_stress_test endif endif $(OBJDIR)/$(CONFIG)/test/cpp/client/destroy_grpclb_channel_with_active_connect_stress_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_destroy_grpclb_channel_with_active_connect_stress_test: $(DESTROY_GRPCLB_CHANNEL_WITH_ACTIVE_CONNECT_STRESS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(DESTROY_GRPCLB_CHANNEL_WITH_ACTIVE_CONNECT_STRESS_TEST_OBJS:.o=.dep) endif endif DUPLICATE_HEADER_BAD_CLIENT_TEST_SRC = \ test/core/bad_client/bad_client.cc \ test/core/bad_client/tests/duplicate_header.cc \ test/core/end2end/cq_verifier.cc \ DUPLICATE_HEADER_BAD_CLIENT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(DUPLICATE_HEADER_BAD_CLIENT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/duplicate_header_bad_client_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/duplicate_header_bad_client_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/duplicate_header_bad_client_test: $(PROTOBUF_DEP) $(DUPLICATE_HEADER_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(DUPLICATE_HEADER_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/duplicate_header_bad_client_test endif endif $(OBJDIR)/$(CONFIG)/test/core/bad_client/bad_client.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/bad_client/tests/duplicate_header.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_duplicate_header_bad_client_test: $(DUPLICATE_HEADER_BAD_CLIENT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(DUPLICATE_HEADER_BAD_CLIENT_TEST_OBJS:.o=.dep) endif endif END2END_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/end2end_test.cc \ test/cpp/end2end/interceptors_util.cc \ test/cpp/end2end/test_service_impl.cc \ END2END_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(END2END_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/end2end_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/end2end_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/end2end_test: $(PROTOBUF_DEP) $(END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/end2end_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/duplicate/echo_duplicate.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/end2end_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/interceptors_util.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_end2end_test: $(END2END_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(END2END_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/end2end_test.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/interceptors_util.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc ERROR_DETAILS_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ test/cpp/util/error_details_test.cc \ ERROR_DETAILS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ERROR_DETAILS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/error_details_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/error_details_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/error_details_test: $(PROTOBUF_DEP) $(ERROR_DETAILS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_error_details.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ERROR_DETAILS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_error_details.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/error_details_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_error_details.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/error_details_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_error_details.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_error_details_test: $(ERROR_DETAILS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ERROR_DETAILS_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/util/error_details_test.o: $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc EVENTMANAGER_LIBUV_TEST_SRC = \ test/core/iomgr/poller/eventmanager_libuv_test.cc \ EVENTMANAGER_LIBUV_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(EVENTMANAGER_LIBUV_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/eventmanager_libuv_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/eventmanager_libuv_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/eventmanager_libuv_test: $(PROTOBUF_DEP) $(EVENTMANAGER_LIBUV_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(EVENTMANAGER_LIBUV_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/eventmanager_libuv_test endif endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/poller/eventmanager_libuv_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_eventmanager_libuv_test: $(EVENTMANAGER_LIBUV_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(EVENTMANAGER_LIBUV_TEST_OBJS:.o=.dep) endif endif EXCEPTION_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/exception_test.cc \ EXCEPTION_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(EXCEPTION_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/exception_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/exception_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/exception_test: $(PROTOBUF_DEP) $(EXCEPTION_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(EXCEPTION_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/exception_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/exception_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_exception_test: $(EXCEPTION_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(EXCEPTION_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/exception_test.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc FILTER_END2END_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/filter_end2end_test.cc \ FILTER_END2END_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(FILTER_END2END_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/filter_end2end_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/filter_end2end_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/filter_end2end_test: $(PROTOBUF_DEP) $(FILTER_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(FILTER_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/filter_end2end_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/duplicate/echo_duplicate.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/filter_end2end_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_filter_end2end_test: $(FILTER_END2END_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(FILTER_END2END_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/filter_end2end_test.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc FLAKY_NETWORK_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/flaky_network_test.cc \ test/cpp/end2end/test_service_impl.cc \ FLAKY_NETWORK_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(FLAKY_NETWORK_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/flaky_network_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/flaky_network_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/flaky_network_test: $(PROTOBUF_DEP) $(FLAKY_NETWORK_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(FLAKY_NETWORK_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/flaky_network_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/flaky_network_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_flaky_network_test: $(FLAKY_NETWORK_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(FLAKY_NETWORK_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/flaky_network_test.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc GENERIC_END2END_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/generic_end2end_test.cc \ GENERIC_END2END_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GENERIC_END2END_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/generic_end2end_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/generic_end2end_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/generic_end2end_test: $(PROTOBUF_DEP) $(GENERIC_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(GENERIC_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/generic_end2end_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/duplicate/echo_duplicate.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/generic_end2end_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_generic_end2end_test: $(GENERIC_END2END_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(GENERIC_END2END_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/generic_end2end_test.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc GLOBAL_CONFIG_ENV_TEST_SRC = \ test/core/gprpp/global_config_env_test.cc \ GLOBAL_CONFIG_ENV_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GLOBAL_CONFIG_ENV_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/global_config_env_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/global_config_env_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/global_config_env_test: $(PROTOBUF_DEP) $(GLOBAL_CONFIG_ENV_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(GLOBAL_CONFIG_ENV_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/global_config_env_test endif endif $(OBJDIR)/$(CONFIG)/test/core/gprpp/global_config_env_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_global_config_env_test: $(GLOBAL_CONFIG_ENV_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(GLOBAL_CONFIG_ENV_TEST_OBJS:.o=.dep) endif endif GLOBAL_CONFIG_TEST_SRC = \ test/core/gprpp/global_config_test.cc \ GLOBAL_CONFIG_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GLOBAL_CONFIG_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/global_config_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/global_config_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/global_config_test: $(PROTOBUF_DEP) $(GLOBAL_CONFIG_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(GLOBAL_CONFIG_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/global_config_test endif endif $(OBJDIR)/$(CONFIG)/test/core/gprpp/global_config_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_global_config_test: $(GLOBAL_CONFIG_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(GLOBAL_CONFIG_TEST_OBJS:.o=.dep) endif endif GRPC_CLI_SRC = \ $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc \ test/cpp/util/cli_call.cc \ test/cpp/util/cli_credentials.cc \ test/cpp/util/grpc_cli.cc \ test/cpp/util/grpc_tool.cc \ test/cpp/util/proto_file_parser.cc \ test/cpp/util/proto_reflection_descriptor_database.cc \ test/cpp/util/service_describer.cc \ GRPC_CLI_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_CLI_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/grpc_cli: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/grpc_cli: protobuf_dep_error else $(BINDIR)/$(CONFIG)/grpc_cli: $(PROTOBUF_DEP) $(GRPC_CLI_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(GRPC_CLI_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/grpc_cli endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/reflection/v1alpha/reflection.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/cli_call.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/cli_credentials.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/grpc_cli.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/grpc_tool.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/proto_file_parser.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/proto_reflection_descriptor_database.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/service_describer.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_grpc_cli: $(GRPC_CLI_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(GRPC_CLI_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/util/cli_call.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/cli_credentials.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/grpc_cli.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/grpc_tool.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/proto_file_parser.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/proto_reflection_descriptor_database.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/service_describer.o: $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.pb.cc $(GENDIR)/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc GRPC_CPP_PLUGIN_SRC = \ src/compiler/cpp_plugin.cc \ GRPC_CPP_PLUGIN_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_CPP_PLUGIN_SRC)))) ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/grpc_cpp_plugin: protobuf_dep_error else $(BINDIR)/$(CONFIG)/grpc_cpp_plugin: $(PROTOBUF_DEP) $(GRPC_CPP_PLUGIN_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(E) "[HOSTLD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(HOST_LDXX) $(HOST_LDFLAGS) $(GRPC_CPP_PLUGIN_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(HOST_LDLIBSXX) $(HOST_LDLIBS_PROTOC) $(HOST_LDLIBS) $(HOST_LDLIBS_PROTOC) -o $(BINDIR)/$(CONFIG)/grpc_cpp_plugin endif $(OBJDIR)/$(CONFIG)/src/compiler/cpp_plugin.o: $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a deps_grpc_cpp_plugin: $(GRPC_CPP_PLUGIN_OBJS:.o=.dep) ifneq ($(NO_DEPS),true) -include $(GRPC_CPP_PLUGIN_OBJS:.o=.dep) endif GRPC_CSHARP_PLUGIN_SRC = \ src/compiler/csharp_plugin.cc \ GRPC_CSHARP_PLUGIN_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_CSHARP_PLUGIN_SRC)))) ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/grpc_csharp_plugin: protobuf_dep_error else $(BINDIR)/$(CONFIG)/grpc_csharp_plugin: $(PROTOBUF_DEP) $(GRPC_CSHARP_PLUGIN_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(E) "[HOSTLD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(HOST_LDXX) $(HOST_LDFLAGS) $(GRPC_CSHARP_PLUGIN_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(HOST_LDLIBSXX) $(HOST_LDLIBS_PROTOC) $(HOST_LDLIBS) $(HOST_LDLIBS_PROTOC) -o $(BINDIR)/$(CONFIG)/grpc_csharp_plugin endif $(OBJDIR)/$(CONFIG)/src/compiler/csharp_plugin.o: $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a deps_grpc_csharp_plugin: $(GRPC_CSHARP_PLUGIN_OBJS:.o=.dep) ifneq ($(NO_DEPS),true) -include $(GRPC_CSHARP_PLUGIN_OBJS:.o=.dep) endif GRPC_NODE_PLUGIN_SRC = \ src/compiler/node_plugin.cc \ GRPC_NODE_PLUGIN_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_NODE_PLUGIN_SRC)))) ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/grpc_node_plugin: protobuf_dep_error else $(BINDIR)/$(CONFIG)/grpc_node_plugin: $(PROTOBUF_DEP) $(GRPC_NODE_PLUGIN_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(E) "[HOSTLD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(HOST_LDXX) $(HOST_LDFLAGS) $(GRPC_NODE_PLUGIN_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(HOST_LDLIBSXX) $(HOST_LDLIBS_PROTOC) $(HOST_LDLIBS) $(HOST_LDLIBS_PROTOC) -o $(BINDIR)/$(CONFIG)/grpc_node_plugin endif $(OBJDIR)/$(CONFIG)/src/compiler/node_plugin.o: $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a deps_grpc_node_plugin: $(GRPC_NODE_PLUGIN_OBJS:.o=.dep) ifneq ($(NO_DEPS),true) -include $(GRPC_NODE_PLUGIN_OBJS:.o=.dep) endif GRPC_OBJECTIVE_C_PLUGIN_SRC = \ src/compiler/objective_c_plugin.cc \ GRPC_OBJECTIVE_C_PLUGIN_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_OBJECTIVE_C_PLUGIN_SRC)))) ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/grpc_objective_c_plugin: protobuf_dep_error else $(BINDIR)/$(CONFIG)/grpc_objective_c_plugin: $(PROTOBUF_DEP) $(GRPC_OBJECTIVE_C_PLUGIN_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(E) "[HOSTLD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(HOST_LDXX) $(HOST_LDFLAGS) $(GRPC_OBJECTIVE_C_PLUGIN_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(HOST_LDLIBSXX) $(HOST_LDLIBS_PROTOC) $(HOST_LDLIBS) $(HOST_LDLIBS_PROTOC) -o $(BINDIR)/$(CONFIG)/grpc_objective_c_plugin endif $(OBJDIR)/$(CONFIG)/src/compiler/objective_c_plugin.o: $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a deps_grpc_objective_c_plugin: $(GRPC_OBJECTIVE_C_PLUGIN_OBJS:.o=.dep) ifneq ($(NO_DEPS),true) -include $(GRPC_OBJECTIVE_C_PLUGIN_OBJS:.o=.dep) endif GRPC_PHP_PLUGIN_SRC = \ src/compiler/php_plugin.cc \ GRPC_PHP_PLUGIN_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_PHP_PLUGIN_SRC)))) ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/grpc_php_plugin: protobuf_dep_error else $(BINDIR)/$(CONFIG)/grpc_php_plugin: $(PROTOBUF_DEP) $(GRPC_PHP_PLUGIN_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(E) "[HOSTLD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(HOST_LDXX) $(HOST_LDFLAGS) $(GRPC_PHP_PLUGIN_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(HOST_LDLIBSXX) $(HOST_LDLIBS_PROTOC) $(HOST_LDLIBS) $(HOST_LDLIBS_PROTOC) -o $(BINDIR)/$(CONFIG)/grpc_php_plugin endif $(OBJDIR)/$(CONFIG)/src/compiler/php_plugin.o: $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a deps_grpc_php_plugin: $(GRPC_PHP_PLUGIN_OBJS:.o=.dep) ifneq ($(NO_DEPS),true) -include $(GRPC_PHP_PLUGIN_OBJS:.o=.dep) endif GRPC_PYTHON_PLUGIN_SRC = \ src/compiler/python_plugin.cc \ GRPC_PYTHON_PLUGIN_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_PYTHON_PLUGIN_SRC)))) ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/grpc_python_plugin: protobuf_dep_error else $(BINDIR)/$(CONFIG)/grpc_python_plugin: $(PROTOBUF_DEP) $(GRPC_PYTHON_PLUGIN_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(E) "[HOSTLD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(HOST_LDXX) $(HOST_LDFLAGS) $(GRPC_PYTHON_PLUGIN_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(HOST_LDLIBSXX) $(HOST_LDLIBS_PROTOC) $(HOST_LDLIBS) $(HOST_LDLIBS_PROTOC) -o $(BINDIR)/$(CONFIG)/grpc_python_plugin endif $(OBJDIR)/$(CONFIG)/src/compiler/python_plugin.o: $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a deps_grpc_python_plugin: $(GRPC_PYTHON_PLUGIN_OBJS:.o=.dep) ifneq ($(NO_DEPS),true) -include $(GRPC_PYTHON_PLUGIN_OBJS:.o=.dep) endif GRPC_RUBY_PLUGIN_SRC = \ src/compiler/ruby_plugin.cc \ GRPC_RUBY_PLUGIN_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_RUBY_PLUGIN_SRC)))) ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/grpc_ruby_plugin: protobuf_dep_error else $(BINDIR)/$(CONFIG)/grpc_ruby_plugin: $(PROTOBUF_DEP) $(GRPC_RUBY_PLUGIN_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(E) "[HOSTLD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(HOST_LDXX) $(HOST_LDFLAGS) $(GRPC_RUBY_PLUGIN_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(HOST_LDLIBSXX) $(HOST_LDLIBS_PROTOC) $(HOST_LDLIBS) $(HOST_LDLIBS_PROTOC) -o $(BINDIR)/$(CONFIG)/grpc_ruby_plugin endif $(OBJDIR)/$(CONFIG)/src/compiler/ruby_plugin.o: $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a deps_grpc_ruby_plugin: $(GRPC_RUBY_PLUGIN_OBJS:.o=.dep) ifneq ($(NO_DEPS),true) -include $(GRPC_RUBY_PLUGIN_OBJS:.o=.dep) endif GRPC_TLS_CREDENTIALS_OPTIONS_TEST_SRC = \ test/core/security/grpc_tls_credentials_options_test.cc \ GRPC_TLS_CREDENTIALS_OPTIONS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_TLS_CREDENTIALS_OPTIONS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/grpc_tls_credentials_options_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/grpc_tls_credentials_options_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/grpc_tls_credentials_options_test: $(PROTOBUF_DEP) $(GRPC_TLS_CREDENTIALS_OPTIONS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(GRPC_TLS_CREDENTIALS_OPTIONS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/grpc_tls_credentials_options_test endif endif $(OBJDIR)/$(CONFIG)/test/core/security/grpc_tls_credentials_options_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_grpc_tls_credentials_options_test: $(GRPC_TLS_CREDENTIALS_OPTIONS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(GRPC_TLS_CREDENTIALS_OPTIONS_TEST_OBJS:.o=.dep) endif endif GRPC_TOOL_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/util/cli_call.cc \ test/cpp/util/cli_credentials.cc \ test/cpp/util/grpc_tool.cc \ test/cpp/util/grpc_tool_test.cc \ test/cpp/util/proto_file_parser.cc \ test/cpp/util/proto_reflection_descriptor_database.cc \ test/cpp/util/service_describer.cc \ GRPC_TOOL_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_TOOL_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/grpc_tool_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/grpc_tool_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/grpc_tool_test: $(PROTOBUF_DEP) $(GRPC_TOOL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(GRPC_TOOL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/grpc_tool_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/cli_call.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/cli_credentials.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/grpc_tool.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/grpc_tool_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/proto_file_parser.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/proto_reflection_descriptor_database.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/service_describer.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_grpc_tool_test: $(GRPC_TOOL_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(GRPC_TOOL_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/util/cli_call.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/cli_credentials.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/grpc_tool.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/grpc_tool_test.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/proto_file_parser.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/proto_reflection_descriptor_database.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/service_describer.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc GRPCLB_API_TEST_SRC = \ $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.pb.cc $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc \ test/cpp/grpclb/grpclb_api_test.cc \ GRPCLB_API_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPCLB_API_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/grpclb_api_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/grpclb_api_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/grpclb_api_test: $(PROTOBUF_DEP) $(GRPCLB_API_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(GRPCLB_API_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/grpclb_api_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/lb/v1/load_balancer.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/grpclb/grpclb_api_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_grpclb_api_test: $(GRPCLB_API_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(GRPCLB_API_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/grpclb/grpclb_api_test.o: $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.pb.cc $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc GRPCLB_END2END_TEST_SRC = \ $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.pb.cc $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/grpclb_end2end_test.cc \ test/cpp/end2end/test_service_impl.cc \ GRPCLB_END2END_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPCLB_END2END_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/grpclb_end2end_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/grpclb_end2end_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/grpclb_end2end_test: $(PROTOBUF_DEP) $(GRPCLB_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(GRPCLB_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/grpclb_end2end_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/lb/v1/load_balancer.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/duplicate/echo_duplicate.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/grpclb_end2end_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_grpclb_end2end_test: $(GRPCLB_END2END_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(GRPCLB_END2END_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/grpclb_end2end_test.o: $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.pb.cc $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.pb.cc $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc H2_SSL_SESSION_REUSE_TEST_SRC = \ test/core/end2end/h2_ssl_session_reuse_test.cc \ H2_SSL_SESSION_REUSE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(H2_SSL_SESSION_REUSE_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/h2_ssl_session_reuse_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/h2_ssl_session_reuse_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/h2_ssl_session_reuse_test: $(PROTOBUF_DEP) $(H2_SSL_SESSION_REUSE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libend2end_tests.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(H2_SSL_SESSION_REUSE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libend2end_tests.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/h2_ssl_session_reuse_test endif endif $(OBJDIR)/$(CONFIG)/test/core/end2end/h2_ssl_session_reuse_test.o: $(LIBDIR)/$(CONFIG)/libend2end_tests.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_h2_ssl_session_reuse_test: $(H2_SSL_SESSION_REUSE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(H2_SSL_SESSION_REUSE_TEST_OBJS:.o=.dep) endif endif HEAD_OF_LINE_BLOCKING_BAD_CLIENT_TEST_SRC = \ test/core/bad_client/bad_client.cc \ test/core/bad_client/tests/head_of_line_blocking.cc \ test/core/end2end/cq_verifier.cc \ HEAD_OF_LINE_BLOCKING_BAD_CLIENT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HEAD_OF_LINE_BLOCKING_BAD_CLIENT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/head_of_line_blocking_bad_client_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/head_of_line_blocking_bad_client_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/head_of_line_blocking_bad_client_test: $(PROTOBUF_DEP) $(HEAD_OF_LINE_BLOCKING_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(HEAD_OF_LINE_BLOCKING_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/head_of_line_blocking_bad_client_test endif endif $(OBJDIR)/$(CONFIG)/test/core/bad_client/bad_client.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/bad_client/tests/head_of_line_blocking.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_head_of_line_blocking_bad_client_test: $(HEAD_OF_LINE_BLOCKING_BAD_CLIENT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(HEAD_OF_LINE_BLOCKING_BAD_CLIENT_TEST_OBJS:.o=.dep) endif endif HEADERS_BAD_CLIENT_TEST_SRC = \ test/core/bad_client/bad_client.cc \ test/core/bad_client/tests/headers.cc \ test/core/end2end/cq_verifier.cc \ HEADERS_BAD_CLIENT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HEADERS_BAD_CLIENT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/headers_bad_client_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/headers_bad_client_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/headers_bad_client_test: $(PROTOBUF_DEP) $(HEADERS_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(HEADERS_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/headers_bad_client_test endif endif $(OBJDIR)/$(CONFIG)/test/core/bad_client/bad_client.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/bad_client/tests/headers.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_headers_bad_client_test: $(HEADERS_BAD_CLIENT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(HEADERS_BAD_CLIENT_TEST_OBJS:.o=.dep) endif endif HEALTH_SERVICE_END2END_TEST_SRC = \ $(GENDIR)/src/proto/grpc/health/v1/health.pb.cc $(GENDIR)/src/proto/grpc/health/v1/health.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/health_service_end2end_test.cc \ test/cpp/end2end/test_health_check_service_impl.cc \ test/cpp/end2end/test_service_impl.cc \ HEALTH_SERVICE_END2END_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HEALTH_SERVICE_END2END_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/health_service_end2end_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/health_service_end2end_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/health_service_end2end_test: $(PROTOBUF_DEP) $(HEALTH_SERVICE_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(HEALTH_SERVICE_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/health_service_end2end_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/health/v1/health.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/duplicate/echo_duplicate.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/health_service_end2end_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_health_check_service_impl.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_health_service_end2end_test: $(HEALTH_SERVICE_END2END_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(HEALTH_SERVICE_END2END_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/health_service_end2end_test.o: $(GENDIR)/src/proto/grpc/health/v1/health.pb.cc $(GENDIR)/src/proto/grpc/health/v1/health.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_health_check_service_impl.o: $(GENDIR)/src/proto/grpc/health/v1/health.pb.cc $(GENDIR)/src/proto/grpc/health/v1/health.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(GENDIR)/src/proto/grpc/health/v1/health.pb.cc $(GENDIR)/src/proto/grpc/health/v1/health.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc HPACK_PARSER_FUZZER_TEST_SRC = \ test/core/transport/chttp2/hpack_parser_fuzzer_test.cc \ test/core/util/fuzzer_corpus_test.cc \ HPACK_PARSER_FUZZER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HPACK_PARSER_FUZZER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/hpack_parser_fuzzer_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/hpack_parser_fuzzer_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/hpack_parser_fuzzer_test: $(PROTOBUF_DEP) $(HPACK_PARSER_FUZZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(HPACK_PARSER_FUZZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -lFuzzer -o $(BINDIR)/$(CONFIG)/hpack_parser_fuzzer_test endif endif $(OBJDIR)/$(CONFIG)/test/core/transport/chttp2/hpack_parser_fuzzer_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/fuzzer_corpus_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_hpack_parser_fuzzer_test: $(HPACK_PARSER_FUZZER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(HPACK_PARSER_FUZZER_TEST_OBJS:.o=.dep) endif endif HTTP2_CLIENT_SRC = \ $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/test.pb.cc $(GENDIR)/src/proto/grpc/testing/test.grpc.pb.cc \ test/cpp/interop/http2_client.cc \ HTTP2_CLIENT_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTP2_CLIENT_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/http2_client: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/http2_client: protobuf_dep_error else $(BINDIR)/$(CONFIG)/http2_client: $(PROTOBUF_DEP) $(HTTP2_CLIENT_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(HTTP2_CLIENT_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/http2_client endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/empty.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/interop/http2_client.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_http2_client: $(HTTP2_CLIENT_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(HTTP2_CLIENT_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/interop/http2_client.o: $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/test.pb.cc $(GENDIR)/src/proto/grpc/testing/test.grpc.pb.cc HTTP_REQUEST_FUZZER_TEST_SRC = \ test/core/http/request_fuzzer.cc \ test/core/util/fuzzer_corpus_test.cc \ HTTP_REQUEST_FUZZER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTP_REQUEST_FUZZER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/http_request_fuzzer_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/http_request_fuzzer_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/http_request_fuzzer_test: $(PROTOBUF_DEP) $(HTTP_REQUEST_FUZZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(HTTP_REQUEST_FUZZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -lFuzzer -o $(BINDIR)/$(CONFIG)/http_request_fuzzer_test endif endif $(OBJDIR)/$(CONFIG)/test/core/http/request_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/fuzzer_corpus_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_http_request_fuzzer_test: $(HTTP_REQUEST_FUZZER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(HTTP_REQUEST_FUZZER_TEST_OBJS:.o=.dep) endif endif HTTP_RESPONSE_FUZZER_TEST_SRC = \ test/core/http/response_fuzzer.cc \ test/core/util/fuzzer_corpus_test.cc \ HTTP_RESPONSE_FUZZER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTP_RESPONSE_FUZZER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/http_response_fuzzer_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/http_response_fuzzer_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/http_response_fuzzer_test: $(PROTOBUF_DEP) $(HTTP_RESPONSE_FUZZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(HTTP_RESPONSE_FUZZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -lFuzzer -o $(BINDIR)/$(CONFIG)/http_response_fuzzer_test endif endif $(OBJDIR)/$(CONFIG)/test/core/http/response_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/fuzzer_corpus_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_http_response_fuzzer_test: $(HTTP_RESPONSE_FUZZER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(HTTP_RESPONSE_FUZZER_TEST_OBJS:.o=.dep) endif endif HYBRID_END2END_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/hybrid_end2end_test.cc \ test/cpp/end2end/test_service_impl.cc \ HYBRID_END2END_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HYBRID_END2END_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/hybrid_end2end_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/hybrid_end2end_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/hybrid_end2end_test: $(PROTOBUF_DEP) $(HYBRID_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(HYBRID_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/hybrid_end2end_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/duplicate/echo_duplicate.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/hybrid_end2end_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_hybrid_end2end_test: $(HYBRID_END2END_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(HYBRID_END2END_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/hybrid_end2end_test.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc INITIAL_SETTINGS_FRAME_BAD_CLIENT_TEST_SRC = \ test/core/bad_client/bad_client.cc \ test/core/bad_client/tests/initial_settings_frame.cc \ test/core/end2end/cq_verifier.cc \ INITIAL_SETTINGS_FRAME_BAD_CLIENT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(INITIAL_SETTINGS_FRAME_BAD_CLIENT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/initial_settings_frame_bad_client_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/initial_settings_frame_bad_client_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/initial_settings_frame_bad_client_test: $(PROTOBUF_DEP) $(INITIAL_SETTINGS_FRAME_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(INITIAL_SETTINGS_FRAME_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/initial_settings_frame_bad_client_test endif endif $(OBJDIR)/$(CONFIG)/test/core/bad_client/bad_client.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/bad_client/tests/initial_settings_frame.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_initial_settings_frame_bad_client_test: $(INITIAL_SETTINGS_FRAME_BAD_CLIENT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(INITIAL_SETTINGS_FRAME_BAD_CLIENT_TEST_OBJS:.o=.dep) endif endif INTEROP_CLIENT_SRC = \ $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/test.pb.cc $(GENDIR)/src/proto/grpc/testing/test.grpc.pb.cc \ test/core/security/oauth2_utils.cc \ test/cpp/interop/client.cc \ test/cpp/interop/client_helper.cc \ test/cpp/interop/interop_client.cc \ INTEROP_CLIENT_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(INTEROP_CLIENT_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/interop_client: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/interop_client: protobuf_dep_error else $(BINDIR)/$(CONFIG)/interop_client: $(PROTOBUF_DEP) $(INTEROP_CLIENT_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(INTEROP_CLIENT_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/interop_client endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/empty.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/security/oauth2_utils.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/interop/client.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/interop/client_helper.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/interop/interop_client.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_interop_client: $(INTEROP_CLIENT_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(INTEROP_CLIENT_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/core/security/oauth2_utils.o: $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/test.pb.cc $(GENDIR)/src/proto/grpc/testing/test.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/interop/client.o: $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/test.pb.cc $(GENDIR)/src/proto/grpc/testing/test.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/interop/client_helper.o: $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/test.pb.cc $(GENDIR)/src/proto/grpc/testing/test.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/interop/interop_client.o: $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/test.pb.cc $(GENDIR)/src/proto/grpc/testing/test.grpc.pb.cc INTEROP_SERVER_SRC = \ $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/test.pb.cc $(GENDIR)/src/proto/grpc/testing/test.grpc.pb.cc \ test/cpp/interop/interop_server.cc \ test/cpp/interop/interop_server_bootstrap.cc \ test/cpp/interop/server_helper.cc \ INTEROP_SERVER_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(INTEROP_SERVER_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/interop_server: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/interop_server: protobuf_dep_error else $(BINDIR)/$(CONFIG)/interop_server: $(PROTOBUF_DEP) $(INTEROP_SERVER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(INTEROP_SERVER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/interop_server endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/empty.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/interop/interop_server.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/interop/interop_server_bootstrap.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/interop/server_helper.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_interop_server: $(INTEROP_SERVER_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(INTEROP_SERVER_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/interop/interop_server.o: $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/test.pb.cc $(GENDIR)/src/proto/grpc/testing/test.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/interop/interop_server_bootstrap.o: $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/test.pb.cc $(GENDIR)/src/proto/grpc/testing/test.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/interop/server_helper.o: $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/test.pb.cc $(GENDIR)/src/proto/grpc/testing/test.grpc.pb.cc INTEROP_TEST_SRC = \ test/cpp/interop/interop_test.cc \ INTEROP_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(INTEROP_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/interop_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/interop_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/interop_test: $(PROTOBUF_DEP) $(INTEROP_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(INTEROP_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/interop_test endif endif $(OBJDIR)/$(CONFIG)/test/cpp/interop/interop_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_interop_test: $(INTEROP_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(INTEROP_TEST_OBJS:.o=.dep) endif endif JSON_FUZZER_TEST_SRC = \ test/core/json/fuzzer.cc \ test/core/util/fuzzer_corpus_test.cc \ JSON_FUZZER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(JSON_FUZZER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/json_fuzzer_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/json_fuzzer_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/json_fuzzer_test: $(PROTOBUF_DEP) $(JSON_FUZZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(JSON_FUZZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -lFuzzer -o $(BINDIR)/$(CONFIG)/json_fuzzer_test endif endif $(OBJDIR)/$(CONFIG)/test/core/json/fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/fuzzer_corpus_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_json_fuzzer_test: $(JSON_FUZZER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(JSON_FUZZER_TEST_OBJS:.o=.dep) endif endif JSON_TEST_SRC = \ test/core/json/json_test.cc \ JSON_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(JSON_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/json_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/json_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/json_test: $(PROTOBUF_DEP) $(JSON_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(JSON_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/json_test endif endif $(OBJDIR)/$(CONFIG)/test/core/json/json_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_json_test: $(JSON_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(JSON_TEST_OBJS:.o=.dep) endif endif LARGE_METADATA_BAD_CLIENT_TEST_SRC = \ test/core/bad_client/bad_client.cc \ test/core/bad_client/tests/large_metadata.cc \ test/core/end2end/cq_verifier.cc \ LARGE_METADATA_BAD_CLIENT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LARGE_METADATA_BAD_CLIENT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/large_metadata_bad_client_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/large_metadata_bad_client_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/large_metadata_bad_client_test: $(PROTOBUF_DEP) $(LARGE_METADATA_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(LARGE_METADATA_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/large_metadata_bad_client_test endif endif $(OBJDIR)/$(CONFIG)/test/core/bad_client/bad_client.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/bad_client/tests/large_metadata.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_large_metadata_bad_client_test: $(LARGE_METADATA_BAD_CLIENT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(LARGE_METADATA_BAD_CLIENT_TEST_OBJS:.o=.dep) endif endif LB_GET_CPU_STATS_TEST_SRC = \ src/cpp/server/load_reporter/get_cpu_stats_linux.cc \ src/cpp/server/load_reporter/get_cpu_stats_macos.cc \ src/cpp/server/load_reporter/get_cpu_stats_unsupported.cc \ src/cpp/server/load_reporter/get_cpu_stats_windows.cc \ test/cpp/server/load_reporter/get_cpu_stats_test.cc \ LB_GET_CPU_STATS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LB_GET_CPU_STATS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/lb_get_cpu_stats_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/lb_get_cpu_stats_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/lb_get_cpu_stats_test: $(PROTOBUF_DEP) $(LB_GET_CPU_STATS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(LB_GET_CPU_STATS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/lb_get_cpu_stats_test endif endif $(OBJDIR)/$(CONFIG)/src/cpp/server/load_reporter/get_cpu_stats_linux.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/cpp/server/load_reporter/get_cpu_stats_macos.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/cpp/server/load_reporter/get_cpu_stats_unsupported.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/cpp/server/load_reporter/get_cpu_stats_windows.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/server/load_reporter/get_cpu_stats_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_lb_get_cpu_stats_test: $(LB_GET_CPU_STATS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(LB_GET_CPU_STATS_TEST_OBJS:.o=.dep) endif endif LB_LOAD_DATA_STORE_TEST_SRC = \ src/cpp/server/load_reporter/load_data_store.cc \ test/cpp/server/load_reporter/load_data_store_test.cc \ LB_LOAD_DATA_STORE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LB_LOAD_DATA_STORE_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/lb_load_data_store_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/lb_load_data_store_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/lb_load_data_store_test: $(PROTOBUF_DEP) $(LB_LOAD_DATA_STORE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(LB_LOAD_DATA_STORE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/lb_load_data_store_test endif endif $(OBJDIR)/$(CONFIG)/src/cpp/server/load_reporter/load_data_store.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/server/load_reporter/load_data_store_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_lb_load_data_store_test: $(LB_LOAD_DATA_STORE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(LB_LOAD_DATA_STORE_TEST_OBJS:.o=.dep) endif endif LINUX_SYSTEM_ROOTS_TEST_SRC = \ test/core/security/linux_system_roots_test.cc \ LINUX_SYSTEM_ROOTS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LINUX_SYSTEM_ROOTS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/linux_system_roots_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/linux_system_roots_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/linux_system_roots_test: $(PROTOBUF_DEP) $(LINUX_SYSTEM_ROOTS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(LINUX_SYSTEM_ROOTS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/linux_system_roots_test endif endif $(OBJDIR)/$(CONFIG)/test/core/security/linux_system_roots_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_linux_system_roots_test: $(LINUX_SYSTEM_ROOTS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(LINUX_SYSTEM_ROOTS_TEST_OBJS:.o=.dep) endif endif MESSAGE_ALLOCATOR_END2END_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/message_allocator_end2end_test.cc \ test/cpp/end2end/test_service_impl.cc \ MESSAGE_ALLOCATOR_END2END_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(MESSAGE_ALLOCATOR_END2END_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/message_allocator_end2end_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/message_allocator_end2end_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/message_allocator_end2end_test: $(PROTOBUF_DEP) $(MESSAGE_ALLOCATOR_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(MESSAGE_ALLOCATOR_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/message_allocator_end2end_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/message_allocator_end2end_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_message_allocator_end2end_test: $(MESSAGE_ALLOCATOR_END2END_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(MESSAGE_ALLOCATOR_END2END_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/message_allocator_end2end_test.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc MOCK_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/mock_test.cc \ MOCK_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(MOCK_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/mock_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/mock_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/mock_test: $(PROTOBUF_DEP) $(MOCK_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(MOCK_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/mock_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/duplicate/echo_duplicate.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/mock_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_mock_test: $(MOCK_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(MOCK_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/mock_test.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc NANOPB_FUZZER_RESPONSE_TEST_SRC = \ test/core/nanopb/fuzzer_response.cc \ test/core/util/fuzzer_corpus_test.cc \ NANOPB_FUZZER_RESPONSE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(NANOPB_FUZZER_RESPONSE_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/nanopb_fuzzer_response_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/nanopb_fuzzer_response_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/nanopb_fuzzer_response_test: $(PROTOBUF_DEP) $(NANOPB_FUZZER_RESPONSE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(NANOPB_FUZZER_RESPONSE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -lFuzzer -o $(BINDIR)/$(CONFIG)/nanopb_fuzzer_response_test endif endif $(OBJDIR)/$(CONFIG)/test/core/nanopb/fuzzer_response.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/fuzzer_corpus_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_nanopb_fuzzer_response_test: $(NANOPB_FUZZER_RESPONSE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(NANOPB_FUZZER_RESPONSE_TEST_OBJS:.o=.dep) endif endif NANOPB_FUZZER_SERVERLIST_TEST_SRC = \ test/core/nanopb/fuzzer_serverlist.cc \ test/core/util/fuzzer_corpus_test.cc \ NANOPB_FUZZER_SERVERLIST_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(NANOPB_FUZZER_SERVERLIST_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/nanopb_fuzzer_serverlist_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/nanopb_fuzzer_serverlist_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/nanopb_fuzzer_serverlist_test: $(PROTOBUF_DEP) $(NANOPB_FUZZER_SERVERLIST_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(NANOPB_FUZZER_SERVERLIST_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -lFuzzer -o $(BINDIR)/$(CONFIG)/nanopb_fuzzer_serverlist_test endif endif $(OBJDIR)/$(CONFIG)/test/core/nanopb/fuzzer_serverlist.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/fuzzer_corpus_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_nanopb_fuzzer_serverlist_test: $(NANOPB_FUZZER_SERVERLIST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(NANOPB_FUZZER_SERVERLIST_TEST_OBJS:.o=.dep) endif endif NONBLOCKING_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/nonblocking_test.cc \ NONBLOCKING_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(NONBLOCKING_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/nonblocking_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/nonblocking_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/nonblocking_test: $(PROTOBUF_DEP) $(NONBLOCKING_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(NONBLOCKING_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/nonblocking_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/nonblocking_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_nonblocking_test: $(NONBLOCKING_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(NONBLOCKING_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/nonblocking_test.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc NOOP-BENCHMARK_SRC = \ test/cpp/microbenchmarks/noop-benchmark.cc \ NOOP-BENCHMARK_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(NOOP-BENCHMARK_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/noop-benchmark: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/noop-benchmark: protobuf_dep_error else $(BINDIR)/$(CONFIG)/noop-benchmark: $(PROTOBUF_DEP) $(NOOP-BENCHMARK_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(NOOP-BENCHMARK_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/noop-benchmark endif endif $(NOOP-BENCHMARK_OBJS): CPPFLAGS += -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX $(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/noop-benchmark.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LIBDIR)/$(CONFIG)/libbenchmark.a deps_noop-benchmark: $(NOOP-BENCHMARK_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(NOOP-BENCHMARK_OBJS:.o=.dep) endif endif ORPHANABLE_TEST_SRC = \ test/core/gprpp/orphanable_test.cc \ ORPHANABLE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ORPHANABLE_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/orphanable_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/orphanable_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/orphanable_test: $(PROTOBUF_DEP) $(ORPHANABLE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ORPHANABLE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/orphanable_test endif endif $(OBJDIR)/$(CONFIG)/test/core/gprpp/orphanable_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_orphanable_test: $(ORPHANABLE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ORPHANABLE_TEST_OBJS:.o=.dep) endif endif OUT_OF_BOUNDS_BAD_CLIENT_TEST_SRC = \ test/core/bad_client/bad_client.cc \ test/core/bad_client/tests/out_of_bounds.cc \ test/core/end2end/cq_verifier.cc \ OUT_OF_BOUNDS_BAD_CLIENT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(OUT_OF_BOUNDS_BAD_CLIENT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/out_of_bounds_bad_client_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/out_of_bounds_bad_client_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/out_of_bounds_bad_client_test: $(PROTOBUF_DEP) $(OUT_OF_BOUNDS_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(OUT_OF_BOUNDS_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/out_of_bounds_bad_client_test endif endif $(OBJDIR)/$(CONFIG)/test/core/bad_client/bad_client.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/bad_client/tests/out_of_bounds.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_out_of_bounds_bad_client_test: $(OUT_OF_BOUNDS_BAD_CLIENT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(OUT_OF_BOUNDS_BAD_CLIENT_TEST_OBJS:.o=.dep) endif endif PERCENT_DECODE_FUZZER_SRC = \ test/core/slice/percent_decode_fuzzer.cc \ test/core/util/fuzzer_corpus_test.cc \ PERCENT_DECODE_FUZZER_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(PERCENT_DECODE_FUZZER_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/percent_decode_fuzzer: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/percent_decode_fuzzer: protobuf_dep_error else $(BINDIR)/$(CONFIG)/percent_decode_fuzzer: $(PROTOBUF_DEP) $(PERCENT_DECODE_FUZZER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(PERCENT_DECODE_FUZZER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -lFuzzer -o $(BINDIR)/$(CONFIG)/percent_decode_fuzzer endif endif $(OBJDIR)/$(CONFIG)/test/core/slice/percent_decode_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/fuzzer_corpus_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_percent_decode_fuzzer: $(PERCENT_DECODE_FUZZER_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(PERCENT_DECODE_FUZZER_OBJS:.o=.dep) endif endif PERCENT_ENCODE_FUZZER_SRC = \ test/core/slice/percent_encode_fuzzer.cc \ test/core/util/fuzzer_corpus_test.cc \ PERCENT_ENCODE_FUZZER_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(PERCENT_ENCODE_FUZZER_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/percent_encode_fuzzer: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/percent_encode_fuzzer: protobuf_dep_error else $(BINDIR)/$(CONFIG)/percent_encode_fuzzer: $(PROTOBUF_DEP) $(PERCENT_ENCODE_FUZZER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(PERCENT_ENCODE_FUZZER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -lFuzzer -o $(BINDIR)/$(CONFIG)/percent_encode_fuzzer endif endif $(OBJDIR)/$(CONFIG)/test/core/slice/percent_encode_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/fuzzer_corpus_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_percent_encode_fuzzer: $(PERCENT_ENCODE_FUZZER_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(PERCENT_ENCODE_FUZZER_OBJS:.o=.dep) endif endif PID_CONTROLLER_TEST_SRC = \ test/core/transport/pid_controller_test.cc \ PID_CONTROLLER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(PID_CONTROLLER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/pid_controller_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/pid_controller_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/pid_controller_test: $(PROTOBUF_DEP) $(PID_CONTROLLER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(PID_CONTROLLER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/pid_controller_test endif endif $(OBJDIR)/$(CONFIG)/test/core/transport/pid_controller_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_pid_controller_test: $(PID_CONTROLLER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(PID_CONTROLLER_TEST_OBJS:.o=.dep) endif endif PORT_SHARING_END2END_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/port_sharing_end2end_test.cc \ test/cpp/end2end/test_service_impl.cc \ PORT_SHARING_END2END_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(PORT_SHARING_END2END_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/port_sharing_end2end_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/port_sharing_end2end_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/port_sharing_end2end_test: $(PROTOBUF_DEP) $(PORT_SHARING_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(PORT_SHARING_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/port_sharing_end2end_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/port_sharing_end2end_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_port_sharing_end2end_test: $(PORT_SHARING_END2END_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(PORT_SHARING_END2END_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/port_sharing_end2end_test.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc PROTO_SERVER_REFLECTION_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/proto_server_reflection_test.cc \ test/cpp/end2end/test_service_impl.cc \ test/cpp/util/proto_reflection_descriptor_database.cc \ PROTO_SERVER_REFLECTION_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(PROTO_SERVER_REFLECTION_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/proto_server_reflection_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/proto_server_reflection_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/proto_server_reflection_test: $(PROTOBUF_DEP) $(PROTO_SERVER_REFLECTION_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(PROTO_SERVER_REFLECTION_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/proto_server_reflection_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/duplicate/echo_duplicate.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/proto_server_reflection_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/util/proto_reflection_descriptor_database.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_proto_server_reflection_test: $(PROTO_SERVER_REFLECTION_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(PROTO_SERVER_REFLECTION_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/proto_server_reflection_test.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/proto_reflection_descriptor_database.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc PROTO_UTILS_TEST_SRC = \ test/cpp/codegen/proto_utils_test.cc \ PROTO_UTILS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(PROTO_UTILS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/proto_utils_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/proto_utils_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/proto_utils_test: $(PROTOBUF_DEP) $(PROTO_UTILS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(PROTO_UTILS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/proto_utils_test endif endif $(OBJDIR)/$(CONFIG)/test/cpp/codegen/proto_utils_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_proto_utils_test: $(PROTO_UTILS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(PROTO_UTILS_TEST_OBJS:.o=.dep) endif endif QPS_JSON_DRIVER_SRC = \ $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc \ src/cpp/util/core_stats.cc \ test/cpp/qps/benchmark_config.cc \ test/cpp/qps/client_async.cc \ test/cpp/qps/client_callback.cc \ test/cpp/qps/client_sync.cc \ test/cpp/qps/driver.cc \ test/cpp/qps/parse_json.cc \ test/cpp/qps/qps_json_driver.cc \ test/cpp/qps/qps_server_builder.cc \ test/cpp/qps/qps_worker.cc \ test/cpp/qps/report.cc \ test/cpp/qps/server_async.cc \ test/cpp/qps/server_callback.cc \ test/cpp/qps/server_sync.cc \ test/cpp/qps/usage_timer.cc \ QPS_JSON_DRIVER_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(QPS_JSON_DRIVER_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/qps_json_driver: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/qps_json_driver: protobuf_dep_error else $(BINDIR)/$(CONFIG)/qps_json_driver: $(PROTOBUF_DEP) $(QPS_JSON_DRIVER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(QPS_JSON_DRIVER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/qps_json_driver endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/core/stats.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/benchmark_service.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/control.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/payloads.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/report_qps_scenario_service.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/stats.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/worker_service.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/cpp/util/core_stats.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/qps/benchmark_config.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/qps/client_async.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/qps/client_callback.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/qps/client_sync.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/qps/driver.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/qps/parse_json.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/qps/qps_json_driver.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/qps/qps_server_builder.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/qps/qps_worker.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/qps/report.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/qps/server_async.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/qps/server_callback.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/qps/server_sync.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/qps/usage_timer.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_qps_json_driver: $(QPS_JSON_DRIVER_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(QPS_JSON_DRIVER_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/src/cpp/util/core_stats.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/qps/benchmark_config.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/qps/client_async.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/qps/client_callback.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/qps/client_sync.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/qps/driver.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/qps/parse_json.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/qps/qps_json_driver.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/qps/qps_server_builder.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/qps/qps_worker.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/qps/report.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/qps/server_async.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/qps/server_callback.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/qps/server_sync.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/qps/usage_timer.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.pb.cc $(GENDIR)/src/proto/grpc/testing/report_qps_scenario_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc QPS_WORKER_SRC = \ $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc \ src/cpp/util/core_stats.cc \ test/cpp/qps/client_async.cc \ test/cpp/qps/client_callback.cc \ test/cpp/qps/client_sync.cc \ test/cpp/qps/qps_server_builder.cc \ test/cpp/qps/qps_worker.cc \ test/cpp/qps/server_async.cc \ test/cpp/qps/server_callback.cc \ test/cpp/qps/server_sync.cc \ test/cpp/qps/usage_timer.cc \ test/cpp/qps/worker.cc \ QPS_WORKER_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(QPS_WORKER_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/qps_worker: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/qps_worker: protobuf_dep_error else $(BINDIR)/$(CONFIG)/qps_worker: $(PROTOBUF_DEP) $(QPS_WORKER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(QPS_WORKER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/qps_worker endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/core/stats.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/benchmark_service.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/control.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/payloads.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/stats.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/worker_service.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/cpp/util/core_stats.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/qps/client_async.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/qps/client_callback.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/qps/client_sync.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/qps/qps_server_builder.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/qps/qps_worker.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/qps/server_async.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/qps/server_callback.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/qps/server_sync.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/qps/usage_timer.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/qps/worker.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_qps_worker: $(QPS_WORKER_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(QPS_WORKER_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/src/cpp/util/core_stats.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/qps/client_async.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/qps/client_callback.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/qps/client_sync.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/qps/qps_server_builder.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/qps/qps_worker.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/qps/server_async.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/qps/server_callback.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/qps/server_sync.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/qps/usage_timer.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/qps/worker.o: $(GENDIR)/src/proto/grpc/core/stats.pb.cc $(GENDIR)/src/proto/grpc/core/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.pb.cc $(GENDIR)/src/proto/grpc/testing/benchmark_service.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.pb.cc $(GENDIR)/src/proto/grpc/testing/worker_service.grpc.pb.cc RAW_END2END_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/raw_end2end_test.cc \ test/cpp/end2end/test_service_impl.cc \ RAW_END2END_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(RAW_END2END_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/raw_end2end_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/raw_end2end_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/raw_end2end_test: $(PROTOBUF_DEP) $(RAW_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(RAW_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/raw_end2end_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/duplicate/echo_duplicate.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/raw_end2end_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_raw_end2end_test: $(RAW_END2END_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(RAW_END2END_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/raw_end2end_test.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc REF_COUNTED_PTR_TEST_SRC = \ test/core/gprpp/ref_counted_ptr_test.cc \ REF_COUNTED_PTR_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(REF_COUNTED_PTR_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/ref_counted_ptr_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/ref_counted_ptr_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/ref_counted_ptr_test: $(PROTOBUF_DEP) $(REF_COUNTED_PTR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(REF_COUNTED_PTR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/ref_counted_ptr_test endif endif $(OBJDIR)/$(CONFIG)/test/core/gprpp/ref_counted_ptr_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_ref_counted_ptr_test: $(REF_COUNTED_PTR_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(REF_COUNTED_PTR_TEST_OBJS:.o=.dep) endif endif REF_COUNTED_TEST_SRC = \ test/core/gprpp/ref_counted_test.cc \ REF_COUNTED_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(REF_COUNTED_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/ref_counted_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/ref_counted_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/ref_counted_test: $(PROTOBUF_DEP) $(REF_COUNTED_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(REF_COUNTED_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/ref_counted_test endif endif $(OBJDIR)/$(CONFIG)/test/core/gprpp/ref_counted_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_ref_counted_test: $(REF_COUNTED_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(REF_COUNTED_TEST_OBJS:.o=.dep) endif endif RETRY_THROTTLE_TEST_SRC = \ test/core/client_channel/retry_throttle_test.cc \ RETRY_THROTTLE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(RETRY_THROTTLE_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/retry_throttle_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/retry_throttle_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/retry_throttle_test: $(PROTOBUF_DEP) $(RETRY_THROTTLE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(RETRY_THROTTLE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/retry_throttle_test endif endif $(OBJDIR)/$(CONFIG)/test/core/client_channel/retry_throttle_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_retry_throttle_test: $(RETRY_THROTTLE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(RETRY_THROTTLE_TEST_OBJS:.o=.dep) endif endif SECURE_AUTH_CONTEXT_TEST_SRC = \ test/cpp/common/secure_auth_context_test.cc \ SECURE_AUTH_CONTEXT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SECURE_AUTH_CONTEXT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/secure_auth_context_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/secure_auth_context_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/secure_auth_context_test: $(PROTOBUF_DEP) $(SECURE_AUTH_CONTEXT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SECURE_AUTH_CONTEXT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/secure_auth_context_test endif endif $(OBJDIR)/$(CONFIG)/test/cpp/common/secure_auth_context_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_secure_auth_context_test: $(SECURE_AUTH_CONTEXT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SECURE_AUTH_CONTEXT_TEST_OBJS:.o=.dep) endif endif SERVER_BUILDER_PLUGIN_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/server_builder_plugin_test.cc \ test/cpp/end2end/test_service_impl.cc \ SERVER_BUILDER_PLUGIN_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SERVER_BUILDER_PLUGIN_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/server_builder_plugin_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/server_builder_plugin_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/server_builder_plugin_test: $(PROTOBUF_DEP) $(SERVER_BUILDER_PLUGIN_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SERVER_BUILDER_PLUGIN_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/server_builder_plugin_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/duplicate/echo_duplicate.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/server_builder_plugin_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_server_builder_plugin_test: $(SERVER_BUILDER_PLUGIN_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SERVER_BUILDER_PLUGIN_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/server_builder_plugin_test.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc SERVER_BUILDER_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/server/server_builder_test.cc \ SERVER_BUILDER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SERVER_BUILDER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/server_builder_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/server_builder_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/server_builder_test: $(PROTOBUF_DEP) $(SERVER_BUILDER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SERVER_BUILDER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/server_builder_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/server/server_builder_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_server_builder_test: $(SERVER_BUILDER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SERVER_BUILDER_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/server/server_builder_test.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc SERVER_BUILDER_WITH_SOCKET_MUTATOR_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/server/server_builder_with_socket_mutator_test.cc \ SERVER_BUILDER_WITH_SOCKET_MUTATOR_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SERVER_BUILDER_WITH_SOCKET_MUTATOR_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/server_builder_with_socket_mutator_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/server_builder_with_socket_mutator_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/server_builder_with_socket_mutator_test: $(PROTOBUF_DEP) $(SERVER_BUILDER_WITH_SOCKET_MUTATOR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SERVER_BUILDER_WITH_SOCKET_MUTATOR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/server_builder_with_socket_mutator_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/server/server_builder_with_socket_mutator_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_server_builder_with_socket_mutator_test: $(SERVER_BUILDER_WITH_SOCKET_MUTATOR_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SERVER_BUILDER_WITH_SOCKET_MUTATOR_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/server/server_builder_with_socket_mutator_test.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc SERVER_CONTEXT_TEST_SPOUSE_TEST_SRC = \ test/cpp/test/server_context_test_spouse_test.cc \ SERVER_CONTEXT_TEST_SPOUSE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SERVER_CONTEXT_TEST_SPOUSE_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/server_context_test_spouse_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/server_context_test_spouse_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/server_context_test_spouse_test: $(PROTOBUF_DEP) $(SERVER_CONTEXT_TEST_SPOUSE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SERVER_CONTEXT_TEST_SPOUSE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/server_context_test_spouse_test endif endif $(OBJDIR)/$(CONFIG)/test/cpp/test/server_context_test_spouse_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_server_context_test_spouse_test: $(SERVER_CONTEXT_TEST_SPOUSE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SERVER_CONTEXT_TEST_SPOUSE_TEST_OBJS:.o=.dep) endif endif SERVER_EARLY_RETURN_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/server_early_return_test.cc \ SERVER_EARLY_RETURN_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SERVER_EARLY_RETURN_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/server_early_return_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/server_early_return_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/server_early_return_test: $(PROTOBUF_DEP) $(SERVER_EARLY_RETURN_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SERVER_EARLY_RETURN_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/server_early_return_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/server_early_return_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_server_early_return_test: $(SERVER_EARLY_RETURN_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SERVER_EARLY_RETURN_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/server_early_return_test.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc SERVER_FUZZER_SRC = \ test/core/end2end/fuzzers/server_fuzzer.cc \ test/core/util/fuzzer_corpus_test.cc \ SERVER_FUZZER_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SERVER_FUZZER_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/server_fuzzer: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/server_fuzzer: protobuf_dep_error else $(BINDIR)/$(CONFIG)/server_fuzzer: $(PROTOBUF_DEP) $(SERVER_FUZZER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SERVER_FUZZER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -lFuzzer -o $(BINDIR)/$(CONFIG)/server_fuzzer endif endif $(OBJDIR)/$(CONFIG)/test/core/end2end/fuzzers/server_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/fuzzer_corpus_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_server_fuzzer: $(SERVER_FUZZER_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SERVER_FUZZER_OBJS:.o=.dep) endif endif SERVER_INTERCEPTORS_END2END_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/interceptors_util.cc \ test/cpp/end2end/server_interceptors_end2end_test.cc \ test/cpp/end2end/test_service_impl.cc \ SERVER_INTERCEPTORS_END2END_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SERVER_INTERCEPTORS_END2END_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/server_interceptors_end2end_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/server_interceptors_end2end_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/server_interceptors_end2end_test: $(PROTOBUF_DEP) $(SERVER_INTERCEPTORS_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SERVER_INTERCEPTORS_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/server_interceptors_end2end_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/interceptors_util.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/server_interceptors_end2end_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_server_interceptors_end2end_test: $(SERVER_INTERCEPTORS_END2END_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SERVER_INTERCEPTORS_END2END_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/interceptors_util.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/server_interceptors_end2end_test.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc SERVER_REGISTERED_METHOD_BAD_CLIENT_TEST_SRC = \ test/core/bad_client/bad_client.cc \ test/core/bad_client/tests/server_registered_method.cc \ test/core/end2end/cq_verifier.cc \ SERVER_REGISTERED_METHOD_BAD_CLIENT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SERVER_REGISTERED_METHOD_BAD_CLIENT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/server_registered_method_bad_client_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/server_registered_method_bad_client_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/server_registered_method_bad_client_test: $(PROTOBUF_DEP) $(SERVER_REGISTERED_METHOD_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SERVER_REGISTERED_METHOD_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/server_registered_method_bad_client_test endif endif $(OBJDIR)/$(CONFIG)/test/core/bad_client/bad_client.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/bad_client/tests/server_registered_method.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_server_registered_method_bad_client_test: $(SERVER_REGISTERED_METHOD_BAD_CLIENT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SERVER_REGISTERED_METHOD_BAD_CLIENT_TEST_OBJS:.o=.dep) endif endif SERVER_REQUEST_CALL_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/server/server_request_call_test.cc \ SERVER_REQUEST_CALL_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SERVER_REQUEST_CALL_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/server_request_call_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/server_request_call_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/server_request_call_test: $(PROTOBUF_DEP) $(SERVER_REQUEST_CALL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SERVER_REQUEST_CALL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/server_request_call_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/server/server_request_call_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_server_request_call_test: $(SERVER_REQUEST_CALL_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SERVER_REQUEST_CALL_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/server/server_request_call_test.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc SERVICE_CONFIG_END2END_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/service_config_end2end_test.cc \ test/cpp/end2end/test_service_impl.cc \ SERVICE_CONFIG_END2END_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SERVICE_CONFIG_END2END_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/service_config_end2end_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/service_config_end2end_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/service_config_end2end_test: $(PROTOBUF_DEP) $(SERVICE_CONFIG_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SERVICE_CONFIG_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/service_config_end2end_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/duplicate/echo_duplicate.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/service_config_end2end_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_service_config_end2end_test: $(SERVICE_CONFIG_END2END_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SERVICE_CONFIG_END2END_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/service_config_end2end_test.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc SERVICE_CONFIG_TEST_SRC = \ test/core/client_channel/service_config_test.cc \ SERVICE_CONFIG_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SERVICE_CONFIG_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/service_config_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/service_config_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/service_config_test: $(PROTOBUF_DEP) $(SERVICE_CONFIG_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SERVICE_CONFIG_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/service_config_test endif endif $(OBJDIR)/$(CONFIG)/test/core/client_channel/service_config_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_service_config_test: $(SERVICE_CONFIG_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SERVICE_CONFIG_TEST_OBJS:.o=.dep) endif endif SETTINGS_TIMEOUT_TEST_SRC = \ test/core/transport/chttp2/settings_timeout_test.cc \ SETTINGS_TIMEOUT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SETTINGS_TIMEOUT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/settings_timeout_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/settings_timeout_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/settings_timeout_test: $(PROTOBUF_DEP) $(SETTINGS_TIMEOUT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SETTINGS_TIMEOUT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/settings_timeout_test endif endif $(OBJDIR)/$(CONFIG)/test/core/transport/chttp2/settings_timeout_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_settings_timeout_test: $(SETTINGS_TIMEOUT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SETTINGS_TIMEOUT_TEST_OBJS:.o=.dep) endif endif SHUTDOWN_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/shutdown_test.cc \ SHUTDOWN_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SHUTDOWN_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/shutdown_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/shutdown_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/shutdown_test: $(PROTOBUF_DEP) $(SHUTDOWN_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SHUTDOWN_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/shutdown_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/duplicate/echo_duplicate.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/shutdown_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_shutdown_test: $(SHUTDOWN_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SHUTDOWN_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/shutdown_test.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc SIMPLE_REQUEST_BAD_CLIENT_TEST_SRC = \ test/core/bad_client/bad_client.cc \ test/core/bad_client/tests/simple_request.cc \ test/core/end2end/cq_verifier.cc \ SIMPLE_REQUEST_BAD_CLIENT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SIMPLE_REQUEST_BAD_CLIENT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/simple_request_bad_client_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/simple_request_bad_client_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/simple_request_bad_client_test: $(PROTOBUF_DEP) $(SIMPLE_REQUEST_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SIMPLE_REQUEST_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/simple_request_bad_client_test endif endif $(OBJDIR)/$(CONFIG)/test/core/bad_client/bad_client.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/bad_client/tests/simple_request.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_simple_request_bad_client_test: $(SIMPLE_REQUEST_BAD_CLIENT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SIMPLE_REQUEST_BAD_CLIENT_TEST_OBJS:.o=.dep) endif endif SLICE_HASH_TABLE_TEST_SRC = \ test/core/slice/slice_hash_table_test.cc \ SLICE_HASH_TABLE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SLICE_HASH_TABLE_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/slice_hash_table_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/slice_hash_table_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/slice_hash_table_test: $(PROTOBUF_DEP) $(SLICE_HASH_TABLE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SLICE_HASH_TABLE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/slice_hash_table_test endif endif $(OBJDIR)/$(CONFIG)/test/core/slice/slice_hash_table_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_slice_hash_table_test: $(SLICE_HASH_TABLE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SLICE_HASH_TABLE_TEST_OBJS:.o=.dep) endif endif SLICE_WEAK_HASH_TABLE_TEST_SRC = \ test/core/slice/slice_weak_hash_table_test.cc \ SLICE_WEAK_HASH_TABLE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SLICE_WEAK_HASH_TABLE_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/slice_weak_hash_table_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/slice_weak_hash_table_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/slice_weak_hash_table_test: $(PROTOBUF_DEP) $(SLICE_WEAK_HASH_TABLE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SLICE_WEAK_HASH_TABLE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/slice_weak_hash_table_test endif endif $(OBJDIR)/$(CONFIG)/test/core/slice/slice_weak_hash_table_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_slice_weak_hash_table_test: $(SLICE_WEAK_HASH_TABLE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SLICE_WEAK_HASH_TABLE_TEST_OBJS:.o=.dep) endif endif SSL_SERVER_FUZZER_SRC = \ test/core/security/ssl_server_fuzzer.cc \ test/core/util/fuzzer_corpus_test.cc \ SSL_SERVER_FUZZER_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SSL_SERVER_FUZZER_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/ssl_server_fuzzer: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/ssl_server_fuzzer: protobuf_dep_error else $(BINDIR)/$(CONFIG)/ssl_server_fuzzer: $(PROTOBUF_DEP) $(SSL_SERVER_FUZZER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SSL_SERVER_FUZZER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -lFuzzer -o $(BINDIR)/$(CONFIG)/ssl_server_fuzzer endif endif $(OBJDIR)/$(CONFIG)/test/core/security/ssl_server_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/fuzzer_corpus_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_ssl_server_fuzzer: $(SSL_SERVER_FUZZER_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SSL_SERVER_FUZZER_OBJS:.o=.dep) endif endif STATIC_METADATA_TEST_SRC = \ test/core/transport/static_metadata_test.cc \ STATIC_METADATA_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(STATIC_METADATA_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/static_metadata_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/static_metadata_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/static_metadata_test: $(PROTOBUF_DEP) $(STATIC_METADATA_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(STATIC_METADATA_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/static_metadata_test endif endif $(OBJDIR)/$(CONFIG)/test/core/transport/static_metadata_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_static_metadata_test: $(STATIC_METADATA_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(STATIC_METADATA_TEST_OBJS:.o=.dep) endif endif STATS_TEST_SRC = \ test/core/debug/stats_test.cc \ STATS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(STATS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/stats_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/stats_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/stats_test: $(PROTOBUF_DEP) $(STATS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(STATS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/stats_test endif endif $(OBJDIR)/$(CONFIG)/test/core/debug/stats_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_stats_test: $(STATS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(STATS_TEST_OBJS:.o=.dep) endif endif STATUS_METADATA_TEST_SRC = \ test/core/transport/status_metadata_test.cc \ STATUS_METADATA_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(STATUS_METADATA_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/status_metadata_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/status_metadata_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/status_metadata_test: $(PROTOBUF_DEP) $(STATUS_METADATA_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(STATUS_METADATA_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/status_metadata_test endif endif $(OBJDIR)/$(CONFIG)/test/core/transport/status_metadata_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_status_metadata_test: $(STATUS_METADATA_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(STATUS_METADATA_TEST_OBJS:.o=.dep) endif endif STATUS_UTIL_TEST_SRC = \ test/core/channel/status_util_test.cc \ STATUS_UTIL_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(STATUS_UTIL_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/status_util_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/status_util_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/status_util_test: $(PROTOBUF_DEP) $(STATUS_UTIL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(STATUS_UTIL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/status_util_test endif endif $(OBJDIR)/$(CONFIG)/test/core/channel/status_util_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_status_util_test: $(STATUS_UTIL_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(STATUS_UTIL_TEST_OBJS:.o=.dep) endif endif STREAMING_THROUGHPUT_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/streaming_throughput_test.cc \ STREAMING_THROUGHPUT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(STREAMING_THROUGHPUT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/streaming_throughput_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/streaming_throughput_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/streaming_throughput_test: $(PROTOBUF_DEP) $(STREAMING_THROUGHPUT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(STREAMING_THROUGHPUT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/streaming_throughput_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/duplicate/echo_duplicate.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/streaming_throughput_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_streaming_throughput_test: $(STREAMING_THROUGHPUT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(STREAMING_THROUGHPUT_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/streaming_throughput_test.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc STRING_REF_TEST_SRC = \ test/cpp/util/string_ref_test.cc \ STRING_REF_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(STRING_REF_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/string_ref_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/string_ref_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/string_ref_test: $(PROTOBUF_DEP) $(STRING_REF_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(STRING_REF_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/string_ref_test endif endif $(OBJDIR)/$(CONFIG)/test/cpp/util/string_ref_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_string_ref_test: $(STRING_REF_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(STRING_REF_TEST_OBJS:.o=.dep) endif endif TEST_CPP_CLIENT_CREDENTIALS_TEST_SRC = \ test/cpp/client/credentials_test.cc \ TEST_CPP_CLIENT_CREDENTIALS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(TEST_CPP_CLIENT_CREDENTIALS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/test_cpp_client_credentials_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/test_cpp_client_credentials_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/test_cpp_client_credentials_test: $(PROTOBUF_DEP) $(TEST_CPP_CLIENT_CREDENTIALS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(TEST_CPP_CLIENT_CREDENTIALS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/test_cpp_client_credentials_test endif endif $(OBJDIR)/$(CONFIG)/test/cpp/client/credentials_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_test_cpp_client_credentials_test: $(TEST_CPP_CLIENT_CREDENTIALS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(TEST_CPP_CLIENT_CREDENTIALS_TEST_OBJS:.o=.dep) endif endif TEST_CPP_UTIL_SLICE_TEST_SRC = \ test/cpp/util/slice_test.cc \ TEST_CPP_UTIL_SLICE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(TEST_CPP_UTIL_SLICE_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/test_cpp_util_slice_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/test_cpp_util_slice_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/test_cpp_util_slice_test: $(PROTOBUF_DEP) $(TEST_CPP_UTIL_SLICE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(TEST_CPP_UTIL_SLICE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/test_cpp_util_slice_test endif endif $(OBJDIR)/$(CONFIG)/test/cpp/util/slice_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_test_cpp_util_slice_test: $(TEST_CPP_UTIL_SLICE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(TEST_CPP_UTIL_SLICE_TEST_OBJS:.o=.dep) endif endif TEST_CPP_UTIL_TIME_TEST_SRC = \ test/cpp/util/time_test.cc \ TEST_CPP_UTIL_TIME_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(TEST_CPP_UTIL_TIME_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/test_cpp_util_time_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/test_cpp_util_time_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/test_cpp_util_time_test: $(PROTOBUF_DEP) $(TEST_CPP_UTIL_TIME_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(TEST_CPP_UTIL_TIME_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/test_cpp_util_time_test endif endif $(OBJDIR)/$(CONFIG)/test/cpp/util/time_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_test_cpp_util_time_test: $(TEST_CPP_UTIL_TIME_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(TEST_CPP_UTIL_TIME_TEST_OBJS:.o=.dep) endif endif THREAD_MANAGER_TEST_SRC = \ test/cpp/thread_manager/thread_manager_test.cc \ THREAD_MANAGER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(THREAD_MANAGER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/thread_manager_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/thread_manager_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/thread_manager_test: $(PROTOBUF_DEP) $(THREAD_MANAGER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(THREAD_MANAGER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/thread_manager_test endif endif $(OBJDIR)/$(CONFIG)/test/cpp/thread_manager/thread_manager_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_thread_manager_test: $(THREAD_MANAGER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(THREAD_MANAGER_TEST_OBJS:.o=.dep) endif endif THREAD_STRESS_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/cpp/end2end/thread_stress_test.cc \ THREAD_STRESS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(THREAD_STRESS_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/thread_stress_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/thread_stress_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/thread_stress_test: $(PROTOBUF_DEP) $(THREAD_STRESS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(THREAD_STRESS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/thread_stress_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/duplicate/echo_duplicate.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/thread_stress_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_thread_stress_test: $(THREAD_STRESS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(THREAD_STRESS_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/thread_stress_test.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc TIME_JUMP_TEST_SRC = \ test/cpp/common/time_jump_test.cc \ TIME_JUMP_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(TIME_JUMP_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/time_jump_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/time_jump_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/time_jump_test: $(PROTOBUF_DEP) $(TIME_JUMP_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(TIME_JUMP_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/time_jump_test endif endif $(OBJDIR)/$(CONFIG)/test/cpp/common/time_jump_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_time_jump_test: $(TIME_JUMP_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(TIME_JUMP_TEST_OBJS:.o=.dep) endif endif TIMER_TEST_SRC = \ test/cpp/common/timer_test.cc \ TIMER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(TIMER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/timer_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/timer_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/timer_test: $(PROTOBUF_DEP) $(TIMER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(TIMER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/timer_test endif endif $(OBJDIR)/$(CONFIG)/test/cpp/common/timer_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_timer_test: $(TIMER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(TIMER_TEST_OBJS:.o=.dep) endif endif TLS_SECURITY_CONNECTOR_TEST_SRC = \ test/core/security/tls_security_connector_test.cc \ TLS_SECURITY_CONNECTOR_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(TLS_SECURITY_CONNECTOR_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/tls_security_connector_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/tls_security_connector_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/tls_security_connector_test: $(PROTOBUF_DEP) $(TLS_SECURITY_CONNECTOR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(TLS_SECURITY_CONNECTOR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/tls_security_connector_test endif endif $(OBJDIR)/$(CONFIG)/test/core/security/tls_security_connector_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_tls_security_connector_test: $(TLS_SECURITY_CONNECTOR_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(TLS_SECURITY_CONNECTOR_TEST_OBJS:.o=.dep) endif endif UNKNOWN_FRAME_BAD_CLIENT_TEST_SRC = \ test/core/bad_client/bad_client.cc \ test/core/bad_client/tests/unknown_frame.cc \ test/core/end2end/cq_verifier.cc \ UNKNOWN_FRAME_BAD_CLIENT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(UNKNOWN_FRAME_BAD_CLIENT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/unknown_frame_bad_client_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/unknown_frame_bad_client_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/unknown_frame_bad_client_test: $(PROTOBUF_DEP) $(UNKNOWN_FRAME_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(UNKNOWN_FRAME_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/unknown_frame_bad_client_test endif endif $(OBJDIR)/$(CONFIG)/test/core/bad_client/bad_client.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/bad_client/tests/unknown_frame.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_unknown_frame_bad_client_test: $(UNKNOWN_FRAME_BAD_CLIENT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(UNKNOWN_FRAME_BAD_CLIENT_TEST_OBJS:.o=.dep) endif endif URI_FUZZER_TEST_SRC = \ test/core/client_channel/uri_fuzzer_test.cc \ test/core/util/fuzzer_corpus_test.cc \ URI_FUZZER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(URI_FUZZER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/uri_fuzzer_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/uri_fuzzer_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/uri_fuzzer_test: $(PROTOBUF_DEP) $(URI_FUZZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(URI_FUZZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -lFuzzer -o $(BINDIR)/$(CONFIG)/uri_fuzzer_test endif endif $(OBJDIR)/$(CONFIG)/test/core/client_channel/uri_fuzzer_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/fuzzer_corpus_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_uri_fuzzer_test: $(URI_FUZZER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(URI_FUZZER_TEST_OBJS:.o=.dep) endif endif WINDOW_OVERFLOW_BAD_CLIENT_TEST_SRC = \ test/core/bad_client/bad_client.cc \ test/core/bad_client/tests/window_overflow.cc \ test/core/end2end/cq_verifier.cc \ WINDOW_OVERFLOW_BAD_CLIENT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(WINDOW_OVERFLOW_BAD_CLIENT_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/window_overflow_bad_client_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/window_overflow_bad_client_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/window_overflow_bad_client_test: $(PROTOBUF_DEP) $(WINDOW_OVERFLOW_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(WINDOW_OVERFLOW_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/window_overflow_bad_client_test endif endif $(OBJDIR)/$(CONFIG)/test/core/bad_client/bad_client.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/bad_client/tests/window_overflow.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/end2end/cq_verifier.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_window_overflow_bad_client_test: $(WINDOW_OVERFLOW_BAD_CLIENT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(WINDOW_OVERFLOW_BAD_CLIENT_TEST_OBJS:.o=.dep) endif endif WORK_SERIALIZER_TEST_SRC = \ test/core/iomgr/work_serializer_test.cc \ WORK_SERIALIZER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(WORK_SERIALIZER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/work_serializer_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/work_serializer_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/work_serializer_test: $(PROTOBUF_DEP) $(WORK_SERIALIZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(WORK_SERIALIZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/work_serializer_test endif endif $(OBJDIR)/$(CONFIG)/test/core/iomgr/work_serializer_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_work_serializer_test: $(WORK_SERIALIZER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(WORK_SERIALIZER_TEST_OBJS:.o=.dep) endif endif WRITES_PER_RPC_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ test/core/util/cmdline.cc \ test/core/util/debugger_macros.cc \ test/core/util/fuzzer_util.cc \ test/core/util/grpc_profiler.cc \ test/core/util/histogram.cc \ test/core/util/memory_counters.cc \ test/core/util/mock_endpoint.cc \ test/core/util/parse_hexstring.cc \ test/core/util/passthru_endpoint.cc \ test/core/util/port.cc \ test/core/util/port_isolated_runtime_environment.cc \ test/core/util/port_server_client.cc \ test/core/util/reconnect_server.cc \ test/core/util/slice_splitter.cc \ test/core/util/subprocess_posix.cc \ test/core/util/subprocess_windows.cc \ test/core/util/test_config.cc \ test/core/util/test_tcp_server.cc \ test/core/util/tracer_util.cc \ test/core/util/trickle_endpoint.cc \ test/cpp/performance/writes_per_rpc_test.cc \ WRITES_PER_RPC_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(WRITES_PER_RPC_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/writes_per_rpc_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/writes_per_rpc_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/writes_per_rpc_test: $(PROTOBUF_DEP) $(WRITES_PER_RPC_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(WRITES_PER_RPC_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/writes_per_rpc_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/cmdline.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/debugger_macros.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/fuzzer_util.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/grpc_profiler.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/histogram.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/memory_counters.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/mock_endpoint.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/parse_hexstring.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/passthru_endpoint.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/port.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/port_isolated_runtime_environment.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/port_server_client.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/reconnect_server.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/slice_splitter.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/subprocess_posix.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/subprocess_windows.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/test_config.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/test_tcp_server.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/tracer_util.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/trickle_endpoint.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/performance/writes_per_rpc_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_writes_per_rpc_test: $(WRITES_PER_RPC_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(WRITES_PER_RPC_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/core/util/cmdline.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/core/util/debugger_macros.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/core/util/fuzzer_util.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/core/util/grpc_profiler.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/core/util/histogram.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/core/util/memory_counters.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/core/util/mock_endpoint.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/core/util/parse_hexstring.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/core/util/passthru_endpoint.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/core/util/port.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/core/util/port_isolated_runtime_environment.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/core/util/port_server_client.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/core/util/reconnect_server.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/core/util/slice_splitter.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/core/util/subprocess_posix.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/core/util/subprocess_windows.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/core/util/test_config.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/core/util/test_tcp_server.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/core/util/tracer_util.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/core/util/trickle_endpoint.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/performance/writes_per_rpc_test.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc XDS_BOOTSTRAP_TEST_SRC = \ test/core/client_channel/xds_bootstrap_test.cc \ XDS_BOOTSTRAP_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(XDS_BOOTSTRAP_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/xds_bootstrap_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/xds_bootstrap_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/xds_bootstrap_test: $(PROTOBUF_DEP) $(XDS_BOOTSTRAP_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(XDS_BOOTSTRAP_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/xds_bootstrap_test endif endif $(OBJDIR)/$(CONFIG)/test/core/client_channel/xds_bootstrap_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_xds_bootstrap_test: $(XDS_BOOTSTRAP_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(XDS_BOOTSTRAP_TEST_OBJS:.o=.dep) endif endif XDS_END2END_TEST_SRC = \ $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/xds/ads_for_test.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/ads_for_test.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/xds/cds_for_test.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/cds_for_test.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/xds/eds_for_test.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/eds_for_test.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/xds/lds_rds_for_test.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/lds_rds_for_test.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/xds/lrs_for_test.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/lrs_for_test.grpc.pb.cc \ test/cpp/end2end/test_service_impl.cc \ test/cpp/end2end/xds_end2end_test.cc \ XDS_END2END_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(XDS_END2END_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/xds_end2end_test: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/xds_end2end_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/xds_end2end_test: $(PROTOBUF_DEP) $(XDS_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(XDS_END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/xds_end2end_test endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/duplicate/echo_duplicate.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/simple_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/xds/ads_for_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/xds/cds_for_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/xds/eds_for_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/xds/lds_rds_for_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/xds/lrs_for_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/end2end/xds_end2end_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_xds_end2end_test: $(XDS_END2END_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(XDS_END2END_TEST_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/end2end/test_service_impl.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/ads_for_test.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/ads_for_test.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/cds_for_test.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/cds_for_test.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/eds_for_test.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/eds_for_test.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/lds_rds_for_test.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/lds_rds_for_test.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/lrs_for_test.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/lrs_for_test.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/end2end/xds_end2end_test.o: $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/simple_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/ads_for_test.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/ads_for_test.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/cds_for_test.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/cds_for_test.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/eds_for_test.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/eds_for_test.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/lds_rds_for_test.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/lds_rds_for_test.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/lrs_for_test.pb.cc $(GENDIR)/src/proto/grpc/testing/xds/lrs_for_test.grpc.pb.cc XDS_INTEROP_CLIENT_SRC = \ $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/test.pb.cc $(GENDIR)/src/proto/grpc/testing/test.grpc.pb.cc \ test/cpp/interop/xds_interop_client.cc \ XDS_INTEROP_CLIENT_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(XDS_INTEROP_CLIENT_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/xds_interop_client: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/xds_interop_client: protobuf_dep_error else $(BINDIR)/$(CONFIG)/xds_interop_client: $(PROTOBUF_DEP) $(XDS_INTEROP_CLIENT_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(XDS_INTEROP_CLIENT_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/xds_interop_client endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/empty.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/messages.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/interop/xds_interop_client.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_xds_interop_client: $(XDS_INTEROP_CLIENT_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(XDS_INTEROP_CLIENT_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/interop/xds_interop_client.o: $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/test.pb.cc $(GENDIR)/src/proto/grpc/testing/test.grpc.pb.cc XDS_INTEROP_SERVER_SRC = \ $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc \ $(GENDIR)/src/proto/grpc/testing/test.pb.cc $(GENDIR)/src/proto/grpc/testing/test.grpc.pb.cc \ test/cpp/interop/xds_interop_server.cc \ XDS_INTEROP_SERVER_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(XDS_INTEROP_SERVER_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/xds_interop_server: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/xds_interop_server: protobuf_dep_error else $(BINDIR)/$(CONFIG)/xds_interop_server: $(PROTOBUF_DEP) $(XDS_INTEROP_SERVER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(XDS_INTEROP_SERVER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/xds_interop_server endif endif $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/empty.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/messages.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/cpp/interop/xds_interop_server.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_xds_interop_server: $(XDS_INTEROP_SERVER_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(XDS_INTEROP_SERVER_OBJS:.o=.dep) endif endif $(OBJDIR)/$(CONFIG)/test/cpp/interop/xds_interop_server.o: $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/test.pb.cc $(GENDIR)/src/proto/grpc/testing/test.grpc.pb.cc BORINGSSL_SSL_TEST_SRC = \ third_party/boringssl-with-bazel/src/crypto/test/abi_test.cc \ third_party/boringssl-with-bazel/src/crypto/test/gtest_main.cc \ third_party/boringssl-with-bazel/src/ssl/span_test.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_c_test.c \ third_party/boringssl-with-bazel/src/ssl/ssl_test.cc \ BORINGSSL_SSL_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BORINGSSL_SSL_TEST_SRC)))) # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment $(BORINGSSL_SSL_TEST_OBJS): CFLAGS := -Ithird_party/boringssl-with-bazel/src/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_SSL_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl-with-bazel/src/include $(CXXFLAGS) $(BORINGSSL_SSL_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/boringssl_ssl_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/boringssl_ssl_test: $(PROTOBUF_DEP) $(BORINGSSL_SSL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BORINGSSL_SSL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/boringssl_ssl_test endif $(BORINGSSL_SSL_TEST_OBJS): CPPFLAGS += -Ithird_party/boringssl-with-bazel/src/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX $(BORINGSSL_SSL_TEST_OBJS): CXXFLAGS += -fno-exceptions $(BORINGSSL_SSL_TEST_OBJS): CFLAGS += -g $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/test/abi_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/test/gtest_main.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/ssl/span_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/ssl/ssl_c_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/ssl/ssl_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a deps_boringssl_ssl_test: $(BORINGSSL_SSL_TEST_OBJS:.o=.dep) ifneq ($(NO_DEPS),true) -include $(BORINGSSL_SSL_TEST_OBJS:.o=.dep) endif BORINGSSL_CRYPTO_TEST_SRC = \ third_party/boringssl-with-bazel/crypto_test_data.cc \ third_party/boringssl-with-bazel/src/crypto/abi_self_test.cc \ third_party/boringssl-with-bazel/src/crypto/asn1/asn1_test.cc \ third_party/boringssl-with-bazel/src/crypto/base64/base64_test.cc \ third_party/boringssl-with-bazel/src/crypto/bio/bio_test.cc \ third_party/boringssl-with-bazel/src/crypto/buf/buf_test.cc \ third_party/boringssl-with-bazel/src/crypto/bytestring/bytestring_test.cc \ third_party/boringssl-with-bazel/src/crypto/chacha/chacha_test.cc \ third_party/boringssl-with-bazel/src/crypto/cipher_extra/aead_test.cc \ third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_test.cc \ third_party/boringssl-with-bazel/src/crypto/cmac/cmac_test.cc \ third_party/boringssl-with-bazel/src/crypto/compiler_test.cc \ third_party/boringssl-with-bazel/src/crypto/constant_time_test.cc \ third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux_test.cc \ third_party/boringssl-with-bazel/src/crypto/curve25519/ed25519_test.cc \ third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519_test.cc \ third_party/boringssl-with-bazel/src/crypto/curve25519/x25519_test.cc \ third_party/boringssl-with-bazel/src/crypto/dh/dh_test.cc \ third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_test.cc \ third_party/boringssl-with-bazel/src/crypto/dsa/dsa_test.cc \ third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_test.cc \ third_party/boringssl-with-bazel/src/crypto/err/err_test.cc \ third_party/boringssl-with-bazel/src/crypto/evp/evp_extra_test.cc \ third_party/boringssl-with-bazel/src/crypto/evp/evp_test.cc \ third_party/boringssl-with-bazel/src/crypto/evp/pbkdf_test.cc \ third_party/boringssl-with-bazel/src/crypto/evp/scrypt_test.cc \ third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_test.cc \ third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn_test.cc \ third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_test.cc \ third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64_test.cc \ third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa_test.cc \ third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5_test.cc \ third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_test.cc \ third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg_test.cc \ third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect_test.cc \ third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha_test.cc \ third_party/boringssl-with-bazel/src/crypto/hkdf/hkdf_test.cc \ third_party/boringssl-with-bazel/src/crypto/hmac_extra/hmac_test.cc \ third_party/boringssl-with-bazel/src/crypto/hrss/hrss_test.cc \ third_party/boringssl-with-bazel/src/crypto/impl_dispatch_test.cc \ third_party/boringssl-with-bazel/src/crypto/lhash/lhash_test.cc \ third_party/boringssl-with-bazel/src/crypto/obj/obj_test.cc \ third_party/boringssl-with-bazel/src/crypto/pem/pem_test.cc \ third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_test.cc \ third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs12_test.cc \ third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_test.cc \ third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_test.cc \ third_party/boringssl-with-bazel/src/crypto/pool/pool_test.cc \ third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_test.cc \ third_party/boringssl-with-bazel/src/crypto/refcount_test.cc \ third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_test.cc \ third_party/boringssl-with-bazel/src/crypto/self_test.cc \ third_party/boringssl-with-bazel/src/crypto/siphash/siphash_test.cc \ third_party/boringssl-with-bazel/src/crypto/stack/stack_test.cc \ third_party/boringssl-with-bazel/src/crypto/test/abi_test.cc \ third_party/boringssl-with-bazel/src/crypto/test/file_test_gtest.cc \ third_party/boringssl-with-bazel/src/crypto/test/gtest_main.cc \ third_party/boringssl-with-bazel/src/crypto/thread_test.cc \ third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token_test.cc \ third_party/boringssl-with-bazel/src/crypto/x509/x509_test.cc \ third_party/boringssl-with-bazel/src/crypto/x509/x509_time_test.cc \ third_party/boringssl-with-bazel/src/crypto/x509v3/tab_test.cc \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3name_test.cc \ BORINGSSL_CRYPTO_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BORINGSSL_CRYPTO_TEST_SRC)))) # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment $(BORINGSSL_CRYPTO_TEST_OBJS): CFLAGS := -Ithird_party/boringssl-with-bazel/src/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_CRYPTO_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl-with-bazel/src/include $(CXXFLAGS) $(BORINGSSL_CRYPTO_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/boringssl_crypto_test: protobuf_dep_error else $(BINDIR)/$(CONFIG)/boringssl_crypto_test: $(PROTOBUF_DEP) $(BORINGSSL_CRYPTO_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(BORINGSSL_CRYPTO_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/boringssl_crypto_test endif $(BORINGSSL_CRYPTO_TEST_OBJS): CPPFLAGS += -Ithird_party/boringssl-with-bazel/src/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX $(BORINGSSL_CRYPTO_TEST_OBJS): CXXFLAGS += -fno-exceptions $(BORINGSSL_CRYPTO_TEST_OBJS): CFLAGS += -g $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/crypto_test_data.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/abi_self_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/base64/base64_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/bio/bio_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/buf/buf_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/bytestring/bytestring_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/chacha/chacha_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/cipher_extra/aead_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/cmac/cmac_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/compiler_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/constant_time_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/curve25519/ed25519_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/curve25519/x25519_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/dh/dh_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/err/err_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/evp/evp_extra_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/evp/evp_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/evp/pbkdf_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/evp/scrypt_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/hkdf/hkdf_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/hmac_extra/hmac_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/hrss/hrss_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/impl_dispatch_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/lhash/lhash_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/obj/obj_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/pem/pem_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs12_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/pool/pool_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/refcount_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/self_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/siphash/siphash_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/stack/stack_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/test/abi_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/test/file_test_gtest.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/test/gtest_main.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/thread_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/x509/x509_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/x509/x509_time_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/x509v3/tab_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a $(OBJDIR)/$(CONFIG)/third_party/boringssl-with-bazel/src/crypto/x509v3/v3name_test.o: $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl.a deps_boringssl_crypto_test: $(BORINGSSL_CRYPTO_TEST_OBJS:.o=.dep) ifneq ($(NO_DEPS),true) -include $(BORINGSSL_CRYPTO_TEST_OBJS:.o=.dep) endif ALTS_CREDENTIALS_FUZZER_ONE_ENTRY_SRC = \ test/core/security/alts_credentials_fuzzer.cc \ test/core/util/one_corpus_entry_fuzzer.cc \ ALTS_CREDENTIALS_FUZZER_ONE_ENTRY_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ALTS_CREDENTIALS_FUZZER_ONE_ENTRY_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/alts_credentials_fuzzer_one_entry: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/alts_credentials_fuzzer_one_entry: protobuf_dep_error else $(BINDIR)/$(CONFIG)/alts_credentials_fuzzer_one_entry: $(PROTOBUF_DEP) $(ALTS_CREDENTIALS_FUZZER_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(ALTS_CREDENTIALS_FUZZER_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/alts_credentials_fuzzer_one_entry endif endif $(OBJDIR)/$(CONFIG)/test/core/security/alts_credentials_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/one_corpus_entry_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_alts_credentials_fuzzer_one_entry: $(ALTS_CREDENTIALS_FUZZER_ONE_ENTRY_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(ALTS_CREDENTIALS_FUZZER_ONE_ENTRY_OBJS:.o=.dep) endif endif CLIENT_FUZZER_ONE_ENTRY_SRC = \ test/core/end2end/fuzzers/client_fuzzer.cc \ test/core/util/one_corpus_entry_fuzzer.cc \ CLIENT_FUZZER_ONE_ENTRY_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CLIENT_FUZZER_ONE_ENTRY_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/client_fuzzer_one_entry: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/client_fuzzer_one_entry: protobuf_dep_error else $(BINDIR)/$(CONFIG)/client_fuzzer_one_entry: $(PROTOBUF_DEP) $(CLIENT_FUZZER_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(CLIENT_FUZZER_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/client_fuzzer_one_entry endif endif $(OBJDIR)/$(CONFIG)/test/core/end2end/fuzzers/client_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/one_corpus_entry_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_client_fuzzer_one_entry: $(CLIENT_FUZZER_ONE_ENTRY_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(CLIENT_FUZZER_ONE_ENTRY_OBJS:.o=.dep) endif endif HPACK_PARSER_FUZZER_TEST_ONE_ENTRY_SRC = \ test/core/transport/chttp2/hpack_parser_fuzzer_test.cc \ test/core/util/one_corpus_entry_fuzzer.cc \ HPACK_PARSER_FUZZER_TEST_ONE_ENTRY_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HPACK_PARSER_FUZZER_TEST_ONE_ENTRY_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/hpack_parser_fuzzer_test_one_entry: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/hpack_parser_fuzzer_test_one_entry: protobuf_dep_error else $(BINDIR)/$(CONFIG)/hpack_parser_fuzzer_test_one_entry: $(PROTOBUF_DEP) $(HPACK_PARSER_FUZZER_TEST_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(HPACK_PARSER_FUZZER_TEST_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/hpack_parser_fuzzer_test_one_entry endif endif $(OBJDIR)/$(CONFIG)/test/core/transport/chttp2/hpack_parser_fuzzer_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/one_corpus_entry_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_hpack_parser_fuzzer_test_one_entry: $(HPACK_PARSER_FUZZER_TEST_ONE_ENTRY_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(HPACK_PARSER_FUZZER_TEST_ONE_ENTRY_OBJS:.o=.dep) endif endif HTTP_REQUEST_FUZZER_TEST_ONE_ENTRY_SRC = \ test/core/http/request_fuzzer.cc \ test/core/util/one_corpus_entry_fuzzer.cc \ HTTP_REQUEST_FUZZER_TEST_ONE_ENTRY_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTP_REQUEST_FUZZER_TEST_ONE_ENTRY_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/http_request_fuzzer_test_one_entry: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/http_request_fuzzer_test_one_entry: protobuf_dep_error else $(BINDIR)/$(CONFIG)/http_request_fuzzer_test_one_entry: $(PROTOBUF_DEP) $(HTTP_REQUEST_FUZZER_TEST_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(HTTP_REQUEST_FUZZER_TEST_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/http_request_fuzzer_test_one_entry endif endif $(OBJDIR)/$(CONFIG)/test/core/http/request_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/one_corpus_entry_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_http_request_fuzzer_test_one_entry: $(HTTP_REQUEST_FUZZER_TEST_ONE_ENTRY_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(HTTP_REQUEST_FUZZER_TEST_ONE_ENTRY_OBJS:.o=.dep) endif endif HTTP_RESPONSE_FUZZER_TEST_ONE_ENTRY_SRC = \ test/core/http/response_fuzzer.cc \ test/core/util/one_corpus_entry_fuzzer.cc \ HTTP_RESPONSE_FUZZER_TEST_ONE_ENTRY_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTP_RESPONSE_FUZZER_TEST_ONE_ENTRY_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/http_response_fuzzer_test_one_entry: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/http_response_fuzzer_test_one_entry: protobuf_dep_error else $(BINDIR)/$(CONFIG)/http_response_fuzzer_test_one_entry: $(PROTOBUF_DEP) $(HTTP_RESPONSE_FUZZER_TEST_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(HTTP_RESPONSE_FUZZER_TEST_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/http_response_fuzzer_test_one_entry endif endif $(OBJDIR)/$(CONFIG)/test/core/http/response_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/one_corpus_entry_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_http_response_fuzzer_test_one_entry: $(HTTP_RESPONSE_FUZZER_TEST_ONE_ENTRY_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(HTTP_RESPONSE_FUZZER_TEST_ONE_ENTRY_OBJS:.o=.dep) endif endif JSON_FUZZER_TEST_ONE_ENTRY_SRC = \ test/core/json/fuzzer.cc \ test/core/util/one_corpus_entry_fuzzer.cc \ JSON_FUZZER_TEST_ONE_ENTRY_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(JSON_FUZZER_TEST_ONE_ENTRY_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/json_fuzzer_test_one_entry: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/json_fuzzer_test_one_entry: protobuf_dep_error else $(BINDIR)/$(CONFIG)/json_fuzzer_test_one_entry: $(PROTOBUF_DEP) $(JSON_FUZZER_TEST_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(JSON_FUZZER_TEST_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/json_fuzzer_test_one_entry endif endif $(OBJDIR)/$(CONFIG)/test/core/json/fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/one_corpus_entry_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_json_fuzzer_test_one_entry: $(JSON_FUZZER_TEST_ONE_ENTRY_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(JSON_FUZZER_TEST_ONE_ENTRY_OBJS:.o=.dep) endif endif NANOPB_FUZZER_RESPONSE_TEST_ONE_ENTRY_SRC = \ test/core/nanopb/fuzzer_response.cc \ test/core/util/one_corpus_entry_fuzzer.cc \ NANOPB_FUZZER_RESPONSE_TEST_ONE_ENTRY_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(NANOPB_FUZZER_RESPONSE_TEST_ONE_ENTRY_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/nanopb_fuzzer_response_test_one_entry: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/nanopb_fuzzer_response_test_one_entry: protobuf_dep_error else $(BINDIR)/$(CONFIG)/nanopb_fuzzer_response_test_one_entry: $(PROTOBUF_DEP) $(NANOPB_FUZZER_RESPONSE_TEST_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(NANOPB_FUZZER_RESPONSE_TEST_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/nanopb_fuzzer_response_test_one_entry endif endif $(OBJDIR)/$(CONFIG)/test/core/nanopb/fuzzer_response.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/one_corpus_entry_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_nanopb_fuzzer_response_test_one_entry: $(NANOPB_FUZZER_RESPONSE_TEST_ONE_ENTRY_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(NANOPB_FUZZER_RESPONSE_TEST_ONE_ENTRY_OBJS:.o=.dep) endif endif NANOPB_FUZZER_SERVERLIST_TEST_ONE_ENTRY_SRC = \ test/core/nanopb/fuzzer_serverlist.cc \ test/core/util/one_corpus_entry_fuzzer.cc \ NANOPB_FUZZER_SERVERLIST_TEST_ONE_ENTRY_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(NANOPB_FUZZER_SERVERLIST_TEST_ONE_ENTRY_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/nanopb_fuzzer_serverlist_test_one_entry: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/nanopb_fuzzer_serverlist_test_one_entry: protobuf_dep_error else $(BINDIR)/$(CONFIG)/nanopb_fuzzer_serverlist_test_one_entry: $(PROTOBUF_DEP) $(NANOPB_FUZZER_SERVERLIST_TEST_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(NANOPB_FUZZER_SERVERLIST_TEST_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/nanopb_fuzzer_serverlist_test_one_entry endif endif $(OBJDIR)/$(CONFIG)/test/core/nanopb/fuzzer_serverlist.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/one_corpus_entry_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_nanopb_fuzzer_serverlist_test_one_entry: $(NANOPB_FUZZER_SERVERLIST_TEST_ONE_ENTRY_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(NANOPB_FUZZER_SERVERLIST_TEST_ONE_ENTRY_OBJS:.o=.dep) endif endif PERCENT_DECODE_FUZZER_ONE_ENTRY_SRC = \ test/core/slice/percent_decode_fuzzer.cc \ test/core/util/one_corpus_entry_fuzzer.cc \ PERCENT_DECODE_FUZZER_ONE_ENTRY_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(PERCENT_DECODE_FUZZER_ONE_ENTRY_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/percent_decode_fuzzer_one_entry: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/percent_decode_fuzzer_one_entry: protobuf_dep_error else $(BINDIR)/$(CONFIG)/percent_decode_fuzzer_one_entry: $(PROTOBUF_DEP) $(PERCENT_DECODE_FUZZER_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(PERCENT_DECODE_FUZZER_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/percent_decode_fuzzer_one_entry endif endif $(OBJDIR)/$(CONFIG)/test/core/slice/percent_decode_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/one_corpus_entry_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_percent_decode_fuzzer_one_entry: $(PERCENT_DECODE_FUZZER_ONE_ENTRY_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(PERCENT_DECODE_FUZZER_ONE_ENTRY_OBJS:.o=.dep) endif endif PERCENT_ENCODE_FUZZER_ONE_ENTRY_SRC = \ test/core/slice/percent_encode_fuzzer.cc \ test/core/util/one_corpus_entry_fuzzer.cc \ PERCENT_ENCODE_FUZZER_ONE_ENTRY_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(PERCENT_ENCODE_FUZZER_ONE_ENTRY_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/percent_encode_fuzzer_one_entry: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/percent_encode_fuzzer_one_entry: protobuf_dep_error else $(BINDIR)/$(CONFIG)/percent_encode_fuzzer_one_entry: $(PROTOBUF_DEP) $(PERCENT_ENCODE_FUZZER_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(PERCENT_ENCODE_FUZZER_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/percent_encode_fuzzer_one_entry endif endif $(OBJDIR)/$(CONFIG)/test/core/slice/percent_encode_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/one_corpus_entry_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_percent_encode_fuzzer_one_entry: $(PERCENT_ENCODE_FUZZER_ONE_ENTRY_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(PERCENT_ENCODE_FUZZER_ONE_ENTRY_OBJS:.o=.dep) endif endif SERVER_FUZZER_ONE_ENTRY_SRC = \ test/core/end2end/fuzzers/server_fuzzer.cc \ test/core/util/one_corpus_entry_fuzzer.cc \ SERVER_FUZZER_ONE_ENTRY_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SERVER_FUZZER_ONE_ENTRY_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/server_fuzzer_one_entry: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/server_fuzzer_one_entry: protobuf_dep_error else $(BINDIR)/$(CONFIG)/server_fuzzer_one_entry: $(PROTOBUF_DEP) $(SERVER_FUZZER_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SERVER_FUZZER_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/server_fuzzer_one_entry endif endif $(OBJDIR)/$(CONFIG)/test/core/end2end/fuzzers/server_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/one_corpus_entry_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_server_fuzzer_one_entry: $(SERVER_FUZZER_ONE_ENTRY_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SERVER_FUZZER_ONE_ENTRY_OBJS:.o=.dep) endif endif SSL_SERVER_FUZZER_ONE_ENTRY_SRC = \ test/core/security/ssl_server_fuzzer.cc \ test/core/util/one_corpus_entry_fuzzer.cc \ SSL_SERVER_FUZZER_ONE_ENTRY_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SSL_SERVER_FUZZER_ONE_ENTRY_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/ssl_server_fuzzer_one_entry: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/ssl_server_fuzzer_one_entry: protobuf_dep_error else $(BINDIR)/$(CONFIG)/ssl_server_fuzzer_one_entry: $(PROTOBUF_DEP) $(SSL_SERVER_FUZZER_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(SSL_SERVER_FUZZER_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/ssl_server_fuzzer_one_entry endif endif $(OBJDIR)/$(CONFIG)/test/core/security/ssl_server_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/one_corpus_entry_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_ssl_server_fuzzer_one_entry: $(SSL_SERVER_FUZZER_ONE_ENTRY_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(SSL_SERVER_FUZZER_ONE_ENTRY_OBJS:.o=.dep) endif endif URI_FUZZER_TEST_ONE_ENTRY_SRC = \ test/core/client_channel/uri_fuzzer_test.cc \ test/core/util/one_corpus_entry_fuzzer.cc \ URI_FUZZER_TEST_ONE_ENTRY_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(URI_FUZZER_TEST_ONE_ENTRY_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. $(BINDIR)/$(CONFIG)/uri_fuzzer_test_one_entry: openssl_dep_error else ifeq ($(NO_PROTOBUF),true) # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+. $(BINDIR)/$(CONFIG)/uri_fuzzer_test_one_entry: protobuf_dep_error else $(BINDIR)/$(CONFIG)/uri_fuzzer_test_one_entry: $(PROTOBUF_DEP) $(URI_FUZZER_TEST_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) $(URI_FUZZER_TEST_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/uri_fuzzer_test_one_entry endif endif $(OBJDIR)/$(CONFIG)/test/core/client_channel/uri_fuzzer_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(OBJDIR)/$(CONFIG)/test/core/util/one_corpus_entry_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a deps_uri_fuzzer_test_one_entry: $(URI_FUZZER_TEST_ONE_ENTRY_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) -include $(URI_FUZZER_TEST_ONE_ENTRY_OBJS:.o=.dep) endif endif ifneq ($(OPENSSL_DEP),) # This is to ensure the embedded OpenSSL is built beforehand, properly # installing headers to their final destination on the drive. We need this # otherwise parallel compilation will fail if a source is compiled first. src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc: $(OPENSSL_DEP) src/core/ext/filters/client_channel/xds/xds_channel_secure.cc: $(OPENSSL_DEP) src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc: $(OPENSSL_DEP) src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc: $(OPENSSL_DEP) src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c: $(OPENSSL_DEP) src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c: $(OPENSSL_DEP) src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c: $(OPENSSL_DEP) src/core/lib/http/httpcli_security_connector.cc: $(OPENSSL_DEP) src/core/lib/security/context/security_context.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/alts/alts_credentials.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/alts/check_gcp_environment.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/composite/composite_credentials.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/credentials.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/credentials_metadata.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/fake/fake_credentials.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/google_default/credentials_generic.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/google_default/google_default_credentials.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/iam/iam_credentials.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/jwt/json_token.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/jwt/jwt_credentials.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/jwt/jwt_verifier.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/local/local_credentials.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/oauth2/oauth2_credentials.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/plugin/plugin_credentials.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/ssl/ssl_credentials.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc: $(OPENSSL_DEP) src/core/lib/security/credentials/tls/tls_credentials.cc: $(OPENSSL_DEP) src/core/lib/security/security_connector/alts/alts_security_connector.cc: $(OPENSSL_DEP) src/core/lib/security/security_connector/fake/fake_security_connector.cc: $(OPENSSL_DEP) src/core/lib/security/security_connector/load_system_roots_fallback.cc: $(OPENSSL_DEP) src/core/lib/security/security_connector/load_system_roots_linux.cc: $(OPENSSL_DEP) src/core/lib/security/security_connector/local/local_security_connector.cc: $(OPENSSL_DEP) src/core/lib/security/security_connector/security_connector.cc: $(OPENSSL_DEP) src/core/lib/security/security_connector/ssl/ssl_security_connector.cc: $(OPENSSL_DEP) src/core/lib/security/security_connector/ssl_utils.cc: $(OPENSSL_DEP) src/core/lib/security/security_connector/ssl_utils_config.cc: $(OPENSSL_DEP) src/core/lib/security/security_connector/tls/tls_security_connector.cc: $(OPENSSL_DEP) src/core/lib/security/transport/client_auth_filter.cc: $(OPENSSL_DEP) src/core/lib/security/transport/secure_endpoint.cc: $(OPENSSL_DEP) src/core/lib/security/transport/security_handshaker.cc: $(OPENSSL_DEP) src/core/lib/security/transport/server_auth_filter.cc: $(OPENSSL_DEP) src/core/lib/security/transport/target_authority_table.cc: $(OPENSSL_DEP) src/core/lib/security/transport/tsi_error.cc: $(OPENSSL_DEP) src/core/lib/security/util/json_util.cc: $(OPENSSL_DEP) src/core/lib/surface/init_secure.cc: $(OPENSSL_DEP) src/core/plugin_registry/grpc_plugin_registry.cc: $(OPENSSL_DEP) src/core/tsi/alts/crypt/aes_gcm.cc: $(OPENSSL_DEP) src/core/tsi/alts/crypt/gsec.cc: $(OPENSSL_DEP) src/core/tsi/alts/frame_protector/alts_counter.cc: $(OPENSSL_DEP) src/core/tsi/alts/frame_protector/alts_crypter.cc: $(OPENSSL_DEP) src/core/tsi/alts/frame_protector/alts_frame_protector.cc: $(OPENSSL_DEP) src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc: $(OPENSSL_DEP) src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc: $(OPENSSL_DEP) src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc: $(OPENSSL_DEP) src/core/tsi/alts/frame_protector/frame_handler.cc: $(OPENSSL_DEP) src/core/tsi/alts/handshaker/alts_handshaker_client.cc: $(OPENSSL_DEP) src/core/tsi/alts/handshaker/alts_shared_resource.cc: $(OPENSSL_DEP) src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc: $(OPENSSL_DEP) src/core/tsi/alts/handshaker/alts_tsi_utils.cc: $(OPENSSL_DEP) src/core/tsi/alts/handshaker/transport_security_common_api.cc: $(OPENSSL_DEP) src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc: $(OPENSSL_DEP) src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc: $(OPENSSL_DEP) src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc: $(OPENSSL_DEP) src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc: $(OPENSSL_DEP) src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc: $(OPENSSL_DEP) src/core/tsi/fake_transport_security.cc: $(OPENSSL_DEP) src/core/tsi/local_transport_security.cc: $(OPENSSL_DEP) src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc: $(OPENSSL_DEP) src/core/tsi/ssl/session_cache/ssl_session_cache.cc: $(OPENSSL_DEP) src/core/tsi/ssl/session_cache/ssl_session_openssl.cc: $(OPENSSL_DEP) src/core/tsi/ssl_transport_security.cc: $(OPENSSL_DEP) src/core/tsi/transport_security.cc: $(OPENSSL_DEP) src/core/tsi/transport_security_grpc.cc: $(OPENSSL_DEP) src/cpp/client/channel_test_peer.cc: $(OPENSSL_DEP) src/cpp/client/secure_credentials.cc: $(OPENSSL_DEP) src/cpp/common/alts_context.cc: $(OPENSSL_DEP) src/cpp/common/alts_util.cc: $(OPENSSL_DEP) src/cpp/common/auth_property_iterator.cc: $(OPENSSL_DEP) src/cpp/common/secure_auth_context.cc: $(OPENSSL_DEP) src/cpp/common/secure_channel_arguments.cc: $(OPENSSL_DEP) src/cpp/common/secure_create_auth_context.cc: $(OPENSSL_DEP) src/cpp/common/tls_credentials_options.cc: $(OPENSSL_DEP) src/cpp/common/tls_credentials_options_util.cc: $(OPENSSL_DEP) src/cpp/ext/proto_server_reflection.cc: $(OPENSSL_DEP) src/cpp/ext/proto_server_reflection_plugin.cc: $(OPENSSL_DEP) src/cpp/server/channelz/channelz_service.cc: $(OPENSSL_DEP) src/cpp/server/channelz/channelz_service_plugin.cc: $(OPENSSL_DEP) src/cpp/server/secure_server_credentials.cc: $(OPENSSL_DEP) src/cpp/util/error_details.cc: $(OPENSSL_DEP) src/csharp/ext/grpc_csharp_ext.c: $(OPENSSL_DEP) test/core/end2end/end2end_tests.cc: $(OPENSSL_DEP) test/core/end2end/tests/call_creds.cc: $(OPENSSL_DEP) test/cpp/microbenchmarks/helpers.cc: $(OPENSSL_DEP) test/cpp/util/byte_buffer_proto_helper.cc: $(OPENSSL_DEP) test/cpp/util/create_test_channel.cc: $(OPENSSL_DEP) test/cpp/util/string_ref_helper.cc: $(OPENSSL_DEP) test/cpp/util/subprocess.cc: $(OPENSSL_DEP) test/cpp/util/test_config_cc.cc: $(OPENSSL_DEP) test/cpp/util/test_credentials_provider.cc: $(OPENSSL_DEP) endif .PHONY: all strip tools dep_error openssl_dep_error openssl_dep_message git_update stop buildtests buildtests_c buildtests_cxx test test_c test_cxx install install_c install_cxx install-headers install-headers_c install-headers_cxx install-shared install-shared_c install-shared_cxx install-static install-static_c install-static_cxx strip strip-shared strip-static strip_c strip-shared_c strip-static_c strip_cxx strip-shared_cxx strip-static_cxx dep_c dep_cxx bins_dep_c bins_dep_cxx clean .PHONY: printvars printvars: @$(foreach V,$(sort $(.VARIABLES)), $(if $(filter-out environment% default automatic, $(origin $V)),$(warning $V=$($V) ($(value $V))))) grpc-1.30.2/NOTICE.txt000066400000000000000000000010521370425124100142470ustar00rootroot00000000000000Copyright 2014 gRPC 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 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. grpc-1.30.2/OWNERS000066400000000000000000000001241370425124100134640ustar00rootroot00000000000000# Top level ownership @markdroth **/OWNERS @nicolasnoble **/OWNERS @a11r **/OWNERS grpc-1.30.2/PYTHON-MANIFEST.in000066400000000000000000000015151370425124100153060ustar00rootroot00000000000000recursive-include src/python/grpcio/grpc *.c *.h *.inc *.py *.pyx *.pxd *.pxi *.python *.pem recursive-exclude src/python/grpcio/grpc/_cython *.so *.pyd graft src/python/grpcio/grpcio.egg-info graft src/core graft src/boringssl graft include/grpc graft third_party/abseil-cpp/absl graft third_party/address_sorting graft third_party/boringssl-with-bazel graft third_party/cares graft third_party/upb graft third_party/zlib include src/python/grpcio/_parallel_compile_patch.py include src/python/grpcio/_spawn_patch.py include src/python/grpcio/commands.py include src/python/grpcio/grpc_version.py include src/python/grpcio/grpc_core_dependencies.py include src/python/grpcio/precompiled.py include src/python/grpcio/support.py include src/python/grpcio/README.rst include requirements.txt include etc/roots.pem include Makefile include LICENSE grpc-1.30.2/README.md000066400000000000000000000111521370425124100140060ustar00rootroot00000000000000gRPC - An RPC library and framework =================================== gRPC is a modern, open source, high-performance remote procedure call (RPC) framework that can run anywhere. gRPC enables client and server applications to communicate transparently, and simplifies the building of connected systems.
Homepage: grpc.io
Mailing List: grpc-io@googlegroups.com
[![Join the chat at https://gitter.im/grpc/grpc](https://badges.gitter.im/grpc/grpc.svg)](https://gitter.im/grpc/grpc?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) # To start using gRPC To maximize usability, gRPC supports the standard method for adding dependencies to a user's chosen language (if there is one). In most languages, the gRPC runtime comes as a package available in a user's language package manager. For instructions on how to use the language-specific gRPC runtime for a project, please refer to these documents * [C++](src/cpp): follow the instructions under the `src/cpp` directory * [C#](src/csharp): NuGet package `Grpc` * [Dart](https://github.com/grpc/grpc-dart): pub package `grpc` * [Go](https://github.com/grpc/grpc-go): `go get google.golang.org/grpc` * [Java](https://github.com/grpc/grpc-java): Use JARs from Maven Central Repository * [Kotlin](https://github.com/grpc/grpc-kotlin): Use JARs from Maven Central Repository * [Node](https://github.com/grpc/grpc-node): `npm install grpc` * [Objective-C](src/objective-c): Add `gRPC-ProtoRPC` dependency to podspec * [PHP](src/php): `pecl install grpc` * [Python](src/python/grpcio): `pip install grpcio` * [Ruby](src/ruby): `gem install grpc` * [WebJS](https://github.com/grpc/grpc-web): follow the grpc-web instructions Per-language quickstart guides and tutorials can be found in the [documentation section on the grpc.io website](https://grpc.io/docs/). Code examples are available in the [examples](examples) directory. Precompiled bleeding-edge package builds of gRPC `master` branch's `HEAD` are uploaded daily to [packages.grpc.io](https://packages.grpc.io). # To start developing gRPC Contributions are welcome! Please read [How to contribute](CONTRIBUTING.md) which will guide you through the entire workflow of how to build the source code, how to run the tests, and how to contribute changes to the gRPC codebase. The "How to contribute" document also contains info on how the contribution process works and contains best practices for creating contributions. # Troubleshooting Sometimes things go wrong. Please check out the [Troubleshooting guide](TROUBLESHOOTING.md) if you are experiencing issues with gRPC. # Performance See the [Performance dashboard](https://performance-dot-grpc-testing.appspot.com/explore?dashboard=5652536396611584) for performance numbers of master branch daily builds. # Concepts See [gRPC Concepts](CONCEPTS.md) # About This Repository This repository contains source code for gRPC libraries implemented in multiple languages written on top of a shared C core library [src/core](src/core). Libraries in different languages may be in various states of development. We are seeking contributions for all of these libraries: | Language | Source | |-------------------------|-------------------------------------| | Shared C [core library] | [src/core](src/core) | | C++ | [src/cpp](src/cpp) | | Ruby | [src/ruby](src/ruby) | | Python | [src/python](src/python) | | PHP | [src/php](src/php) | | C# (core library based) | [src/csharp](src/csharp) | | Objective-C | [src/objective-c](src/objective-c) | | Language | Source repo | |-------------------------|------------------------------------------------------| | Java | [grpc-java](https://github.com/grpc/grpc-java) | | Kotlin | [grpc-kotlin](https://github.com/grpc/grpc-kotlin) | | Go | [grpc-go](https://github.com/grpc/grpc-go) | | NodeJS | [grpc-node](https://github.com/grpc/grpc-node) | | WebJS | [grpc-web](https://github.com/grpc/grpc-web) | | Dart | [grpc-dart](https://github.com/grpc/grpc-dart) | | .NET (pure C# impl.) | [grpc-dotnet](https://github.com/grpc/grpc-dotnet) | grpc-1.30.2/Rakefile000077500000000000000000000134011370425124100141760ustar00rootroot00000000000000# -*- ruby -*- require 'rake/extensiontask' require 'rspec/core/rake_task' require 'rubocop/rake_task' require 'bundler/gem_tasks' require 'fileutils' require_relative 'build_config.rb' # Add rubocop style checking tasks RuboCop::RakeTask.new(:rubocop) do |task| task.options = ['-c', 'src/ruby/.rubocop.yml'] # add end2end tests to formatter but don't add generated proto _pb.rb's task.patterns = ['src/ruby/{lib,spec}/**/*.rb', 'src/ruby/end2end/*.rb'] end spec = Gem::Specification.load('grpc.gemspec') Gem::PackageTask.new(spec) do |pkg| end # Add the extension compiler task Rake::ExtensionTask.new('grpc_c', spec) do |ext| unless RUBY_PLATFORM =~ /darwin/ # TODO: also set "no_native to true" for mac if possible. As is, # "no_native" can only be set if the RUBY_PLATFORM doing # cross-compilation is contained in the "ext.cross_platform" array. ext.no_native = true end ext.source_pattern = '**/*.{c,h}' ext.ext_dir = File.join('src', 'ruby', 'ext', 'grpc') ext.lib_dir = File.join('src', 'ruby', 'lib', 'grpc') ext.cross_compile = true ext.cross_platform = [ 'x86-mingw32', 'x64-mingw32', 'x86_64-linux', 'x86-linux', 'universal-darwin' ] ext.cross_compiling do |spec| spec.files = %w( etc/roots.pem grpc_c.32.ruby grpc_c.64.ruby ) spec.files += Dir.glob('src/ruby/bin/**/*') spec.files += Dir.glob('src/ruby/ext/**/*') spec.files += Dir.glob('src/ruby/lib/**/*') spec.files += Dir.glob('src/ruby/pb/**/*') end end # Define the test suites SPEC_SUITES = [ { id: :wrapper, title: 'wrapper layer', files: %w(src/ruby/spec/*.rb) }, { id: :idiomatic, title: 'idiomatic layer', dir: %w(src/ruby/spec/generic), tags: ['~bidi', '~server'] }, { id: :bidi, title: 'bidi tests', dir: %w(src/ruby/spec/generic), tag: 'bidi' }, { id: :server, title: 'rpc server thread tests', dir: %w(src/ruby/spec/generic), tag: 'server' }, { id: :pb, title: 'protobuf service tests', dir: %w(src/ruby/spec/pb) } ] namespace :suite do SPEC_SUITES.each do |suite| desc "Run all specs in the #{suite[:title]} spec suite" RSpec::Core::RakeTask.new(suite[:id]) do |t| ENV['COVERAGE_NAME'] = suite[:id].to_s spec_files = [] suite[:files].each { |f| spec_files += Dir[f] } if suite[:files] if suite[:dir] suite[:dir].each { |f| spec_files += Dir["#{f}/**/*_spec.rb"] } end helper = 'src/ruby/spec/spec_helper.rb' spec_files << helper unless spec_files.include?(helper) t.pattern = spec_files t.rspec_opts = "--tag #{suite[:tag]}" if suite[:tag] if suite[:tags] t.rspec_opts = suite[:tags].map { |x| "--tag #{x}" }.join(' ') end end end end desc 'Build the Windows gRPC DLLs for Ruby' task 'dlls' do require 'rake_compiler_dock' grpc_config = ENV['GRPC_CONFIG'] || 'opt' verbose = ENV['V'] || '0' env = 'CPPFLAGS="-D_WIN32_WINNT=0x600 -DNTDDI_VERSION=0x06000000 -DUNICODE -D_UNICODE -Wno-unused-variable -Wno-unused-result -DCARES_STATICLIB -Wno-error=conversion -Wno-sign-compare -Wno-parentheses -Wno-format -DWIN32_LEAN_AND_MEAN" ' env += 'CFLAGS="-Wno-incompatible-pointer-types" ' env += 'CXXFLAGS="-std=c++11 -fno-exceptions" ' env += 'LDFLAGS=-static ' env += 'SYSTEM=MINGW32 ' env += 'EMBED_ZLIB=true ' env += 'EMBED_OPENSSL=true ' env += 'EMBED_CARES=true ' env += 'BUILDDIR=/tmp ' env += "V=#{verbose} " out = GrpcBuildConfig::CORE_WINDOWS_DLL w64 = { cross: 'x86_64-w64-mingw32', out: 'grpc_c.64.ruby', platform: 'x64-mingw32' } w32 = { cross: 'i686-w64-mingw32', out: 'grpc_c.32.ruby', platform: 'x86-mingw32' } [ w64, w32 ].each do |opt| env_comp = "CC=#{opt[:cross]}-gcc " env_comp += "CXX=#{opt[:cross]}-g++ " env_comp += "LD=#{opt[:cross]}-gcc " env_comp += "LDXX=#{opt[:cross]}-g++ " RakeCompilerDock.sh <<-EOT, platform: opt[:platform] gem update --system --no-document && \ #{env} #{env_comp} make -j`nproc` #{out} && \ #{opt[:cross]}-strip -x -S #{out} && \ cp #{out} #{opt[:out]} EOT end end desc 'Build the native gem file under rake_compiler_dock' task 'gem:native' do verbose = ENV['V'] || '0' grpc_config = ENV['GRPC_CONFIG'] || 'opt' if RUBY_PLATFORM =~ /darwin/ FileUtils.touch 'grpc_c.32.ruby' FileUtils.touch 'grpc_c.64.ruby' unless '2.5' == /(\d+\.\d+)/.match(RUBY_VERSION).to_s fail "rake gem:native (the rake task to build the binary packages) is being " \ "invoked on macos with ruby #{RUBY_VERSION}. The ruby macos artifact " \ "build should be running on ruby 2.5." end system "rake cross native gem RUBY_CC_VERSION=2.7.0:2.6.0:2.5.0:2.4.0:2.3.0 V=#{verbose} GRPC_CONFIG=#{grpc_config}" else require 'rake_compiler_dock' Rake::Task['dlls'].execute ['x86-mingw32', 'x64-mingw32', 'x86_64-linux', 'x86-linux'].each do |plat| RakeCompilerDock.sh <<-EOT, platform: plat # Avoid conflicting declarations of gettimeofday: https://github.com/rake-compiler/rake-compiler-dock/issues/32 find /usr/local/rake-compiler -name win32.h | while read f ; do sudo sed -i 's/gettimeofday/rb_gettimeofday/' $f ; done && \ gem update --system --no-document && \ bundle && \ rake native:#{plat} pkg/#{spec.full_name}-#{plat}.gem pkg/#{spec.full_name}.gem \ RUBY_CC_VERSION=2.7.0:2.6.0:2.5.0:2.4.0:2.3.0 \ V=#{verbose} \ GRPC_CONFIG=#{grpc_config} EOT end end end # Define dependencies between the suites. task 'suite:wrapper' => [:compile, :rubocop] task 'suite:idiomatic' => 'suite:wrapper' task 'suite:bidi' => 'suite:wrapper' task 'suite:server' => 'suite:wrapper' task 'suite:pb' => 'suite:server' desc 'Compiles the gRPC extension then runs all the tests' task all: ['suite:idiomatic', 'suite:bidi', 'suite:pb', 'suite:server'] task default: :all grpc-1.30.2/TROUBLESHOOTING.md000066400000000000000000000040421370425124100153400ustar00rootroot00000000000000# Troubleshooting gRPC This guide is for troubleshooting gRPC implementations based on C core library (sources for most of them are living in the `grpc/grpc` repository). ## Enabling extra logging and tracing Extra logging can be very useful for diagnosing problems. All gRPC implementations based on C core library support the `GRPC_VERBOSITY` and `GRPC_TRACE` environment variables that can be used to increase the amount of information that gets printed to stderr. ## GRPC_VERBOSITY `GRPC_VERBOSITY` is used to set the minimum level of log messages printed by gRPC (supported values are `DEBUG`, `INFO` and `ERROR`). If this environment variable is unset, only `ERROR` logs will be printed. ## GRPC_TRACE `GRPC_TRACE` can be used to enable extra logging for some internal gRPC components. Enabling the right traces can be invaluable for diagnosing for what is going wrong when things aren't working as intended. Possible values for `GRPC_TRACE` are listed in [Environment Variables Overview](doc/environment_variables.md). Multiple traces can be enable at once (use comma as separator). ``` # Enable debug logs for an application GRPC_VERBOSITY=debug ./helloworld_application_using_grpc ``` ``` # Print information about invocations of low-level C core API. # Note that trace logs of log level DEBUG won't be displayed. # Also note that most tracers user log level INFO, so without setting # GPRC_VERBOSITY accordingly, no traces will be printed. GRPC_VERBOSITY=info GRPC_TRACE=api ./helloworld_application_using_grpc ``` ``` # Print info from 3 different tracers, including tracing logs with log level DEBUG GRPC_VERBOSITY=debug GRPC_TRACE=tcp,http,api ./helloworld_application_using_grpc ``` Known limitations: `GPRC_TRACE=tcp` is currently not implemented for Windows (you won't see any tcp traces). Please note that the `GRPC_TRACE` environment variable has nothing to do with gRPC's "tracing" feature (= tracing RPCs in microservice environment to gain insight about how requests are processed by deployment), it is merely used to enable printing of extra logs. grpc-1.30.2/WORKSPACE000066400000000000000000000045031370425124100140120ustar00rootroot00000000000000workspace(name = "com_github_grpc_grpc") load("//bazel:grpc_deps.bzl", "grpc_deps", "grpc_test_only_deps") grpc_deps() grpc_test_only_deps() load("//bazel:grpc_extra_deps.bzl", "grpc_extra_deps") grpc_extra_deps() register_execution_platforms( "//third_party/toolchains:rbe_windows", ) register_toolchains( "//third_party/toolchains/bazel_0.26.0_rbe_windows:cc-toolchain-x64_windows", ) load("@bazel_toolchains//rules/exec_properties:exec_properties.bzl", "create_exec_properties_dict", "custom_exec_properties") custom_exec_properties( name = "grpc_custom_exec_properties", constants = { "LARGE_MACHINE": create_exec_properties_dict(gce_machine_type = "n1-standard-8"), }, ) load("@bazel_toolchains//rules:rbe_repo.bzl", "rbe_autoconfig") # Create toolchain configuration for remote execution. rbe_autoconfig( name = "rbe_default", exec_properties = create_exec_properties_dict( docker_add_capabilities = "SYS_PTRACE", docker_privileged = True, # n1-highmem-2 is the default (small machine) machine type. Targets # that want to use other machines (such as LARGE_MACHINE) will override # this value. gce_machine_type = "n1-highmem-2", # WARNING: the os_family constraint has only been introduced recently # and older release branches select workers solely based on gce_machine_type. # Worker pools needs to be configured with care to avoid accidentally running # linux jobs on windows pool and vice versa (which would lead to a test breakage) os_family = "Linux", ), # use exec_properties instead of deprecated remote_execution_properties use_legacy_platform_definition = False, ) load("@bazel_toolchains//rules:environments.bzl", "clang_env") load("@bazel_skylib//lib:dicts.bzl", "dicts") # Create msan toolchain configuration for remote execution. rbe_autoconfig( name = "rbe_msan", env = dicts.add( clang_env(), { "BAZEL_LINKOPTS": "-lc++:-lc++abi:-lm", }, ), ) load("@io_bazel_rules_python//python:pip.bzl", "pip_import", "pip_repositories") pip_import( name = "grpc_python_dependencies", requirements = "@com_github_grpc_grpc//:requirements.bazel.txt", ) load("@grpc_python_dependencies//:requirements.bzl", "pip_install") pip_repositories() pip_install() grpc-1.30.2/bazel/000077500000000000000000000000001370425124100136245ustar00rootroot00000000000000grpc-1.30.2/bazel/BUILD000066400000000000000000000013131370425124100144040ustar00rootroot00000000000000# Copyright 2017 gRPC 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 # # 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. licenses(["notice"]) # Apache v2 package(default_visibility = ["//:__subpackages__"]) load(":cc_grpc_library.bzl", "cc_grpc_library") grpc-1.30.2/bazel/OWNERS000066400000000000000000000000741370425124100145650ustar00rootroot00000000000000set noparent @nicolasnoble @jtattermusch @veblush @gnossen grpc-1.30.2/bazel/cc_grpc_library.bzl000066400000000000000000000103221370425124100174570ustar00rootroot00000000000000"""Generates and compiles C++ grpc stubs from proto_library rules.""" load("@rules_proto//proto:defs.bzl", "proto_library") load("//bazel:generate_cc.bzl", "generate_cc") load("//bazel:protobuf.bzl", "well_known_proto_libs") def cc_grpc_library( name, srcs, deps, proto_only = False, well_known_protos = False, generate_mocks = False, use_external = False, grpc_only = False, **kwargs): """Generates C++ grpc classes for services defined in a proto file. If grpc_only is True, this rule is compatible with proto_library and cc_proto_library native rules such that it expects proto_library target as srcs argument and generates only grpc library classes, expecting protobuf messages classes library (cc_proto_library target) to be passed in deps argument. By default grpc_only is False which makes this rule to behave in a backwards-compatible mode (trying to generate both proto and grpc classes). Assumes the generated classes will be used in cc_api_version = 2. Args: name (str): Name of rule. srcs (list): A single .proto file which contains services definitions, or if grpc_only parameter is True, a single proto_library which contains services descriptors. deps (list): A list of C++ proto_library (or cc_proto_library) which provides the compiled code of any message that the services depend on. proto_only (bool): If True, create only C++ proto classes library, avoid creating C++ grpc classes library (expect it in deps). Deprecated, use native cc_proto_library instead. False by default. well_known_protos (bool): Should this library additionally depend on well known protos. Deprecated, the well known protos should be specified as explicit dependencies of the proto_library target (passed in srcs parameter) instead. False by default. generate_mocks (bool): when True, Google Mock code for client stub is generated. False by default. use_external (bool): Not used. grpc_only (bool): if True, generate only grpc library, expecting protobuf messages library (cc_proto_library target) to be passed as deps. False by default (will become True by default eventually). **kwargs: rest of arguments, e.g., compatible_with and visibility """ if len(srcs) > 1: fail("Only one srcs value supported", "srcs") if grpc_only and proto_only: fail("A mutualy exclusive configuration is specified: grpc_only = True and proto_only = True") extra_deps = [] proto_targets = [] if not grpc_only: proto_target = "_" + name + "_only" cc_proto_target = name if proto_only else "_" + name + "_cc_proto" proto_deps = ["_" + dep + "_only" for dep in deps if dep.find(":") == -1] proto_deps += [dep.split(":")[0] + ":" + "_" + dep.split(":")[1] + "_only" for dep in deps if dep.find(":") != -1] if well_known_protos: proto_deps += well_known_proto_libs() proto_library( name = proto_target, srcs = srcs, deps = proto_deps, **kwargs ) native.cc_proto_library( name = cc_proto_target, deps = [":" + proto_target], **kwargs ) extra_deps.append(":" + cc_proto_target) proto_targets.append(proto_target) else: if not srcs: fail("srcs cannot be empty", "srcs") proto_targets += srcs if not proto_only: codegen_grpc_target = "_" + name + "_grpc_codegen" generate_cc( name = codegen_grpc_target, srcs = proto_targets, plugin = "@com_github_grpc_grpc//src/compiler:grpc_cpp_plugin", well_known_protos = well_known_protos, generate_mocks = generate_mocks, **kwargs ) native.cc_library( name = name, srcs = [":" + codegen_grpc_target], hdrs = [":" + codegen_grpc_target], deps = deps + extra_deps + ["@com_github_grpc_grpc//:grpc++_codegen_proto"], **kwargs ) grpc-1.30.2/bazel/custom_exec_properties.bzl000066400000000000000000000012751370425124100211340ustar00rootroot00000000000000# Copyright 2019 The gRPC 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 # # 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. load("@grpc_custom_exec_properties//:constants.bzl", _LARGE_MACHINE = "LARGE_MACHINE") LARGE_MACHINE = _LARGE_MACHINE grpc-1.30.2/bazel/cython_library.bzl000066400000000000000000000057101370425124100173700ustar00rootroot00000000000000"""Custom rules for gRPC Python""" # Adapted with modifications from # tensorflow/tensorflow/core/platform/default/build_config.bzl # Native Bazel rules don't exist yet to compile Cython code, but rules have # been written at cython/cython and tensorflow/tensorflow. We branch from # Tensorflow's version as it is more actively maintained and works for gRPC # Python's needs. def pyx_library(name, deps = [], py_deps = [], srcs = [], **kwargs): """Compiles a group of .pyx / .pxd / .py files. First runs Cython to create .cpp files for each input .pyx or .py + .pxd pair. Then builds a shared object for each, passing "deps" to each cc_binary rule (includes Python headers by default). Finally, creates a py_library rule with the shared objects and any pure Python "srcs", with py_deps as its dependencies; the shared objects can be imported like normal Python files. Args: name: Name for the rule. deps: C/C++ dependencies of the Cython (e.g. Numpy headers). py_deps: Pure Python dependencies of the final library. srcs: .py, .pyx, or .pxd files to either compile or pass through. **kwargs: Extra keyword arguments passed to the py_library. """ # First filter out files that should be run compiled vs. passed through. py_srcs = [] pyx_srcs = [] pxd_srcs = [] for src in srcs: if src.endswith(".pyx") or (src.endswith(".py") and src[:-3] + ".pxd" in srcs): pyx_srcs.append(src) elif src.endswith(".py"): py_srcs.append(src) else: pxd_srcs.append(src) if src.endswith("__init__.py"): pxd_srcs.append(src) # Invoke cython to produce the shared object libraries. for filename in pyx_srcs: native.genrule( name = filename + "_cython_translation", srcs = [filename], outs = [filename.split(".")[0] + ".cpp"], # Optionally use PYTHON_BIN_PATH on Linux platforms so that python 3 # works. Windows has issues with cython_binary so skip PYTHON_BIN_PATH. cmd = "PYTHONHASHSEED=0 $(location @cython//:cython_binary) --cplus $(SRCS) --output-file $(OUTS)", tools = ["@cython//:cython_binary"] + pxd_srcs, ) shared_objects = [] for src in pyx_srcs: stem = src.split(".")[0] shared_object_name = stem + ".so" native.cc_binary( name = shared_object_name, srcs = [stem + ".cpp"], deps = deps + ["@local_config_python//:python_headers"], linkshared = 1, ) shared_objects.append(shared_object_name) data = shared_objects[:] data += kwargs.pop("data", []) # Now create a py_library with these shared objects as data. native.py_library( name = name, srcs = py_srcs, deps = py_deps, srcs_version = "PY2AND3", data = data, **kwargs ) grpc-1.30.2/bazel/generate_cc.bzl000066400000000000000000000135761370425124100166100ustar00rootroot00000000000000"""Generates C++ grpc stubs from proto_library rules. This is an internal rule used by cc_grpc_library, and shouldn't be used directly. """ load("@rules_proto//proto:defs.bzl", "ProtoInfo") load( "//bazel:protobuf.bzl", "get_include_directory", "get_plugin_args", "get_proto_root", "proto_path_to_generated_filename", ) _GRPC_PROTO_HEADER_FMT = "{}.grpc.pb.h" _GRPC_PROTO_SRC_FMT = "{}.grpc.pb.cc" _GRPC_PROTO_MOCK_HEADER_FMT = "{}_mock.grpc.pb.h" _PROTO_HEADER_FMT = "{}.pb.h" _PROTO_SRC_FMT = "{}.pb.cc" def _strip_package_from_path(label_package, file): prefix_len = 0 if not file.is_source and file.path.startswith(file.root.path): prefix_len = len(file.root.path) + 1 path = file.path if len(label_package) == 0: return path if not path.startswith(label_package + "/", prefix_len): fail("'{}' does not lie within '{}'.".format(path, label_package)) return path[prefix_len + len(label_package + "/"):] def _get_srcs_file_path(file): if not file.is_source and file.path.startswith(file.root.path): return file.path[len(file.root.path) + 1:] return file.path def _join_directories(directories): massaged_directories = [directory for directory in directories if len(directory) != 0] return "/".join(massaged_directories) def generate_cc_impl(ctx): """Implementation of the generate_cc rule.""" protos = [f for src in ctx.attr.srcs for f in src[ProtoInfo].check_deps_sources.to_list()] includes = [ f for src in ctx.attr.srcs for f in src[ProtoInfo].transitive_imports.to_list() ] outs = [] proto_root = get_proto_root( ctx.label.workspace_root, ) label_package = _join_directories([ctx.label.workspace_root, ctx.label.package]) if ctx.executable.plugin: outs += [ proto_path_to_generated_filename( _strip_package_from_path(label_package, proto), _GRPC_PROTO_HEADER_FMT, ) for proto in protos ] outs += [ proto_path_to_generated_filename( _strip_package_from_path(label_package, proto), _GRPC_PROTO_SRC_FMT, ) for proto in protos ] if ctx.attr.generate_mocks: outs += [ proto_path_to_generated_filename( _strip_package_from_path(label_package, proto), _GRPC_PROTO_MOCK_HEADER_FMT, ) for proto in protos ] else: outs += [ proto_path_to_generated_filename( _strip_package_from_path(label_package, proto), _PROTO_HEADER_FMT, ) for proto in protos ] outs += [ proto_path_to_generated_filename( _strip_package_from_path(label_package, proto), _PROTO_SRC_FMT, ) for proto in protos ] out_files = [ctx.actions.declare_file(out) for out in outs] dir_out = str(ctx.genfiles_dir.path + proto_root) arguments = [] if ctx.executable.plugin: arguments += get_plugin_args( ctx.executable.plugin, ctx.attr.flags, dir_out, ctx.attr.generate_mocks, ) tools = [ctx.executable.plugin] else: arguments += ["--cpp_out=" + ",".join(ctx.attr.flags) + ":" + dir_out] tools = [] arguments += [ "--proto_path={}".format(get_include_directory(i)) for i in includes ] # Include the output directory so that protoc puts the generated code in the # right directory. arguments += ["--proto_path={0}{1}".format(dir_out, proto_root)] arguments += [_get_srcs_file_path(proto) for proto in protos] # create a list of well known proto files if the argument is non-None well_known_proto_files = [] if ctx.attr.well_known_protos: f = ctx.attr.well_known_protos.files.to_list()[0].dirname if f != "external/com_google_protobuf/src/google/protobuf": print( "Error: Only @com_google_protobuf//:well_known_protos is supported", ) else: # f points to "external/com_google_protobuf/src/google/protobuf" # add -I argument to protoc so it knows where to look for the proto files. arguments += ["-I{0}".format(f + "/../..")] well_known_proto_files = [ f for f in ctx.attr.well_known_protos.files.to_list() ] ctx.actions.run( inputs = protos + includes + well_known_proto_files, tools = tools, outputs = out_files, executable = ctx.executable._protoc, arguments = arguments, ) return struct(files = depset(out_files)) _generate_cc = rule( attrs = { "srcs": attr.label_list( mandatory = True, allow_empty = False, providers = [ProtoInfo], ), "plugin": attr.label( executable = True, providers = ["files_to_run"], cfg = "host", ), "flags": attr.string_list( mandatory = False, allow_empty = True, ), "well_known_protos": attr.label(mandatory = False), "generate_mocks": attr.bool( default = False, mandatory = False, ), "_protoc": attr.label( default = Label("//external:protocol_compiler"), executable = True, cfg = "host", ), }, # We generate .h files, so we need to output to genfiles. output_to_genfiles = True, implementation = generate_cc_impl, ) def generate_cc(well_known_protos, **kwargs): if well_known_protos: _generate_cc( well_known_protos = "@com_google_protobuf//:well_known_protos", **kwargs ) else: _generate_cc(**kwargs) grpc-1.30.2/bazel/generate_objc.bzl000066400000000000000000000151611370425124100171300ustar00rootroot00000000000000load("@rules_proto//proto:defs.bzl", "ProtoInfo") load( "//bazel:protobuf.bzl", "get_include_directory", "get_plugin_args", "proto_path_to_generated_filename", ) load(":grpc_util.bzl", "to_upper_camel_with_extension") _GRPC_PROTO_HEADER_FMT = "{}.pbrpc.h" _GRPC_PROTO_SRC_FMT = "{}.pbrpc.m" _PROTO_HEADER_FMT = "{}.pbobjc.h" _PROTO_SRC_FMT = "{}.pbobjc.m" _GENERATED_PROTOS_DIR = "_generated_protos" _GENERATE_HDRS = 1 _GENERATE_SRCS = 2 _GENERATE_NON_ARC_SRCS = 3 def _generate_objc_impl(ctx): """Implementation of the generate_objc rule.""" protos = [ f for src in ctx.attr.deps for f in src[ProtoInfo].transitive_imports.to_list() ] target_package = _join_directories([ctx.label.workspace_root, ctx.label.package]) files_with_rpc = [_label_to_full_file_path(f, target_package) for f in ctx.attr.srcs] outs = [] for proto in protos: outs += [_get_output_file_name_from_proto(proto, _PROTO_HEADER_FMT)] outs += [_get_output_file_name_from_proto(proto, _PROTO_SRC_FMT)] file_path = _get_full_path_from_file(proto) if file_path in files_with_rpc: outs += [_get_output_file_name_from_proto(proto, _GRPC_PROTO_HEADER_FMT)] outs += [_get_output_file_name_from_proto(proto, _GRPC_PROTO_SRC_FMT)] out_files = [ctx.actions.declare_file(out) for out in outs] dir_out = _join_directories([ str(ctx.genfiles_dir.path), target_package, _GENERATED_PROTOS_DIR, ]) arguments = [] if ctx.executable.plugin: arguments += get_plugin_args( ctx.executable.plugin, [], dir_out, False, ) tools = [ctx.executable.plugin] arguments += ["--objc_out=" + dir_out] arguments += ["--proto_path=."] arguments += [ "--proto_path={}".format(get_include_directory(i)) for i in protos ] # Include the output directory so that protoc puts the generated code in the # right directory. arguments += ["--proto_path={}".format(dir_out)] arguments += ["--proto_path={}".format(_get_directory_from_proto(proto)) for proto in protos] arguments += [_get_full_path_from_file(proto) for proto in protos] # create a list of well known proto files if the argument is non-None well_known_proto_files = [] if ctx.attr.use_well_known_protos: f = ctx.attr.well_known_protos.files.to_list()[0].dirname # go two levels up so that #import "google/protobuf/..." is correct arguments += ["-I{0}".format(f + "/../..")] well_known_proto_files = ctx.attr.well_known_protos.files.to_list() ctx.actions.run( inputs = protos + well_known_proto_files, tools = tools, outputs = out_files, executable = ctx.executable._protoc, arguments = arguments, ) return struct(files = depset(out_files)) def _label_to_full_file_path(src, package): if not src.startswith("//"): # Relative from current package if not src.startswith(":"): # "a.proto" -> ":a.proto" src = ":" + src src = "//" + package + src # Converts //path/to/package:File.ext to path/to/package/File.ext. src = src.replace("//", "") src = src.replace(":", "/") if src.startswith("/"): # "//:a.proto" -> "/a.proto" so remove the initial slash return src[1:] else: return src def _get_output_file_name_from_proto(proto, fmt): return proto_path_to_generated_filename( _GENERATED_PROTOS_DIR + "/" + _get_directory_from_proto(proto) + _get_slash_or_null_from_proto(proto) + to_upper_camel_with_extension(_get_file_name_from_proto(proto), "proto"), fmt, ) def _get_file_name_from_proto(proto): return proto.path.rpartition("/")[2] def _get_slash_or_null_from_proto(proto): """Potentially returns empty (if the file is in the root directory)""" return proto.path.rpartition("/")[1] def _get_directory_from_proto(proto): return proto.path.rpartition("/")[0] def _get_full_path_from_file(file): gen_dir_length = 0 # if file is generated, then prepare to remote its root # (including CPU architecture...) if not file.is_source: gen_dir_length = len(file.root.path) + 1 return file.path[gen_dir_length:] def _join_directories(directories): massaged_directories = [directory for directory in directories if len(directory) != 0] return "/".join(massaged_directories) generate_objc = rule( attrs = { "deps": attr.label_list( mandatory = True, allow_empty = False, providers = [ProtoInfo], ), "plugin": attr.label( default = "@com_github_grpc_grpc//src/compiler:grpc_objective_c_plugin", executable = True, providers = ["files_to_run"], cfg = "host", ), "srcs": attr.string_list( mandatory = False, allow_empty = True, ), "use_well_known_protos": attr.bool( mandatory = False, default = False, ), "well_known_protos": attr.label( default = "@com_google_protobuf//:well_known_protos", ), "_protoc": attr.label( default = Label("//external:protocol_compiler"), executable = True, cfg = "host", ), }, output_to_genfiles = True, implementation = _generate_objc_impl, ) def _group_objc_files_impl(ctx): suffix = "" if ctx.attr.gen_mode == _GENERATE_HDRS: suffix = "h" elif ctx.attr.gen_mode == _GENERATE_SRCS: suffix = "pbrpc.m" elif ctx.attr.gen_mode == _GENERATE_NON_ARC_SRCS: suffix = "pbobjc.m" else: fail("Undefined gen_mode") out_files = [ file for file in ctx.attr.src.files.to_list() if file.basename.endswith(suffix) ] return struct(files = depset(out_files)) generate_objc_hdrs = rule( attrs = { "src": attr.label( mandatory = True, ), "gen_mode": attr.int( default = _GENERATE_HDRS, ), }, implementation = _group_objc_files_impl, ) generate_objc_srcs = rule( attrs = { "src": attr.label( mandatory = True, ), "gen_mode": attr.int( default = _GENERATE_SRCS, ), }, implementation = _group_objc_files_impl, ) generate_objc_non_arc_srcs = rule( attrs = { "src": attr.label( mandatory = True, ), "gen_mode": attr.int( default = _GENERATE_NON_ARC_SRCS, ), }, implementation = _group_objc_files_impl, ) grpc-1.30.2/bazel/grpc_build_system.bzl000066400000000000000000000253601370425124100200610ustar00rootroot00000000000000# Copyright 2016 gRPC 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 # # 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. # # This is for the gRPC build system. This isn't intended to be used outsite of # the BUILD file for gRPC. It contains the mapping for the template system we # use to generate other platform's build system files. # # Please consider that there should be a high bar for additions and changes to # this file. # Each rule listed must be re-written for Google's internal build system, and # each change must be ported from one to the other. # load("//bazel:cc_grpc_library.bzl", "cc_grpc_library") load("@upb//bazel:upb_proto_library.bzl", "upb_proto_library") load("@build_bazel_rules_apple//apple:ios.bzl", "ios_unit_test") # The set of pollers to test against if a test exercises polling POLLERS = ["epollex", "epoll1", "poll"] def if_not_windows(a): return select({ "//:windows": [], "//:windows_msvc": [], "//conditions:default": a, }) def if_mac(a): return select({ "//:mac_x86_64": a, "//conditions:default": [], }) def _get_external_deps(external_deps): ret = [] for dep in external_deps: if dep == "address_sorting": ret += ["//third_party/address_sorting"] elif dep == "cares": ret += select({ "//:grpc_no_ares": [], "//conditions:default": ["//external:cares"], }) elif dep == "cronet_c_for_grpc": ret += ["//third_party/objective_c/Cronet:cronet_c_for_grpc"] elif dep.startswith("absl/"): ret += ["@com_google_absl//" + dep] else: ret += ["//external:" + dep] return ret def grpc_cc_library( name, srcs = [], public_hdrs = [], hdrs = [], external_deps = [], deps = [], standalone = False, language = "C++", testonly = False, visibility = None, alwayslink = 0, data = [], use_cfstream = False, tags = []): copts = [] if use_cfstream: copts = if_mac(["-DGRPC_CFSTREAM"]) if language.upper() == "C": copts = copts + if_not_windows(["-std=c99"]) linkopts = if_not_windows(["-pthread"]) if use_cfstream: linkopts = linkopts + if_mac(["-framework CoreFoundation"]) native.cc_library( name = name, srcs = srcs, defines = select({ "//:grpc_no_ares": ["GRPC_ARES=0"], "//conditions:default": [], }) + select({ "//:remote_execution": ["GRPC_PORT_ISOLATED_RUNTIME=1"], "//conditions:default": [], }) + select({ "//:grpc_allow_exceptions": ["GRPC_ALLOW_EXCEPTIONS=1"], "//:grpc_disallow_exceptions": ["GRPC_ALLOW_EXCEPTIONS=0"], "//conditions:default": [], }), hdrs = hdrs + public_hdrs, deps = deps + _get_external_deps(external_deps), copts = copts, visibility = visibility, testonly = testonly, linkopts = linkopts, includes = [ "include", "src/core/ext/upb-generated", # Once upb code-gen issue is resolved, remove this. ], alwayslink = alwayslink, data = data, tags = tags, ) def grpc_proto_plugin(name, srcs = [], deps = []): native.cc_binary( name = name, srcs = srcs, deps = deps, ) def grpc_proto_library( name, srcs = [], deps = [], well_known_protos = False, has_services = True, use_external = False, generate_mocks = False): cc_grpc_library( name = name, srcs = srcs, deps = deps, well_known_protos = well_known_protos, proto_only = not has_services, use_external = use_external, generate_mocks = generate_mocks, ) def ios_cc_test( name, tags = [], **kwargs): ios_test_adapter = "//third_party/objective_c/google_toolbox_for_mac:GTM_GoogleTestRunner_GTM_USING_XCTEST" test_lib_ios = name + "_test_lib_ios" ios_tags = tags + ["manual", "ios_cc_test"] if not any([t for t in tags if t.startswith("no_test_ios")]): native.objc_library( name = test_lib_ios, srcs = kwargs.get("srcs"), deps = kwargs.get("deps"), copts = kwargs.get("copts"), tags = ios_tags, alwayslink = 1, testonly = 1, ) ios_test_deps = [ios_test_adapter, ":" + test_lib_ios] ios_unit_test( name = name + "_on_ios", size = kwargs.get("size"), tags = ios_tags, minimum_os_version = "9.0", deps = ios_test_deps, ) def grpc_cc_test(name, srcs = [], deps = [], external_deps = [], args = [], data = [], uses_polling = True, language = "C++", size = "medium", timeout = None, tags = [], exec_compatible_with = [], exec_properties = {}, shard_count = None, flaky = None): copts = if_mac(["-DGRPC_CFSTREAM"]) if language.upper() == "C": copts = copts + if_not_windows(["-std=c99"]) # NOTE: these attributes won't be used for the poller-specific versions of a test # automatically, you need to set them explicitly (if applicable) args = { "srcs": srcs, "args": args, "data": data, "deps": deps + _get_external_deps(external_deps), "copts": copts, "linkopts": if_not_windows(["-pthread"]), "size": size, "timeout": timeout, "exec_compatible_with": exec_compatible_with, "exec_properties": exec_properties, "shard_count": shard_count, "flaky": flaky, } if uses_polling: # the vanilla version of the test should run on platforms that only # support a single poller native.cc_test( name = name, testonly = True, tags = (tags + [ "no_linux", # linux supports multiple pollers ]), **args ) # on linux we run the same test multiple times, once for each poller for poller in POLLERS: native.sh_test( name = name + "@poller=" + poller, data = [name] + data, srcs = [ "//test/core/util:run_with_poller_sh", ], size = size, timeout = timeout, args = [ poller, "$(location %s)" % name, ] + args["args"], tags = (tags + ["no_windows", "no_mac"]), exec_compatible_with = exec_compatible_with, exec_properties = exec_properties, shard_count = shard_count, flaky = flaky, ) else: # the test behavior doesn't depend on polling, just generate the test native.cc_test(name = name, tags = tags + ["no_uses_polling"], **args) ios_cc_test( name = name, tags = tags, **args ) def grpc_cc_binary(name, srcs = [], deps = [], external_deps = [], args = [], data = [], language = "C++", testonly = False, linkshared = False, linkopts = [], tags = []): copts = [] if language.upper() == "C": copts = ["-std=c99"] native.cc_binary( name = name, srcs = srcs, args = args, data = data, testonly = testonly, linkshared = linkshared, deps = deps + _get_external_deps(external_deps), copts = copts, linkopts = if_not_windows(["-pthread"]) + linkopts, tags = tags, ) def grpc_generate_one_off_targets(): # In open-source, grpc_objc* libraries depend directly on //:grpc native.alias( name = "grpc_objc", actual = "//:grpc", ) def grpc_generate_objc_one_off_targets(): pass def grpc_sh_test(name, srcs, args = [], data = []): native.sh_test( name = name, srcs = srcs, args = args, data = data, ) def grpc_sh_binary(name, srcs, data = []): native.sh_binary( name = name, srcs = srcs, data = data, ) def grpc_py_binary( name, srcs, data = [], deps = [], external_deps = [], testonly = False, python_version = "PY2", **kwargs): native.py_binary( name = name, srcs = srcs, testonly = testonly, data = data, deps = deps + _get_external_deps(external_deps), python_version = python_version, **kwargs ) def grpc_package(name, visibility = "private", features = []): if visibility == "tests": visibility = ["//test:__subpackages__"] elif visibility == "public": visibility = ["//visibility:public"] elif visibility == "private": visibility = [] else: fail("Unknown visibility " + visibility) if len(visibility) != 0: native.package( default_visibility = visibility, features = features, ) def grpc_objc_library( name, srcs = [], hdrs = [], textual_hdrs = [], data = [], deps = [], defines = [], includes = [], visibility = ["//visibility:public"]): """The grpc version of objc_library, only used for the Objective-C library compilation Args: name: name of target hdrs: public headers srcs: all source files (.m) textual_hdrs: private headers data: any other bundle resources defines: preprocessors includes: added to search path, always [the path to objc directory] deps: dependencies visibility: visibility, default to public """ native.objc_library( name = name, hdrs = hdrs, srcs = srcs, textual_hdrs = textual_hdrs, data = data, deps = deps, defines = defines, includes = includes, visibility = visibility, ) def grpc_upb_proto_library(name, deps): upb_proto_library(name = name, deps = deps) def python_config_settings(): native.config_setting( name = "python3", flag_values = {"@bazel_tools//tools/python:python_version": "PY3"}, ) grpc-1.30.2/bazel/grpc_deps.bzl000066400000000000000000000421631370425124100163110ustar00rootroot00000000000000"""Load dependencies needed to compile and test the grpc library as a 3rd-party consumer.""" load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") load("@com_github_grpc_grpc//bazel:grpc_python_deps.bzl", "grpc_python_deps") def grpc_deps(): """Loads dependencies need to compile and test the grpc library.""" native.bind( name = "upb_lib", actual = "@upb//:upb", ) native.bind( name = "absl", actual = "@com_google_absl//absl", ) native.bind( name = "absl-base", actual = "@com_google_absl//absl/base", ) native.bind( name = "absl-time", actual = "@com_google_absl//absl/time:time", ) native.bind( name = "libssl", actual = "@boringssl//:ssl", ) native.bind( name = "madler_zlib", actual = "@zlib//:zlib", ) native.bind( name = "protobuf", actual = "@com_google_protobuf//:protobuf", ) native.bind( name = "protobuf_clib", actual = "@com_google_protobuf//:protoc_lib", ) native.bind( name = "protobuf_headers", actual = "@com_google_protobuf//:protobuf_headers", ) native.bind( name = "protocol_compiler", actual = "@com_google_protobuf//:protoc", ) native.bind( name = "cares", actual = "@com_github_cares_cares//:ares", ) native.bind( name = "gtest", actual = "@com_github_google_googletest//:gtest", ) native.bind( name = "benchmark", actual = "@com_github_google_benchmark//:benchmark", ) native.bind( name = "gflags", actual = "@com_github_gflags_gflags//:gflags", ) native.bind( name = "grpc_cpp_plugin", actual = "@com_github_grpc_grpc//src/compiler:grpc_cpp_plugin", ) native.bind( name = "grpc++_codegen_proto", actual = "@com_github_grpc_grpc//:grpc++_codegen_proto", ) native.bind( name = "opencensus-context", actual = "@io_opencensus_cpp//opencensus/context:context", ) native.bind( name = "opencensus-trace", actual = "@io_opencensus_cpp//opencensus/trace:trace", ) native.bind( name = "opencensus-trace-context_util", actual = "@io_opencensus_cpp//opencensus/trace:context_util", ) native.bind( name = "opencensus-stats", actual = "@io_opencensus_cpp//opencensus/stats:stats", ) native.bind( name = "opencensus-stats-test", actual = "@io_opencensus_cpp//opencensus/stats:test_utils", ) native.bind( name = "opencensus-with-tag-map", actual = "@io_opencensus_cpp//opencensus/tags:with_tag_map", ) native.bind( name = "opencensus-tags", actual = "@io_opencensus_cpp//opencensus/tags:tags", ) native.bind( name = "libuv", actual = "@libuv//:libuv", ) if "boringssl" not in native.existing_rules(): http_archive( name = "boringssl", # Use github mirror instead of https://boringssl.googlesource.com/boringssl # to obtain a boringssl archive with consistent sha256 sha256 = "3909329105e28cfeedcd8028865c92f1081ae2524a0ad6c09eba5d91d9ae3869", strip_prefix = "boringssl-3ab047a8e377083a9b38dc908fe1612d5743a021", urls = [ "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/boringssl/archive/3ab047a8e377083a9b38dc908fe1612d5743a021.tar.gz", "https://github.com/google/boringssl/archive/3ab047a8e377083a9b38dc908fe1612d5743a021.tar.gz", ], ) if "zlib" not in native.existing_rules(): http_archive( name = "zlib", build_file = "@com_github_grpc_grpc//third_party:zlib.BUILD", sha256 = "6d4d6640ca3121620995ee255945161821218752b551a1a180f4215f7d124d45", strip_prefix = "zlib-cacf7f1d4e3d44d871b605da3b647f07d718623f", urls = [ "https://storage.googleapis.com/grpc-bazel-mirror/github.com/madler/zlib/archive/cacf7f1d4e3d44d871b605da3b647f07d718623f.tar.gz", "https://github.com/madler/zlib/archive/cacf7f1d4e3d44d871b605da3b647f07d718623f.tar.gz", ], ) if "com_google_protobuf" not in native.existing_rules(): http_archive( name = "com_google_protobuf", sha256 = "efaf69303e01caccc2447064fc1832dfd23c0c130df0dc5fc98a13185bb7d1a7", strip_prefix = "protobuf-678da4f76eb9168c9965afc2149944a66cd48546", urls = [ "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/protobuf/archive/678da4f76eb9168c9965afc2149944a66cd48546.tar.gz", "https://github.com/google/protobuf/archive/678da4f76eb9168c9965afc2149944a66cd48546.tar.gz", ], ) if "com_github_google_googletest" not in native.existing_rules(): http_archive( name = "com_github_google_googletest", sha256 = "443d383db648ebb8e391382c0ab63263b7091d03197f304390baac10f178a468", strip_prefix = "googletest-c9ccac7cb7345901884aabf5d1a786cfa6e2f397", urls = [ # 2019-08-19 "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/googletest/archive/c9ccac7cb7345901884aabf5d1a786cfa6e2f397.tar.gz", "https://github.com/google/googletest/archive/c9ccac7cb7345901884aabf5d1a786cfa6e2f397.tar.gz", ], ) if "rules_cc" not in native.existing_rules(): http_archive( name = "rules_cc", sha256 = "35f2fb4ea0b3e61ad64a369de284e4fbbdcdba71836a5555abb5e194cf119509", strip_prefix = "rules_cc-624b5d59dfb45672d4239422fa1e3de1822ee110", urls = [ #2019-08-15 "https://storage.googleapis.com/grpc-bazel-mirror/github.com/bazelbuild/rules_cc/archive/624b5d59dfb45672d4239422fa1e3de1822ee110.tar.gz", "https://github.com/bazelbuild/rules_cc/archive/624b5d59dfb45672d4239422fa1e3de1822ee110.tar.gz", ], ) if "com_github_gflags_gflags" not in native.existing_rules(): http_archive( name = "com_github_gflags_gflags", sha256 = "63ae70ea3e05780f7547d03503a53de3a7d2d83ad1caaa443a31cb20aea28654", strip_prefix = "gflags-28f50e0fed19872e0fd50dd23ce2ee8cd759338e", urls = [ "https://storage.googleapis.com/grpc-bazel-mirror/github.com/gflags/gflags/archive/28f50e0fed19872e0fd50dd23ce2ee8cd759338e.tar.gz", "https://github.com/gflags/gflags/archive/28f50e0fed19872e0fd50dd23ce2ee8cd759338e.tar.gz", ], ) if "com_github_google_benchmark" not in native.existing_rules(): http_archive( name = "com_github_google_benchmark", sha256 = "f68aec93154d010324c05bcd8c5cc53468b87af88d87acb5ddcfaa1bba044837", strip_prefix = "benchmark-090faecb454fbd6e6e17a75ef8146acb037118d4", urls = [ "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/benchmark/archive/090faecb454fbd6e6e17a75ef8146acb037118d4.tar.gz", "https://github.com/google/benchmark/archive/090faecb454fbd6e6e17a75ef8146acb037118d4.tar.gz", ], ) if "com_github_cares_cares" not in native.existing_rules(): http_archive( name = "com_github_cares_cares", build_file = "@com_github_grpc_grpc//third_party:cares/cares.BUILD", sha256 = "e8c2751ddc70fed9dc6f999acd92e232d5846f009ee1674f8aee81f19b2b915a", strip_prefix = "c-ares-e982924acee7f7313b4baa4ee5ec000c5e373c30", urls = [ "https://storage.googleapis.com/grpc-bazel-mirror/github.com/c-ares/c-ares/archive/e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz", "https://github.com/c-ares/c-ares/archive/e982924acee7f7313b4baa4ee5ec000c5e373c30.tar.gz", ], ) if "com_google_absl" not in native.existing_rules(): http_archive( name = "com_google_absl", sha256 = "f368a8476f4e2e0eccf8a7318b98dafbe30b2600f4e3cf52636e5eb145aba06a", strip_prefix = "abseil-cpp-df3ea785d8c30a9503321a3d35ee7d35808f190d", urls = [ "https://storage.googleapis.com/grpc-bazel-mirror/github.com/abseil/abseil-cpp/archive/df3ea785d8c30a9503321a3d35ee7d35808f190d.tar.gz", "https://github.com/abseil/abseil-cpp/archive/df3ea785d8c30a9503321a3d35ee7d35808f190d.tar.gz", ], ) if "bazel_toolchains" not in native.existing_rules(): # list of releases is at https://releases.bazel.build/bazel-toolchains.html http_archive( name = "bazel_toolchains", sha256 = "0b36eef8a66f39c8dbae88e522d5bbbef49d5e66e834a982402c79962281be10", strip_prefix = "bazel-toolchains-1.0.1", urls = [ "https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/archive/1.0.1.tar.gz", "https://github.com/bazelbuild/bazel-toolchains/releases/download/1.0.1/bazel-toolchains-1.0.1.tar.gz", ], ) if "bazel_skylib" not in native.existing_rules(): http_archive( name = "bazel_skylib", urls = [ "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.2/bazel-skylib-1.0.2.tar.gz", "https://github.com/bazelbuild/bazel-skylib/releases/download/1.0.2/bazel-skylib-1.0.2.tar.gz", ], sha256 = "97e70364e9249702246c0e9444bccdc4b847bed1eb03c5a3ece4f83dfe6abc44", ) if "io_opencensus_cpp" not in native.existing_rules(): http_archive( name = "io_opencensus_cpp", sha256 = "90d6fafa8b1a2ea613bf662731d3086e1c2ed286f458a95c81744df2dbae41b1", strip_prefix = "opencensus-cpp-c9a4da319bc669a772928ffc55af4a61be1a1176", urls = [ "https://storage.googleapis.com/grpc-bazel-mirror/github.com/census-instrumentation/opencensus-cpp/archive/c9a4da319bc669a772928ffc55af4a61be1a1176.tar.gz", "https://github.com/census-instrumentation/opencensus-cpp/archive/c9a4da319bc669a772928ffc55af4a61be1a1176.tar.gz", ], ) if "upb" not in native.existing_rules(): http_archive( name = "upb", sha256 = "e9c136e56b98c8eb48ad1c9f8df4a6348e99f9f336ee6199c4259a312c2e3598", strip_prefix = "upb-d8f3d6f9d415b31f3ce56d46791706c38fa311bc", urls = [ "https://storage.googleapis.com/grpc-bazel-mirror/github.com/protocolbuffers/upb/archive/d8f3d6f9d415b31f3ce56d46791706c38fa311bc.tar.gz", "https://github.com/protocolbuffers/upb/archive/d8f3d6f9d415b31f3ce56d46791706c38fa311bc.tar.gz", ], ) if "envoy_api" not in native.existing_rules(): http_archive( name = "envoy_api", sha256 = "9150f920abd3e710e0e58519cd769822f13d7a56988f2c34c2008815ec8d9c88", strip_prefix = "data-plane-api-8dcc476be69437b505af181a6e8b167fdb101d7e", urls = [ "https://storage.googleapis.com/grpc-bazel-mirror/github.com/envoyproxy/data-plane-api/archive/8dcc476be69437b505af181a6e8b167fdb101d7e.tar.gz", "https://github.com/envoyproxy/data-plane-api/archive/8dcc476be69437b505af181a6e8b167fdb101d7e.tar.gz", ], ) if "io_bazel_rules_go" not in native.existing_rules(): http_archive( name = "io_bazel_rules_go", sha256 = "a82a352bffae6bee4e95f68a8d80a70e87f42c4741e6a448bec11998fcc82329", urls = [ "https://storage.googleapis.com/grpc-bazel-mirror/github.com/bazelbuild/rules_go/releases/download/0.18.5/rules_go-0.18.5.tar.gz", "https://github.com/bazelbuild/rules_go/releases/download/0.18.5/rules_go-0.18.5.tar.gz", ], ) if "build_bazel_rules_apple" not in native.existing_rules(): http_archive( name = "build_bazel_rules_apple", strip_prefix = "rules_apple-b869b0d3868d78a1d4ffd866ccb304fb68aa12c3", sha256 = "bdc8e66e70b8a75da23b79f1f8c6207356df07d041d96d2189add7ee0780cf4e", urls = [ "https://storage.googleapis.com/grpc-bazel-mirror/github.com/bazelbuild/rules_apple/archive/b869b0d3868d78a1d4ffd866ccb304fb68aa12c3.tar.gz", "https://github.com/bazelbuild/rules_apple/archive/b869b0d3868d78a1d4ffd866ccb304fb68aa12c3.tar.gz", ], ) if "build_bazel_apple_support" not in native.existing_rules(): http_archive( name = "build_bazel_apple_support", urls = [ "https://storage.googleapis.com/grpc-bazel-mirror/github.com/bazelbuild/apple_support/releases/download/0.7.1/apple_support.0.7.1.tar.gz", "https://github.com/bazelbuild/apple_support/releases/download/0.7.1/apple_support.0.7.1.tar.gz", ], sha256 = "122ebf7fe7d1c8e938af6aeaee0efe788a3a2449ece5a8d6a428cb18d6f88033", ) if "libuv" not in native.existing_rules(): http_archive( name = "libuv", build_file = "@com_github_grpc_grpc//third_party:libuv.BUILD", sha256 = "dfb4fe1ff0b47340978490a14bf253475159ecfcbad46ab2a350c78f9ce3360f", strip_prefix = "libuv-15ae750151ac9341e5945eb38f8982d59fb99201", urls = [ "https://storage.googleapis.com/grpc-bazel-mirror/github.com/libuv/libuv/archive/15ae750151ac9341e5945eb38f8982d59fb99201.tar.gz", "https://github.com/libuv/libuv/archive/15ae750151ac9341e5945eb38f8982d59fb99201.tar.gz", ], ) grpc_python_deps() # TODO: move some dependencies from "grpc_deps" here? def grpc_test_only_deps(): """Internal, not intended for use by packages that are consuming grpc. Loads dependencies that are only needed to run grpc library's tests.""" native.bind( name = "twisted", actual = "@com_github_twisted_twisted//:twisted", ) native.bind( name = "yaml", actual = "@com_github_yaml_pyyaml//:yaml", ) if "com_github_twisted_twisted" not in native.existing_rules(): http_archive( name = "com_github_twisted_twisted", sha256 = "ca17699d0d62eafc5c28daf2c7d0a18e62ae77b4137300b6c7d7868b39b06139", strip_prefix = "twisted-twisted-17.5.0", urls = [ "https://storage.googleapis.com/grpc-bazel-mirror/github.com/twisted/twisted/archive/twisted-17.5.0.zip", "https://github.com/twisted/twisted/archive/twisted-17.5.0.zip", ], build_file = "@com_github_grpc_grpc//third_party:twisted.BUILD", ) if "com_github_yaml_pyyaml" not in native.existing_rules(): http_archive( name = "com_github_yaml_pyyaml", sha256 = "6b4314b1b2051ddb9d4fcd1634e1fa9c1bb4012954273c9ff3ef689f6ec6c93e", strip_prefix = "pyyaml-3.12", urls = [ "https://storage.googleapis.com/grpc-bazel-mirror/github.com/yaml/pyyaml/archive/3.12.zip", "https://github.com/yaml/pyyaml/archive/3.12.zip", ], build_file = "@com_github_grpc_grpc//third_party:yaml.BUILD", ) if "com_github_twisted_incremental" not in native.existing_rules(): http_archive( name = "com_github_twisted_incremental", sha256 = "f0ca93359ee70243ff7fbf2d904a6291810bd88cb80ed4aca6fa77f318a41a36", strip_prefix = "incremental-incremental-17.5.0", urls = [ "https://storage.googleapis.com/grpc-bazel-mirror/github.com/twisted/incremental/archive/incremental-17.5.0.zip", "https://github.com/twisted/incremental/archive/incremental-17.5.0.zip", ], build_file = "@com_github_grpc_grpc//third_party:incremental.BUILD", ) if "com_github_zopefoundation_zope_interface" not in native.existing_rules(): http_archive( name = "com_github_zopefoundation_zope_interface", sha256 = "e9579fc6149294339897be3aa9ecd8a29217c0b013fe6f44fcdae00e3204198a", strip_prefix = "zope.interface-4.4.3", urls = [ "https://storage.googleapis.com/grpc-bazel-mirror/github.com/zopefoundation/zope.interface/archive/4.4.3.zip", "https://github.com/zopefoundation/zope.interface/archive/4.4.3.zip", ], build_file = "@com_github_grpc_grpc//third_party:zope_interface.BUILD", ) if "com_github_twisted_constantly" not in native.existing_rules(): http_archive( name = "com_github_twisted_constantly", sha256 = "2702cd322161a579d2c0dbf94af4e57712eedc7bd7bbbdc554a230544f7d346c", strip_prefix = "constantly-15.1.0", urls = [ "https://storage.googleapis.com/grpc-bazel-mirror/github.com/twisted/constantly/archive/15.1.0.zip", "https://github.com/twisted/constantly/archive/15.1.0.zip", ], build_file = "@com_github_grpc_grpc//third_party:constantly.BUILD", ) grpc-1.30.2/bazel/grpc_extra_deps.bzl000066400000000000000000000025271370425124100175140ustar00rootroot00000000000000"""Loads the dependencies necessary for the external repositories defined in grpc_deps.bzl.""" load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") load("@upb//bazel:workspace_deps.bzl", "upb_deps") load("@envoy_api//bazel:repositories.bzl", "api_dependencies") load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies") load("@build_bazel_rules_apple//apple:repositories.bzl", "apple_rules_dependencies") load("@build_bazel_apple_support//lib:repositories.bzl", "apple_support_dependencies") def grpc_extra_deps(): """Loads the extra dependencies. These are necessary for using the external repositories defined in grpc_deps.bzl. Projects that depend on gRPC as an external repository need to call both grpc_deps and grpc_extra_deps, if they have not already loaded the extra dependencies. For example, they can do the following in their WORKSPACE ``` load("@com_github_grpc_grpc//bazel:grpc_deps.bzl", "grpc_deps", "grpc_test_only_deps") grpc_deps() grpc_test_only_deps() load("@com_github_grpc_grpc//bazel:grpc_extra_deps.bzl", "grpc_extra_deps") grpc_extra_deps() ``` """ protobuf_deps() upb_deps() api_dependencies() go_rules_dependencies() go_register_toolchains() apple_rules_dependencies() apple_support_dependencies() grpc-1.30.2/bazel/grpc_python_deps.bzl000066400000000000000000000062151370425124100177100ustar00rootroot00000000000000"""Load dependencies needed to compile and test the grpc python library as a 3rd-party consumer.""" load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") load("@com_github_grpc_grpc//third_party/py:python_configure.bzl", "python_configure") def grpc_python_deps(): # protobuf binds to the name "six", so we can't use it here. # See https://github.com/bazelbuild/bazel/issues/1952 for why bind is # horrible. if "six" not in native.existing_rules(): http_archive( name = "six", build_file = "@com_github_grpc_grpc//third_party:six.BUILD", sha256 = "d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73", urls = ["https://files.pythonhosted.org/packages/dd/bf/4138e7bfb757de47d1f4b6994648ec67a51efe58fa907c1e11e350cddfca/six-1.12.0.tar.gz"], ) if "enum34" not in native.existing_rules(): http_archive( name = "enum34", build_file = "@com_github_grpc_grpc//third_party:enum34.BUILD", strip_prefix = "enum34-1.1.6", sha256 = "8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1", urls = ["https://files.pythonhosted.org/packages/bf/3e/31d502c25302814a7c2f1d3959d2a3b3f78e509002ba91aea64993936876/enum34-1.1.6.tar.gz"], ) if "futures" not in native.existing_rules(): http_archive( name = "futures", build_file = "@com_github_grpc_grpc//third_party:futures.BUILD", strip_prefix = "futures-3.3.0", sha256 = "7e033af76a5e35f58e56da7a91e687706faf4e7bdfb2cbc3f2cca6b9bcda9794", urls = ["https://files.pythonhosted.org/packages/47/04/5fc6c74ad114032cd2c544c575bffc17582295e9cd6a851d6026ab4b2c00/futures-3.3.0.tar.gz"], ) if "io_bazel_rules_python" not in native.existing_rules(): http_archive( name = "io_bazel_rules_python", url = "https://github.com/bazelbuild/rules_python/releases/download/0.0.1/rules_python-0.0.1.tar.gz", sha256 = "aa96a691d3a8177f3215b14b0edc9641787abaaa30363a080165d06ab65e1161", ) if "rules_python" not in native.existing_rules(): http_archive( name = "rules_python", url = "https://github.com/bazelbuild/rules_python/archive/9d68f24659e8ce8b736590ba1e4418af06ec2552.zip", sha256 = "f7402f11691d657161f871e11968a984e5b48b023321935f5a55d7e56cf4758a", strip_prefix = "rules_python-9d68f24659e8ce8b736590ba1e4418af06ec2552", ) python_configure(name = "local_config_python") native.bind( name = "python_headers", actual = "@local_config_python//:python_headers", ) if "cython" not in native.existing_rules(): http_archive( name = "cython", build_file = "@com_github_grpc_grpc//third_party:cython.BUILD", sha256 = "d68138a2381afbdd0876c3cb2a22389043fa01c4badede1228ee073032b07a27", strip_prefix = "cython-c2b80d87658a8525ce091cbe146cb7eaa29fed5c", urls = [ "https://github.com/cython/cython/archive/c2b80d87658a8525ce091cbe146cb7eaa29fed5c.tar.gz", ], ) grpc-1.30.2/bazel/grpc_util.bzl000066400000000000000000000026661370425124100163370ustar00rootroot00000000000000# Follows convention set in objectivec_helpers.cc in the protobuf ObjC compiler. _upper_segments_list = ["url", "http", "https"] def strip_extension(str): return str.rpartition(".")[0] def capitalize(word): if word in _upper_segments_list: return word.upper() else: return word.capitalize() def lower_underscore_to_upper_camel(str): str = strip_extension(str) camel_case_str = "" word = "" for c in str.elems(): # NB: assumes ASCII! if c.isalpha(): word += c.lower() else: # Last word is finished. if len(word): camel_case_str += capitalize(word) word = "" if c.isdigit(): camel_case_str += c # Otherwise, drop the character. See UnderscoresToCamelCase in: # third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc if len(word): camel_case_str += capitalize(word) return camel_case_str def file_to_upper_camel(src): elements = src.rpartition("/") upper_camel = lower_underscore_to_upper_camel(elements[-1]) return "".join(list(elements[:-1]) + [upper_camel]) def file_with_extension(src, ext): elements = src.rpartition("/") return "".join(list(elements[:-1]) + [elements[-1], "." + ext]) def to_upper_camel_with_extension(src, ext): src = file_to_upper_camel(src) return file_with_extension(src, ext) grpc-1.30.2/bazel/objc_grpc_library.bzl000066400000000000000000000043221370425124100200120ustar00rootroot00000000000000load( "//bazel:generate_objc.bzl", "generate_objc", "generate_objc_hdrs", "generate_objc_non_arc_srcs", "generate_objc_srcs", ) load("//bazel:protobuf.bzl", "well_known_proto_libs") def objc_grpc_library(name, deps, srcs = [], use_well_known_protos = False, **kwargs): """Generates messages and/or service stubs for given proto_library and all transitively dependent proto files Args: name: name of target deps: a list of proto_library targets that needs to be compiled srcs: a list of labels to proto files with service stubs to be generated, labels specified must include service stubs; otherwise Bazel will complain about srcs being empty use_well_known_protos: whether to use the well known protos defined in @com_google_protobuf//src/google/protobuf, default to false **kwargs: other arguments """ objc_grpc_library_name = "_" + name + "_objc_grpc_library" generate_objc( name = objc_grpc_library_name, srcs = srcs, deps = deps, use_well_known_protos = use_well_known_protos, **kwargs ) generate_objc_hdrs( name = objc_grpc_library_name + "_hdrs", src = ":" + objc_grpc_library_name, ) generate_objc_non_arc_srcs( name = objc_grpc_library_name + "_non_arc_srcs", src = ":" + objc_grpc_library_name, ) arc_srcs = None if len(srcs) > 0: generate_objc_srcs( name = objc_grpc_library_name + "_srcs", src = ":" + objc_grpc_library_name, ) arc_srcs = [":" + objc_grpc_library_name + "_srcs"] native.objc_library( name = name, hdrs = [":" + objc_grpc_library_name + "_hdrs"], non_arc_srcs = [":" + objc_grpc_library_name + "_non_arc_srcs"], srcs = arc_srcs, defines = [ "GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=0", "GPB_GRPC_FORWARD_DECLARE_MESSAGE_PROTO=0", ], includes = [ "_generated_protos", "src/objective-c", ], deps = [ "@com_github_grpc_grpc//src/objective-c:proto_objc_rpc", "@com_google_protobuf//:protobuf_objc", ], **kwargs ) grpc-1.30.2/bazel/protobuf.bzl000066400000000000000000000206041370425124100161770ustar00rootroot00000000000000"""Utility functions for generating protobuf code.""" load("@rules_proto//proto:defs.bzl", "ProtoInfo") _PROTO_EXTENSION = ".proto" _VIRTUAL_IMPORTS = "/_virtual_imports/" def well_known_proto_libs(): return [ "@com_google_protobuf//:any_proto", "@com_google_protobuf//:api_proto", "@com_google_protobuf//:compiler_plugin_proto", "@com_google_protobuf//:descriptor_proto", "@com_google_protobuf//:duration_proto", "@com_google_protobuf//:empty_proto", "@com_google_protobuf//:field_mask_proto", "@com_google_protobuf//:source_context_proto", "@com_google_protobuf//:struct_proto", "@com_google_protobuf//:timestamp_proto", "@com_google_protobuf//:type_proto", "@com_google_protobuf//:wrappers_proto", ] def get_proto_root(workspace_root): """Gets the root protobuf directory. Args: workspace_root: context.label.workspace_root Returns: The directory relative to which generated include paths should be. """ if workspace_root: return "/{}".format(workspace_root) else: return "" def _strip_proto_extension(proto_filename): if not proto_filename.endswith(_PROTO_EXTENSION): fail('"{}" does not end with "{}"'.format( proto_filename, _PROTO_EXTENSION, )) return proto_filename[:-len(_PROTO_EXTENSION)] def proto_path_to_generated_filename(proto_path, fmt_str): """Calculates the name of a generated file for a protobuf path. For example, "examples/protos/helloworld.proto" might map to "helloworld.pb.h". Args: proto_path: The path to the .proto file. fmt_str: A format string used to calculate the generated filename. For example, "{}.pb.h" might be used to calculate a C++ header filename. Returns: The generated filename. """ return fmt_str.format(_strip_proto_extension(proto_path)) def get_include_directory(source_file): """Returns the include directory path for the source_file. I.e. all of the include statements within the given source_file are calculated relative to the directory returned by this method. The returned directory path can be used as the "--proto_path=" argument value. Args: source_file: A proto file. Returns: The include directory path for the source_file. """ directory = source_file.path prefix_len = 0 if is_in_virtual_imports(source_file): root, relative = source_file.path.split(_VIRTUAL_IMPORTS, 2) result = root + _VIRTUAL_IMPORTS + relative.split("/", 1)[0] return result if not source_file.is_source and directory.startswith(source_file.root.path): prefix_len = len(source_file.root.path) + 1 if directory.startswith("external", prefix_len): external_separator = directory.find("/", prefix_len) repository_separator = directory.find("/", external_separator + 1) return directory[:repository_separator] else: return source_file.root.path if source_file.root.path else "." def get_plugin_args( plugin, flags, dir_out, generate_mocks, plugin_name = "PLUGIN"): """Returns arguments configuring protoc to use a plugin for a language. Args: plugin: An executable file to run as the protoc plugin. flags: The plugin flags to be passed to protoc. dir_out: The output directory for the plugin. generate_mocks: A bool indicating whether to generate mocks. plugin_name: A name of the plugin, it is required to be unique when there are more than one plugin used in a single protoc command. Returns: A list of protoc arguments configuring the plugin. """ augmented_flags = list(flags) if generate_mocks: augmented_flags.append("generate_mock_code=true") augmented_dir_out = dir_out if augmented_flags: augmented_dir_out = ",".join(augmented_flags) + ":" + dir_out return [ "--plugin=protoc-gen-{plugin_name}={plugin_path}".format( plugin_name = plugin_name, plugin_path = plugin.path, ), "--{plugin_name}_out={dir_out}".format( plugin_name = plugin_name, dir_out = augmented_dir_out, ), ] def _get_staged_proto_file(context, source_file): if source_file.dirname == context.label.package or \ is_in_virtual_imports(source_file): # Current target and source_file are in same package return source_file else: # Current target and source_file are in different packages (most # probably even in different repositories) copied_proto = context.actions.declare_file(source_file.basename) context.actions.run_shell( inputs = [source_file], outputs = [copied_proto], command = "cp {} {}".format(source_file.path, copied_proto.path), mnemonic = "CopySourceProto", ) return copied_proto def protos_from_context(context): """Copies proto files to the appropriate location. Args: context: The ctx object for the rule. Returns: A list of the protos. """ protos = [] for src in context.attr.deps: for file in src[ProtoInfo].direct_sources: protos.append(_get_staged_proto_file(context, file)) return protos def includes_from_deps(deps): """Get includes from rule dependencies.""" return [ file for src in deps for file in src[ProtoInfo].transitive_imports.to_list() ] def get_proto_arguments(protos, genfiles_dir_path): """Get the protoc arguments specifying which protos to compile.""" arguments = [] for proto in protos: strip_prefix_len = 0 if is_in_virtual_imports(proto): incl_directory = get_include_directory(proto) if proto.path.startswith(incl_directory): strip_prefix_len = len(incl_directory) + 1 elif proto.path.startswith(genfiles_dir_path): strip_prefix_len = len(genfiles_dir_path) + 1 arguments.append(proto.path[strip_prefix_len:]) return arguments def declare_out_files(protos, context, generated_file_format): """Declares and returns the files to be generated.""" out_file_paths = [] for proto in protos: if not is_in_virtual_imports(proto): out_file_paths.append(proto.basename) else: path = proto.path[proto.path.index(_VIRTUAL_IMPORTS) + 1:] out_file_paths.append(path) return [ context.actions.declare_file( proto_path_to_generated_filename( out_file_path, generated_file_format, ), ) for out_file_path in out_file_paths ] def get_out_dir(protos, context): """ Returns the calculated value for --_out= protoc argument based on the input source proto files and current context. Args: protos: A list of protos to be used as source files in protoc command context: A ctx object for the rule. Returns: The value of --_out= argument. """ at_least_one_virtual = 0 for proto in protos: if is_in_virtual_imports(proto): at_least_one_virtual = True elif at_least_one_virtual: fail("Proto sources must be either all virtual imports or all real") if at_least_one_virtual: out_dir = get_include_directory(protos[0]) ws_root = protos[0].owner.workspace_root if ws_root and out_dir.find(ws_root) >= 0: out_dir = "".join(out_dir.rsplit(ws_root, 1)) return struct( path = out_dir, import_path = out_dir[out_dir.find(_VIRTUAL_IMPORTS) + 1:], ) return struct(path = context.genfiles_dir.path, import_path = None) def is_in_virtual_imports(source_file, virtual_folder = _VIRTUAL_IMPORTS): """Determines if source_file is virtual (is placed in _virtual_imports subdirectory). The output of all proto_library targets which use import_prefix and/or strip_import_prefix arguments is placed under _virtual_imports directory. Args: source_file: A proto file. virtual_folder: The virtual folder name (is set to "_virtual_imports" by default) Returns: True if source_file is located under _virtual_imports, False otherwise. """ return not source_file.is_source and virtual_folder in source_file.path grpc-1.30.2/bazel/python_rules.bzl000066400000000000000000000204071370425124100170730ustar00rootroot00000000000000"""Generates and compiles Python gRPC stubs from proto_library rules.""" load("@rules_proto//proto:defs.bzl", "ProtoInfo") load( "//bazel:protobuf.bzl", "declare_out_files", "get_include_directory", "get_out_dir", "get_plugin_args", "get_proto_arguments", "includes_from_deps", "protos_from_context", ) _GENERATED_PROTO_FORMAT = "{}_pb2.py" _GENERATED_GRPC_PROTO_FORMAT = "{}_pb2_grpc.py" def _generate_py_impl(context): protos = protos_from_context(context) includes = includes_from_deps(context.attr.deps) out_files = declare_out_files(protos, context, _GENERATED_PROTO_FORMAT) tools = [context.executable._protoc] out_dir = get_out_dir(protos, context) arguments = ([ "--python_out={}".format(out_dir.path), ] + [ "--proto_path={}".format(get_include_directory(i)) for i in includes ] + [ "--proto_path={}".format(context.genfiles_dir.path), ]) if context.attr.plugin: arguments += get_plugin_args( context.executable.plugin, [], out_dir.path, False, context.attr.plugin.label.name, ) tools.append(context.executable.plugin) arguments += get_proto_arguments(protos, context.genfiles_dir.path) context.actions.run( inputs = protos + includes, tools = tools, outputs = out_files, executable = context.executable._protoc, arguments = arguments, mnemonic = "ProtocInvocation", ) imports = [] if out_dir.import_path: imports.append("__main__/%s" % out_dir.import_path) return [ DefaultInfo(files = depset(direct = out_files)), PyInfo( transitive_sources = depset(), imports = depset(direct = imports), ), ] _generate_pb2_src = rule( attrs = { "deps": attr.label_list( mandatory = True, allow_empty = False, providers = [ProtoInfo], ), "plugin": attr.label( mandatory = False, executable = True, providers = ["files_to_run"], cfg = "host", ), "_protoc": attr.label( default = Label("//external:protocol_compiler"), providers = ["files_to_run"], executable = True, cfg = "host", ), }, implementation = _generate_py_impl, ) def py_proto_library( name, deps, plugin = None, **kwargs): """Generate python code for a protobuf. Args: name: The name of the target. deps: A list of proto_library dependencies. Must contain a single element. plugin: An optional custom protoc plugin to execute together with generating the protobuf code. **kwargs: Additional arguments to be supplied to the invocation of py_library. """ codegen_target = "_{}_codegen".format(name) if len(deps) != 1: fail("Can only compile a single proto at a time.") _generate_pb2_src( name = codegen_target, deps = deps, plugin = plugin, **kwargs ) native.py_library( name = name, srcs = [":{}".format(codegen_target)], deps = [ "@com_google_protobuf//:protobuf_python", ":{}".format(codegen_target), ], **kwargs ) def _generate_pb2_grpc_src_impl(context): protos = protos_from_context(context) includes = includes_from_deps(context.attr.deps) out_files = declare_out_files(protos, context, _GENERATED_GRPC_PROTO_FORMAT) plugin_flags = ["grpc_2_0"] + context.attr.strip_prefixes arguments = [] tools = [context.executable._protoc, context.executable._grpc_plugin] out_dir = get_out_dir(protos, context) arguments += get_plugin_args( context.executable._grpc_plugin, plugin_flags, out_dir.path, False, ) if context.attr.plugin: arguments += get_plugin_args( context.executable.plugin, [], out_dir.path, False, context.attr.plugin.label.name, ) tools.append(context.executable.plugin) arguments += [ "--proto_path={}".format(get_include_directory(i)) for i in includes ] arguments += ["--proto_path={}".format(context.genfiles_dir.path)] arguments += get_proto_arguments(protos, context.genfiles_dir.path) context.actions.run( inputs = protos + includes, tools = tools, outputs = out_files, executable = context.executable._protoc, arguments = arguments, mnemonic = "ProtocInvocation", ) imports = [] if out_dir.import_path: imports.append("__main__/%s" % out_dir.import_path) return [ DefaultInfo(files = depset(direct = out_files)), PyInfo( transitive_sources = depset(), imports = depset(direct = imports), ), ] _generate_pb2_grpc_src = rule( attrs = { "deps": attr.label_list( mandatory = True, allow_empty = False, providers = [ProtoInfo], ), "strip_prefixes": attr.string_list(), "plugin": attr.label( mandatory = False, executable = True, providers = ["files_to_run"], cfg = "host", ), "_grpc_plugin": attr.label( executable = True, providers = ["files_to_run"], cfg = "host", default = Label("//src/compiler:grpc_python_plugin"), ), "_protoc": attr.label( executable = True, providers = ["files_to_run"], cfg = "host", default = Label("//external:protocol_compiler"), ), }, implementation = _generate_pb2_grpc_src_impl, ) def py_grpc_library( name, srcs, deps, plugin = None, strip_prefixes = [], **kwargs): """Generate python code for gRPC services defined in a protobuf. Args: name: The name of the target. srcs: (List of `labels`) a single proto_library target containing the schema of the service. deps: (List of `labels`) a single py_proto_library target for the proto_library in `srcs`. strip_prefixes: (List of `strings`) If provided, this prefix will be stripped from the beginning of foo_pb2 modules imported by the generated stubs. This is useful in combination with the `imports` attribute of the `py_library` rule. plugin: An optional custom protoc plugin to execute together with generating the gRPC code. **kwargs: Additional arguments to be supplied to the invocation of py_library. """ codegen_grpc_target = "_{}_grpc_codegen".format(name) if len(srcs) != 1: fail("Can only compile a single proto at a time.") if len(deps) != 1: fail("Deps must have length 1.") _generate_pb2_grpc_src( name = codegen_grpc_target, deps = srcs, strip_prefixes = strip_prefixes, plugin = plugin, **kwargs ) native.py_library( name = name, srcs = [ ":{}".format(codegen_grpc_target), ], deps = [ Label("//src/python/grpcio/grpc:grpcio"), ] + deps + [ ":{}".format(codegen_grpc_target), ], **kwargs ) def py2and3_test( name, py_test = native.py_test, **kwargs): """Runs a Python test under both Python 2 and Python 3. Args: name: The name of the test. py_test: The rule to use for each test. **kwargs: Keyword arguments passed directly to the underlying py_test rule. """ if "python_version" in kwargs: fail("Cannot specify 'python_version' in py2and3_test.") names = [name + suffix for suffix in (".python2", ".python3")] python_versions = ["PY2", "PY3"] for case_name, python_version in zip(names, python_versions): py_test( name = case_name, python_version = python_version, **kwargs ) suite_kwargs = {} if "visibility" in kwargs: suite_kwargs["visibility"] = kwargs["visibility"] native.test_suite( name = name, tests = names, **suite_kwargs ) grpc-1.30.2/bazel/test/000077500000000000000000000000001370425124100146035ustar00rootroot00000000000000grpc-1.30.2/bazel/test/python_test_repo/000077500000000000000000000000001370425124100202105ustar00rootroot00000000000000grpc-1.30.2/bazel/test/python_test_repo/.gitignore000066400000000000000000000000261370425124100221760ustar00rootroot00000000000000bazel-* tools/bazel-* grpc-1.30.2/bazel/test/python_test_repo/BUILD000066400000000000000000000055011370425124100207730ustar00rootroot00000000000000# gRPC Bazel BUILD file. # # Copyright 2019 The gRPC 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 # # 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. load("@rules_proto//proto:defs.bzl", "proto_library") load( "@com_github_grpc_grpc//bazel:python_rules.bzl", "py2and3_test", "py_grpc_library", "py_proto_library", ) package(default_testonly = 1) proto_library( name = "helloworld_proto", srcs = ["helloworld.proto"], deps = [ "@com_google_protobuf//:duration_proto", "@com_google_protobuf//:timestamp_proto", ], ) py_proto_library( name = "helloworld_py_pb2", deps = [":helloworld_proto"], ) py_grpc_library( name = "helloworld_py_pb2_grpc", srcs = [":helloworld_proto"], deps = [":helloworld_py_pb2"], ) py_proto_library( name = "duration_py_pb2", deps = ["@com_google_protobuf//:duration_proto"], ) py_proto_library( name = "timestamp_py_pb2", deps = ["@com_google_protobuf//:timestamp_proto"], ) py2and3_test( name = "import_test", srcs = ["helloworld.py"], main = "helloworld.py", deps = [ ":duration_py_pb2", ":helloworld_py_pb2", ":helloworld_py_pb2_grpc", ":timestamp_py_pb2", ], ) # Test compatibility of py_proto_library and py_grpc_library rules with # proto_library targets as deps when the latter use import_prefix and/or # strip_import_prefix arguments proto_library( name = "helloworld_moved_proto", srcs = ["helloworld.proto"], import_prefix = "google/cloud", strip_import_prefix = "", deps = [ "@com_google_protobuf//:duration_proto", "@com_google_protobuf//:timestamp_proto", ], ) # Also test the custom plugin execution parameter py_proto_library( name = "helloworld_moved_py_pb2", plugin = ":dummy_plugin", deps = [":helloworld_moved_proto"], ) py_grpc_library( name = "helloworld_moved_py_pb2_grpc", srcs = [":helloworld_moved_proto"], deps = [":helloworld_moved_py_pb2"], ) py2and3_test( name = "import_moved_test", srcs = ["helloworld_moved.py"], main = "helloworld_moved.py", deps = [ ":duration_py_pb2", ":helloworld_moved_py_pb2", ":helloworld_moved_py_pb2_grpc", ":timestamp_py_pb2", ], ) py_binary( name = "dummy_plugin", srcs = [":dummy_plugin.py"], deps = [ "@com_google_protobuf//:protobuf_python", ], ) grpc-1.30.2/bazel/test/python_test_repo/README.md000066400000000000000000000002761370425124100214740ustar00rootroot00000000000000## Bazel Workspace Test This directory houses a test ensuring that downstream projects can use `@com_github_grpc_grpc//src/python/grpcio:grpcio`, `py_proto_library`, and `py_grpc_library`. grpc-1.30.2/bazel/test/python_test_repo/WORKSPACE000066400000000000000000000003741370425124100214750ustar00rootroot00000000000000local_repository( name = "com_github_grpc_grpc", path = "../../..", ) load("@com_github_grpc_grpc//bazel:grpc_deps.bzl", "grpc_deps") grpc_deps() load("@com_github_grpc_grpc//bazel:grpc_extra_deps.bzl", "grpc_extra_deps") grpc_extra_deps() grpc-1.30.2/bazel/test/python_test_repo/dummy_plugin.py000066400000000000000000000024521370425124100232760ustar00rootroot00000000000000# Copyright 2019 the gRPC 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 # # 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. """A dummy plugin for testing""" import sys from google.protobuf.compiler.plugin_pb2 import CodeGeneratorRequest from google.protobuf.compiler.plugin_pb2 import CodeGeneratorResponse def main(input_file=sys.stdin, output_file=sys.stdout): request = CodeGeneratorRequest.FromString(input_file.buffer.read()) answer = [] for fname in request.file_to_generate: answer.append(CodeGeneratorResponse.File( name=fname.replace('.proto', '_pb2.py'), insertion_point='module_scope', content="# Hello {}, I'm a dummy plugin!".format(fname), )) cgr = CodeGeneratorResponse(file=answer) output_file.buffer.write(cgr.SerializeToString()) if __name__ == '__main__': main() grpc-1.30.2/bazel/test/python_test_repo/helloworld.proto000066400000000000000000000024441370425124100234540ustar00rootroot00000000000000// Copyright 2019 The gRPC 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 // // 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. syntax = "proto3"; option java_multiple_files = true; option java_package = "io.grpc.examples.helloworld"; option java_outer_classname = "HelloWorldProto"; option objc_class_prefix = "HLW"; package helloworld; import "google/protobuf/timestamp.proto"; import "google/protobuf/duration.proto"; // The greeting service definition. service Greeter { // Sends a greeting rpc SayHello (HelloRequest) returns (HelloReply) {} } // The request message containing the user's name. message HelloRequest { string name = 1; google.protobuf.Timestamp request_initiation = 2; } // The response message containing the greetings message HelloReply { string message = 1; google.protobuf.Duration request_duration = 2; } grpc-1.30.2/bazel/test/python_test_repo/helloworld.py000066400000000000000000000047641370425124100227500ustar00rootroot00000000000000# Copyright 2019 the gRPC 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 # # 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. """The Python implementation of the GRPC helloworld.Greeter client.""" import contextlib import datetime import logging import unittest import grpc from google.protobuf import duration_pb2 from google.protobuf import timestamp_pb2 from concurrent import futures import helloworld_pb2 import helloworld_pb2_grpc _HOST = 'localhost' _SERVER_ADDRESS = '{}:0'.format(_HOST) class Greeter(helloworld_pb2_grpc.GreeterServicer): def SayHello(self, request, context): request_in_flight = datetime.datetime.now() - \ request.request_initiation.ToDatetime() request_duration = duration_pb2.Duration() request_duration.FromTimedelta(request_in_flight) return helloworld_pb2.HelloReply( message='Hello, %s!' % request.name, request_duration=request_duration, ) @contextlib.contextmanager def _listening_server(): server = grpc.server(futures.ThreadPoolExecutor()) helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server) port = server.add_insecure_port(_SERVER_ADDRESS) server.start() try: yield port finally: server.stop(0) class ImportTest(unittest.TestCase): def test_import(self): with _listening_server() as port: with grpc.insecure_channel('{}:{}'.format(_HOST, port)) as channel: stub = helloworld_pb2_grpc.GreeterStub(channel) request_timestamp = timestamp_pb2.Timestamp() request_timestamp.GetCurrentTime() response = stub.SayHello(helloworld_pb2.HelloRequest( name='you', request_initiation=request_timestamp, ), wait_for_ready=True) self.assertEqual(response.message, "Hello, you!") self.assertGreater(response.request_duration.nanos, 0) if __name__ == '__main__': logging.basicConfig() unittest.main() grpc-1.30.2/bazel/test/python_test_repo/helloworld_moved.py000066400000000000000000000050301370425124100241250ustar00rootroot00000000000000# Copyright 2019 the gRPC 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 # # 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. """The Python implementation of the GRPC helloworld.Greeter client.""" import contextlib import datetime import logging import unittest import grpc from google.protobuf import duration_pb2 from google.protobuf import timestamp_pb2 from concurrent import futures from google.cloud import helloworld_pb2 from google.cloud import helloworld_pb2_grpc _HOST = 'localhost' _SERVER_ADDRESS = '{}:0'.format(_HOST) class Greeter(helloworld_pb2_grpc.GreeterServicer): def SayHello(self, request, context): request_in_flight = datetime.datetime.now() - \ request.request_initiation.ToDatetime() request_duration = duration_pb2.Duration() request_duration.FromTimedelta(request_in_flight) return helloworld_pb2.HelloReply( message='Hello, %s!' % request.name, request_duration=request_duration, ) @contextlib.contextmanager def _listening_server(): server = grpc.server(futures.ThreadPoolExecutor()) helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server) port = server.add_insecure_port(_SERVER_ADDRESS) server.start() try: yield port finally: server.stop(0) class ImportTest(unittest.TestCase): def test_import(self): with _listening_server() as port: with grpc.insecure_channel('{}:{}'.format(_HOST, port)) as channel: stub = helloworld_pb2_grpc.GreeterStub(channel) request_timestamp = timestamp_pb2.Timestamp() request_timestamp.GetCurrentTime() response = stub.SayHello(helloworld_pb2.HelloRequest( name='you', request_initiation=request_timestamp, ), wait_for_ready=True) self.assertEqual(response.message, "Hello, you!") self.assertGreater(response.request_duration.nanos, 0) if __name__ == '__main__': logging.basicConfig() unittest.main() grpc-1.30.2/bazel/test/python_test_repo/tools/000077500000000000000000000000001370425124100213505ustar00rootroot00000000000000grpc-1.30.2/bazel/test/python_test_repo/tools/bazel000077700000000000000000000000001370425124100256172../../../../tools/bazelustar00rootroot00000000000000grpc-1.30.2/bazel/update_mirror.sh000077500000000000000000000046241370425124100170450ustar00rootroot00000000000000#!/bin/bash # Copyright 2020 The gRPC 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 # # 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. # Script to upload github archives for bazel dependencies to GCS, creating a reliable mirror link. # Archives are copied to "grpc-bazel-mirror" GCS bucket (https://console.cloud.google.com/storage/browser/grpc-bazel-mirror?project=grpc-testing) # and will by downloadable with the https://storage.googleapis.com/grpc-bazel-mirror/ prefix. # # This script should be run each time bazel dependencies are updated. set -e cd $(dirname $0)/.. # Create a temp directory to hold the versioned tarball, # and clean it up when the script exits. tmpdir="$(mktemp -d)" function cleanup { rm -rf "$tmpdir" } trap cleanup EXIT function upload { local file="$1" echo "Downloading https://${file}" curl -L --fail --output "${tmpdir}/archive" "https://${file}" echo "Uploading https://${file} to https://storage.googleapis.com/grpc-bazel-mirror/${file}" gsutil cp -n "${tmpdir}/archive" "gs://grpc-bazel-mirror/${file}" # "-n" will skip existing files rm -rf "${tmpdir}/archive" } # How to check that all mirror URLs work: # 1. clean $HOME/.cache/bazel # 2. bazel clean --expunge # 3. bazel sync (failed downloads will print warnings) # A specific link can be upload manually by running e.g. # upload "github.com/google/boringssl/archive/1c2769383f027befac5b75b6cedd25daf3bf4dcf.tar.gz" # bazel binaries used by the tools/bazel wrapper script upload github.com/bazelbuild/bazel/releases/download/1.0.0/bazel-1.0.0-linux-x86_64 upload github.com/bazelbuild/bazel/releases/download/1.0.0/bazel-1.0.0-darwin-x86_64 upload github.com/bazelbuild/bazel/releases/download/1.0.0/bazel-1.0.0-windows-x86_64.exe # Collect the github archives to mirror from grpc_deps.bzl grep -o '"https://github.com/[^"]*"' bazel/grpc_deps.bzl | sed 's/^"https:\/\///' | sed 's/"$//' | while read -r line ; do echo "Updating mirror for ${line}" upload "${line}" done grpc-1.30.2/build_autogenerated.yaml000066400000000000000000006572561370425124100174460ustar00rootroot00000000000000filegroups: [] libs: - name: address_sorting build: all language: c public_headers: [] headers: - third_party/address_sorting/address_sorting_internal.h - third_party/address_sorting/include/address_sorting/address_sorting.h src: - third_party/address_sorting/address_sorting.c - third_party/address_sorting/address_sorting_posix.c - third_party/address_sorting/address_sorting_windows.c deps: [] secure: false - name: end2end_nosec_tests build: private language: c public_headers: [] headers: - test/core/end2end/cq_verifier.h - test/core/end2end/data/ssl_test_data.h - test/core/end2end/end2end_tests.h - test/core/end2end/fixtures/http_proxy_fixture.h - test/core/end2end/fixtures/local_util.h - test/core/end2end/fixtures/proxy.h - test/core/end2end/tests/cancel_test_helpers.h src: - test/core/end2end/cq_verifier.cc - test/core/end2end/data/client_certs.cc - test/core/end2end/data/server1_cert.cc - test/core/end2end/data/server1_key.cc - test/core/end2end/data/test_root_cert.cc - test/core/end2end/end2end_nosec_tests.cc - test/core/end2end/end2end_test_utils.cc - test/core/end2end/fixtures/http_proxy_fixture.cc - test/core/end2end/fixtures/local_util.cc - test/core/end2end/fixtures/proxy.cc - test/core/end2end/tests/authority_not_supported.cc - test/core/end2end/tests/bad_hostname.cc - test/core/end2end/tests/bad_ping.cc - test/core/end2end/tests/binary_metadata.cc - test/core/end2end/tests/call_host_override.cc - test/core/end2end/tests/cancel_after_accept.cc - test/core/end2end/tests/cancel_after_client_done.cc - test/core/end2end/tests/cancel_after_invoke.cc - test/core/end2end/tests/cancel_after_round_trip.cc - test/core/end2end/tests/cancel_before_invoke.cc - test/core/end2end/tests/cancel_in_a_vacuum.cc - test/core/end2end/tests/cancel_with_status.cc - test/core/end2end/tests/channelz.cc - test/core/end2end/tests/client_streaming.cc - test/core/end2end/tests/compressed_payload.cc - test/core/end2end/tests/connectivity.cc - test/core/end2end/tests/default_host.cc - test/core/end2end/tests/disappearing_server.cc - test/core/end2end/tests/empty_batch.cc - test/core/end2end/tests/filter_call_init_fails.cc - test/core/end2end/tests/filter_causes_close.cc - test/core/end2end/tests/filter_context.cc - test/core/end2end/tests/filter_latency.cc - test/core/end2end/tests/filter_status_code.cc - test/core/end2end/tests/graceful_server_shutdown.cc - test/core/end2end/tests/high_initial_seqno.cc - test/core/end2end/tests/hpack_size.cc - test/core/end2end/tests/idempotent_request.cc - test/core/end2end/tests/invoke_large_request.cc - test/core/end2end/tests/keepalive_timeout.cc - test/core/end2end/tests/large_metadata.cc - test/core/end2end/tests/max_concurrent_streams.cc - test/core/end2end/tests/max_connection_age.cc - test/core/end2end/tests/max_connection_idle.cc - test/core/end2end/tests/max_message_length.cc - test/core/end2end/tests/negative_deadline.cc - test/core/end2end/tests/no_error_on_hotpath.cc - test/core/end2end/tests/no_logging.cc - test/core/end2end/tests/no_op.cc - test/core/end2end/tests/payload.cc - test/core/end2end/tests/ping.cc - test/core/end2end/tests/ping_pong_streaming.cc - test/core/end2end/tests/proxy_auth.cc - test/core/end2end/tests/registered_call.cc - test/core/end2end/tests/request_with_flags.cc - test/core/end2end/tests/request_with_payload.cc - test/core/end2end/tests/resource_quota_server.cc - test/core/end2end/tests/retry.cc - test/core/end2end/tests/retry_cancellation.cc - test/core/end2end/tests/retry_disabled.cc - test/core/end2end/tests/retry_exceeds_buffer_size_in_initial_batch.cc - test/core/end2end/tests/retry_exceeds_buffer_size_in_subsequent_batch.cc - test/core/end2end/tests/retry_non_retriable_status.cc - test/core/end2end/tests/retry_non_retriable_status_before_recv_trailing_metadata_started.cc - test/core/end2end/tests/retry_recv_initial_metadata.cc - test/core/end2end/tests/retry_recv_message.cc - test/core/end2end/tests/retry_server_pushback_delay.cc - test/core/end2end/tests/retry_server_pushback_disabled.cc - test/core/end2end/tests/retry_streaming.cc - test/core/end2end/tests/retry_streaming_after_commit.cc - test/core/end2end/tests/retry_streaming_succeeds_before_replay_finished.cc - test/core/end2end/tests/retry_throttled.cc - test/core/end2end/tests/retry_too_many_attempts.cc - test/core/end2end/tests/server_finishes_request.cc - test/core/end2end/tests/shutdown_finishes_calls.cc - test/core/end2end/tests/shutdown_finishes_tags.cc - test/core/end2end/tests/simple_cacheable_request.cc - test/core/end2end/tests/simple_delayed_request.cc - test/core/end2end/tests/simple_metadata.cc - test/core/end2end/tests/simple_request.cc - test/core/end2end/tests/stream_compression_compressed_payload.cc - test/core/end2end/tests/stream_compression_payload.cc - test/core/end2end/tests/stream_compression_ping_pong_streaming.cc - test/core/end2end/tests/streaming_error_response.cc - test/core/end2end/tests/trailing_metadata.cc - test/core/end2end/tests/workaround_cronet_compression.cc - test/core/end2end/tests/write_buffering.cc - test/core/end2end/tests/write_buffering_at_end.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb secure: false - name: end2end_tests build: private language: c public_headers: [] headers: - test/core/end2end/cq_verifier.h - test/core/end2end/data/ssl_test_data.h - test/core/end2end/end2end_tests.h - test/core/end2end/fixtures/http_proxy_fixture.h - test/core/end2end/fixtures/local_util.h - test/core/end2end/fixtures/proxy.h - test/core/end2end/tests/cancel_test_helpers.h src: - test/core/end2end/cq_verifier.cc - test/core/end2end/data/client_certs.cc - test/core/end2end/data/server1_cert.cc - test/core/end2end/data/server1_key.cc - test/core/end2end/data/test_root_cert.cc - test/core/end2end/end2end_test_utils.cc - test/core/end2end/end2end_tests.cc - test/core/end2end/fixtures/http_proxy_fixture.cc - test/core/end2end/fixtures/local_util.cc - test/core/end2end/fixtures/proxy.cc - test/core/end2end/tests/authority_not_supported.cc - test/core/end2end/tests/bad_hostname.cc - test/core/end2end/tests/bad_ping.cc - test/core/end2end/tests/binary_metadata.cc - test/core/end2end/tests/call_creds.cc - test/core/end2end/tests/call_host_override.cc - test/core/end2end/tests/cancel_after_accept.cc - test/core/end2end/tests/cancel_after_client_done.cc - test/core/end2end/tests/cancel_after_invoke.cc - test/core/end2end/tests/cancel_after_round_trip.cc - test/core/end2end/tests/cancel_before_invoke.cc - test/core/end2end/tests/cancel_in_a_vacuum.cc - test/core/end2end/tests/cancel_with_status.cc - test/core/end2end/tests/channelz.cc - test/core/end2end/tests/client_streaming.cc - test/core/end2end/tests/compressed_payload.cc - test/core/end2end/tests/connectivity.cc - test/core/end2end/tests/default_host.cc - test/core/end2end/tests/disappearing_server.cc - test/core/end2end/tests/empty_batch.cc - test/core/end2end/tests/filter_call_init_fails.cc - test/core/end2end/tests/filter_causes_close.cc - test/core/end2end/tests/filter_context.cc - test/core/end2end/tests/filter_latency.cc - test/core/end2end/tests/filter_status_code.cc - test/core/end2end/tests/graceful_server_shutdown.cc - test/core/end2end/tests/high_initial_seqno.cc - test/core/end2end/tests/hpack_size.cc - test/core/end2end/tests/idempotent_request.cc - test/core/end2end/tests/invoke_large_request.cc - test/core/end2end/tests/keepalive_timeout.cc - test/core/end2end/tests/large_metadata.cc - test/core/end2end/tests/max_concurrent_streams.cc - test/core/end2end/tests/max_connection_age.cc - test/core/end2end/tests/max_connection_idle.cc - test/core/end2end/tests/max_message_length.cc - test/core/end2end/tests/negative_deadline.cc - test/core/end2end/tests/no_error_on_hotpath.cc - test/core/end2end/tests/no_logging.cc - test/core/end2end/tests/no_op.cc - test/core/end2end/tests/payload.cc - test/core/end2end/tests/ping.cc - test/core/end2end/tests/ping_pong_streaming.cc - test/core/end2end/tests/proxy_auth.cc - test/core/end2end/tests/registered_call.cc - test/core/end2end/tests/request_with_flags.cc - test/core/end2end/tests/request_with_payload.cc - test/core/end2end/tests/resource_quota_server.cc - test/core/end2end/tests/retry.cc - test/core/end2end/tests/retry_cancellation.cc - test/core/end2end/tests/retry_disabled.cc - test/core/end2end/tests/retry_exceeds_buffer_size_in_initial_batch.cc - test/core/end2end/tests/retry_exceeds_buffer_size_in_subsequent_batch.cc - test/core/end2end/tests/retry_non_retriable_status.cc - test/core/end2end/tests/retry_non_retriable_status_before_recv_trailing_metadata_started.cc - test/core/end2end/tests/retry_recv_initial_metadata.cc - test/core/end2end/tests/retry_recv_message.cc - test/core/end2end/tests/retry_server_pushback_delay.cc - test/core/end2end/tests/retry_server_pushback_disabled.cc - test/core/end2end/tests/retry_streaming.cc - test/core/end2end/tests/retry_streaming_after_commit.cc - test/core/end2end/tests/retry_streaming_succeeds_before_replay_finished.cc - test/core/end2end/tests/retry_throttled.cc - test/core/end2end/tests/retry_too_many_attempts.cc - test/core/end2end/tests/server_finishes_request.cc - test/core/end2end/tests/shutdown_finishes_calls.cc - test/core/end2end/tests/shutdown_finishes_tags.cc - test/core/end2end/tests/simple_cacheable_request.cc - test/core/end2end/tests/simple_delayed_request.cc - test/core/end2end/tests/simple_metadata.cc - test/core/end2end/tests/simple_request.cc - test/core/end2end/tests/stream_compression_compressed_payload.cc - test/core/end2end/tests/stream_compression_payload.cc - test/core/end2end/tests/stream_compression_ping_pong_streaming.cc - test/core/end2end/tests/streaming_error_response.cc - test/core/end2end/tests/trailing_metadata.cc - test/core/end2end/tests/workaround_cronet_compression.cc - test/core/end2end/tests/write_buffering.cc - test/core/end2end/tests/write_buffering_at_end.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb secure: true - name: gpr build: all language: c public_headers: - include/grpc/impl/codegen/atm.h - include/grpc/impl/codegen/atm_gcc_atomic.h - include/grpc/impl/codegen/atm_gcc_sync.h - include/grpc/impl/codegen/atm_windows.h - include/grpc/impl/codegen/byte_buffer.h - include/grpc/impl/codegen/byte_buffer_reader.h - include/grpc/impl/codegen/compression_types.h - include/grpc/impl/codegen/connectivity_state.h - include/grpc/impl/codegen/fork.h - include/grpc/impl/codegen/gpr_slice.h - include/grpc/impl/codegen/gpr_types.h - include/grpc/impl/codegen/grpc_types.h - include/grpc/impl/codegen/log.h - include/grpc/impl/codegen/port_platform.h - include/grpc/impl/codegen/propagation_bits.h - include/grpc/impl/codegen/slice.h - include/grpc/impl/codegen/status.h - include/grpc/impl/codegen/sync.h - include/grpc/impl/codegen/sync_abseil.h - include/grpc/impl/codegen/sync_custom.h - include/grpc/impl/codegen/sync_generic.h - include/grpc/impl/codegen/sync_posix.h - include/grpc/impl/codegen/sync_windows.h - include/grpc/support/alloc.h - include/grpc/support/atm.h - include/grpc/support/atm_gcc_atomic.h - include/grpc/support/atm_gcc_sync.h - include/grpc/support/atm_windows.h - include/grpc/support/cpu.h - include/grpc/support/log.h - include/grpc/support/log_windows.h - include/grpc/support/port_platform.h - include/grpc/support/string_util.h - include/grpc/support/sync.h - include/grpc/support/sync_abseil.h - include/grpc/support/sync_custom.h - include/grpc/support/sync_generic.h - include/grpc/support/sync_posix.h - include/grpc/support/sync_windows.h - include/grpc/support/thd_id.h - include/grpc/support/time.h headers: - src/core/lib/gpr/alloc.h - src/core/lib/gpr/arena.h - src/core/lib/gpr/env.h - src/core/lib/gpr/murmur_hash.h - src/core/lib/gpr/spinlock.h - src/core/lib/gpr/string.h - src/core/lib/gpr/string_windows.h - src/core/lib/gpr/time_precise.h - src/core/lib/gpr/tls.h - src/core/lib/gpr/tls_gcc.h - src/core/lib/gpr/tls_msvc.h - src/core/lib/gpr/tls_pthread.h - src/core/lib/gpr/tmpfile.h - src/core/lib/gpr/useful.h - src/core/lib/gprpp/arena.h - src/core/lib/gprpp/atomic.h - src/core/lib/gprpp/fork.h - src/core/lib/gprpp/global_config.h - src/core/lib/gprpp/global_config_custom.h - src/core/lib/gprpp/global_config_env.h - src/core/lib/gprpp/global_config_generic.h - src/core/lib/gprpp/host_port.h - src/core/lib/gprpp/manual_constructor.h - src/core/lib/gprpp/map.h - src/core/lib/gprpp/memory.h - src/core/lib/gprpp/mpscq.h - src/core/lib/gprpp/sync.h - src/core/lib/gprpp/thd.h - src/core/lib/profiling/timers.h src: - src/core/lib/gpr/alloc.cc - src/core/lib/gpr/atm.cc - src/core/lib/gpr/cpu_iphone.cc - src/core/lib/gpr/cpu_linux.cc - src/core/lib/gpr/cpu_posix.cc - src/core/lib/gpr/cpu_windows.cc - src/core/lib/gpr/env_linux.cc - src/core/lib/gpr/env_posix.cc - src/core/lib/gpr/env_windows.cc - src/core/lib/gpr/log.cc - src/core/lib/gpr/log_android.cc - src/core/lib/gpr/log_linux.cc - src/core/lib/gpr/log_posix.cc - src/core/lib/gpr/log_windows.cc - src/core/lib/gpr/murmur_hash.cc - src/core/lib/gpr/string.cc - src/core/lib/gpr/string_posix.cc - src/core/lib/gpr/string_util_windows.cc - src/core/lib/gpr/string_windows.cc - src/core/lib/gpr/sync.cc - src/core/lib/gpr/sync_abseil.cc - src/core/lib/gpr/sync_posix.cc - src/core/lib/gpr/sync_windows.cc - src/core/lib/gpr/time.cc - src/core/lib/gpr/time_posix.cc - src/core/lib/gpr/time_precise.cc - src/core/lib/gpr/time_windows.cc - src/core/lib/gpr/tls_pthread.cc - src/core/lib/gpr/tmpfile_msys.cc - src/core/lib/gpr/tmpfile_posix.cc - src/core/lib/gpr/tmpfile_windows.cc - src/core/lib/gpr/wrap_memcpy.cc - src/core/lib/gprpp/arena.cc - src/core/lib/gprpp/fork.cc - src/core/lib/gprpp/global_config_env.cc - src/core/lib/gprpp/host_port.cc - src/core/lib/gprpp/mpscq.cc - src/core/lib/gprpp/thd_posix.cc - src/core/lib/gprpp/thd_windows.cc - src/core/lib/profiling/basic_timers.cc - src/core/lib/profiling/stap_timers.cc deps: - absl/time:time - absl/strings:strings - absl/strings:str_format - absl/memory:memory secure: false - name: grpc build: all language: c public_headers: - include/grpc/byte_buffer.h - include/grpc/byte_buffer_reader.h - include/grpc/census.h - include/grpc/compression.h - include/grpc/fork.h - include/grpc/grpc.h - include/grpc/grpc_posix.h - include/grpc/grpc_security.h - include/grpc/grpc_security_constants.h - include/grpc/load_reporting.h - include/grpc/slice.h - include/grpc/slice_buffer.h - include/grpc/status.h - include/grpc/support/workaround_list.h headers: - src/core/ext/filters/client_channel/backend_metric.h - src/core/ext/filters/client_channel/backup_poller.h - src/core/ext/filters/client_channel/client_channel.h - src/core/ext/filters/client_channel/client_channel_channelz.h - src/core/ext/filters/client_channel/client_channel_factory.h - src/core/ext/filters/client_channel/connector.h - src/core/ext/filters/client_channel/global_subchannel_pool.h - src/core/ext/filters/client_channel/health/health_check_client.h - src/core/ext/filters/client_channel/http_connect_handshaker.h - src/core/ext/filters/client_channel/http_proxy.h - src/core/ext/filters/client_channel/lb_policy.h - src/core/ext/filters/client_channel/lb_policy/address_filtering.h - src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h - src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h - src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h - src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h - src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h - src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h - src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h - src/core/ext/filters/client_channel/lb_policy/subchannel_list.h - src/core/ext/filters/client_channel/lb_policy/xds/xds.h - src/core/ext/filters/client_channel/lb_policy_factory.h - src/core/ext/filters/client_channel/lb_policy_registry.h - src/core/ext/filters/client_channel/local_subchannel_pool.h - src/core/ext/filters/client_channel/parse_address.h - src/core/ext/filters/client_channel/proxy_mapper.h - src/core/ext/filters/client_channel/proxy_mapper_registry.h - src/core/ext/filters/client_channel/resolver.h - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h - src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h - src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h - src/core/ext/filters/client_channel/resolver_factory.h - src/core/ext/filters/client_channel/resolver_registry.h - src/core/ext/filters/client_channel/resolver_result_parsing.h - src/core/ext/filters/client_channel/resolving_lb_policy.h - src/core/ext/filters/client_channel/retry_throttle.h - src/core/ext/filters/client_channel/server_address.h - src/core/ext/filters/client_channel/service_config.h - src/core/ext/filters/client_channel/service_config_call_data.h - src/core/ext/filters/client_channel/service_config_parser.h - src/core/ext/filters/client_channel/subchannel.h - src/core/ext/filters/client_channel/subchannel_interface.h - src/core/ext/filters/client_channel/subchannel_pool_interface.h - src/core/ext/filters/client_channel/xds/xds_api.h - src/core/ext/filters/client_channel/xds/xds_bootstrap.h - src/core/ext/filters/client_channel/xds/xds_channel.h - src/core/ext/filters/client_channel/xds/xds_channel_args.h - src/core/ext/filters/client_channel/xds/xds_client.h - src/core/ext/filters/client_channel/xds/xds_client_stats.h - src/core/ext/filters/deadline/deadline_filter.h - src/core/ext/filters/http/client/http_client_filter.h - src/core/ext/filters/http/client_authority_filter.h - src/core/ext/filters/http/message_compress/message_compress_filter.h - src/core/ext/filters/http/message_compress/message_decompress_filter.h - src/core/ext/filters/http/server/http_server_filter.h - src/core/ext/filters/max_age/max_age_filter.h - src/core/ext/filters/message_size/message_size_filter.h - src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h - src/core/ext/filters/workarounds/workaround_utils.h - src/core/ext/transport/chttp2/alpn/alpn.h - src/core/ext/transport/chttp2/client/authority.h - src/core/ext/transport/chttp2/client/chttp2_connector.h - src/core/ext/transport/chttp2/server/chttp2_server.h - src/core/ext/transport/chttp2/transport/bin_decoder.h - src/core/ext/transport/chttp2/transport/bin_encoder.h - src/core/ext/transport/chttp2/transport/chttp2_transport.h - src/core/ext/transport/chttp2/transport/context_list.h - src/core/ext/transport/chttp2/transport/flow_control.h - src/core/ext/transport/chttp2/transport/frame.h - src/core/ext/transport/chttp2/transport/frame_data.h - src/core/ext/transport/chttp2/transport/frame_goaway.h - src/core/ext/transport/chttp2/transport/frame_ping.h - src/core/ext/transport/chttp2/transport/frame_rst_stream.h - src/core/ext/transport/chttp2/transport/frame_settings.h - src/core/ext/transport/chttp2/transport/frame_window_update.h - src/core/ext/transport/chttp2/transport/hpack_encoder.h - src/core/ext/transport/chttp2/transport/hpack_parser.h - src/core/ext/transport/chttp2/transport/hpack_table.h - src/core/ext/transport/chttp2/transport/http2_settings.h - src/core/ext/transport/chttp2/transport/huffsyms.h - src/core/ext/transport/chttp2/transport/incoming_metadata.h - src/core/ext/transport/chttp2/transport/internal.h - src/core/ext/transport/chttp2/transport/stream_map.h - src/core/ext/transport/chttp2/transport/varint.h - src/core/ext/transport/inproc/inproc_transport.h - src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h - src/core/ext/upb-generated/envoy/annotations/resource.upb.h - src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h - src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h - src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h - src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h - src/core/ext/upb-generated/envoy/api/v2/cds.upb.h - src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h - src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h - src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h - src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h - src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h - src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h - src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h - src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h - src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h - src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h - src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h - src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h - src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h - src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h - src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h - src/core/ext/upb-generated/envoy/api/v2/eds.upb.h - src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h - src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h - src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h - src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h - src/core/ext/upb-generated/envoy/api/v2/lds.upb.h - src/core/ext/upb-generated/envoy/api/v2/listener.upb.h - src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h - src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h - src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h - src/core/ext/upb-generated/envoy/api/v2/rds.upb.h - src/core/ext/upb-generated/envoy/api/v2/route.upb.h - src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h - src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h - src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h - src/core/ext/upb-generated/envoy/api/v2/srds.upb.h - src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h - src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h - src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h - src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h - src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h - src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h - src/core/ext/upb-generated/envoy/type/http.upb.h - src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h - src/core/ext/upb-generated/envoy/type/matcher/string.upb.h - src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h - src/core/ext/upb-generated/envoy/type/percent.upb.h - src/core/ext/upb-generated/envoy/type/range.upb.h - src/core/ext/upb-generated/envoy/type/semantic_version.upb.h - src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h - src/core/ext/upb-generated/gogoproto/gogo.upb.h - src/core/ext/upb-generated/google/api/annotations.upb.h - src/core/ext/upb-generated/google/api/http.upb.h - src/core/ext/upb-generated/google/protobuf/any.upb.h - src/core/ext/upb-generated/google/protobuf/descriptor.upb.h - src/core/ext/upb-generated/google/protobuf/duration.upb.h - src/core/ext/upb-generated/google/protobuf/empty.upb.h - src/core/ext/upb-generated/google/protobuf/struct.upb.h - src/core/ext/upb-generated/google/protobuf/timestamp.upb.h - src/core/ext/upb-generated/google/protobuf/wrappers.upb.h - src/core/ext/upb-generated/google/rpc/status.upb.h - src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h - src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h - src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h - src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h - src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h - src/core/ext/upb-generated/udpa/annotations/migrate.upb.h - src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h - src/core/ext/upb-generated/udpa/annotations/status.upb.h - src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h - src/core/ext/upb-generated/validate/validate.upb.h - src/core/lib/avl/avl.h - src/core/lib/backoff/backoff.h - src/core/lib/channel/channel_args.h - src/core/lib/channel/channel_stack.h - src/core/lib/channel/channel_stack_builder.h - src/core/lib/channel/channel_trace.h - src/core/lib/channel/channelz.h - src/core/lib/channel/channelz_registry.h - src/core/lib/channel/connected_channel.h - src/core/lib/channel/context.h - src/core/lib/channel/handshaker.h - src/core/lib/channel/handshaker_factory.h - src/core/lib/channel/handshaker_registry.h - src/core/lib/channel/status_util.h - src/core/lib/compression/algorithm_metadata.h - src/core/lib/compression/compression_args.h - src/core/lib/compression/compression_internal.h - src/core/lib/compression/message_compress.h - src/core/lib/compression/stream_compression.h - src/core/lib/compression/stream_compression_gzip.h - src/core/lib/compression/stream_compression_identity.h - src/core/lib/debug/stats.h - src/core/lib/debug/stats_data.h - src/core/lib/debug/trace.h - src/core/lib/gprpp/atomic.h - src/core/lib/gprpp/debug_location.h - src/core/lib/gprpp/orphanable.h - src/core/lib/gprpp/ref_counted.h - src/core/lib/gprpp/ref_counted_ptr.h - src/core/lib/http/format_request.h - src/core/lib/http/httpcli.h - src/core/lib/http/parser.h - src/core/lib/iomgr/block_annotate.h - src/core/lib/iomgr/buffer_list.h - src/core/lib/iomgr/call_combiner.h - src/core/lib/iomgr/cfstream_handle.h - src/core/lib/iomgr/closure.h - src/core/lib/iomgr/combiner.h - src/core/lib/iomgr/dynamic_annotations.h - src/core/lib/iomgr/endpoint.h - src/core/lib/iomgr/endpoint_cfstream.h - src/core/lib/iomgr/endpoint_pair.h - src/core/lib/iomgr/error.h - src/core/lib/iomgr/error_cfstream.h - src/core/lib/iomgr/error_internal.h - src/core/lib/iomgr/ev_apple.h - src/core/lib/iomgr/ev_epoll1_linux.h - src/core/lib/iomgr/ev_epollex_linux.h - src/core/lib/iomgr/ev_poll_posix.h - src/core/lib/iomgr/ev_posix.h - src/core/lib/iomgr/exec_ctx.h - src/core/lib/iomgr/executor.h - src/core/lib/iomgr/executor/mpmcqueue.h - src/core/lib/iomgr/executor/threadpool.h - src/core/lib/iomgr/gethostname.h - src/core/lib/iomgr/grpc_if_nametoindex.h - src/core/lib/iomgr/internal_errqueue.h - src/core/lib/iomgr/iocp_windows.h - src/core/lib/iomgr/iomgr.h - src/core/lib/iomgr/iomgr_custom.h - src/core/lib/iomgr/iomgr_internal.h - src/core/lib/iomgr/iomgr_posix.h - src/core/lib/iomgr/is_epollexclusive_available.h - src/core/lib/iomgr/load_file.h - src/core/lib/iomgr/lockfree_event.h - src/core/lib/iomgr/nameser.h - src/core/lib/iomgr/poller/eventmanager_libuv.h - src/core/lib/iomgr/polling_entity.h - src/core/lib/iomgr/pollset.h - src/core/lib/iomgr/pollset_custom.h - src/core/lib/iomgr/pollset_set.h - src/core/lib/iomgr/pollset_set_custom.h - src/core/lib/iomgr/pollset_set_windows.h - src/core/lib/iomgr/pollset_uv.h - src/core/lib/iomgr/pollset_windows.h - src/core/lib/iomgr/port.h - src/core/lib/iomgr/python_util.h - src/core/lib/iomgr/resolve_address.h - src/core/lib/iomgr/resolve_address_custom.h - src/core/lib/iomgr/resource_quota.h - src/core/lib/iomgr/sockaddr.h - src/core/lib/iomgr/sockaddr_custom.h - src/core/lib/iomgr/sockaddr_posix.h - src/core/lib/iomgr/sockaddr_utils.h - src/core/lib/iomgr/sockaddr_windows.h - src/core/lib/iomgr/socket_factory_posix.h - src/core/lib/iomgr/socket_mutator.h - src/core/lib/iomgr/socket_utils.h - src/core/lib/iomgr/socket_utils_posix.h - src/core/lib/iomgr/socket_windows.h - src/core/lib/iomgr/sys_epoll_wrapper.h - src/core/lib/iomgr/tcp_client.h - src/core/lib/iomgr/tcp_client_posix.h - src/core/lib/iomgr/tcp_custom.h - src/core/lib/iomgr/tcp_posix.h - src/core/lib/iomgr/tcp_server.h - src/core/lib/iomgr/tcp_server_utils_posix.h - src/core/lib/iomgr/tcp_windows.h - src/core/lib/iomgr/time_averaged_stats.h - src/core/lib/iomgr/timer.h - src/core/lib/iomgr/timer_custom.h - src/core/lib/iomgr/timer_generic.h - src/core/lib/iomgr/timer_heap.h - src/core/lib/iomgr/timer_manager.h - src/core/lib/iomgr/udp_server.h - src/core/lib/iomgr/unix_sockets_posix.h - src/core/lib/iomgr/wakeup_fd_pipe.h - src/core/lib/iomgr/wakeup_fd_posix.h - src/core/lib/iomgr/work_serializer.h - src/core/lib/json/json.h - src/core/lib/security/context/security_context.h - src/core/lib/security/credentials/alts/alts_credentials.h - src/core/lib/security/credentials/alts/check_gcp_environment.h - src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h - src/core/lib/security/credentials/composite/composite_credentials.h - src/core/lib/security/credentials/credentials.h - src/core/lib/security/credentials/fake/fake_credentials.h - src/core/lib/security/credentials/google_default/google_default_credentials.h - src/core/lib/security/credentials/iam/iam_credentials.h - src/core/lib/security/credentials/jwt/json_token.h - src/core/lib/security/credentials/jwt/jwt_credentials.h - src/core/lib/security/credentials/jwt/jwt_verifier.h - src/core/lib/security/credentials/local/local_credentials.h - src/core/lib/security/credentials/oauth2/oauth2_credentials.h - src/core/lib/security/credentials/plugin/plugin_credentials.h - src/core/lib/security/credentials/ssl/ssl_credentials.h - src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h - src/core/lib/security/credentials/tls/tls_credentials.h - src/core/lib/security/security_connector/alts/alts_security_connector.h - src/core/lib/security/security_connector/fake/fake_security_connector.h - src/core/lib/security/security_connector/load_system_roots.h - src/core/lib/security/security_connector/load_system_roots_linux.h - src/core/lib/security/security_connector/local/local_security_connector.h - src/core/lib/security/security_connector/security_connector.h - src/core/lib/security/security_connector/ssl/ssl_security_connector.h - src/core/lib/security/security_connector/ssl_utils.h - src/core/lib/security/security_connector/ssl_utils_config.h - src/core/lib/security/security_connector/tls/tls_security_connector.h - src/core/lib/security/transport/auth_filters.h - src/core/lib/security/transport/secure_endpoint.h - src/core/lib/security/transport/security_handshaker.h - src/core/lib/security/transport/target_authority_table.h - src/core/lib/security/transport/tsi_error.h - src/core/lib/security/util/json_util.h - src/core/lib/slice/b64.h - src/core/lib/slice/percent_encoding.h - src/core/lib/slice/slice_hash_table.h - src/core/lib/slice/slice_internal.h - src/core/lib/slice/slice_string_helpers.h - src/core/lib/slice/slice_utils.h - src/core/lib/slice/slice_weak_hash_table.h - src/core/lib/surface/api_trace.h - src/core/lib/surface/call.h - src/core/lib/surface/call_test_only.h - src/core/lib/surface/channel.h - src/core/lib/surface/channel_init.h - src/core/lib/surface/channel_stack_type.h - src/core/lib/surface/completion_queue.h - src/core/lib/surface/completion_queue_factory.h - src/core/lib/surface/event_string.h - src/core/lib/surface/init.h - src/core/lib/surface/lame_client.h - src/core/lib/surface/server.h - src/core/lib/surface/validate_metadata.h - src/core/lib/transport/bdp_estimator.h - src/core/lib/transport/byte_stream.h - src/core/lib/transport/connectivity_state.h - src/core/lib/transport/error_utils.h - src/core/lib/transport/http2_errors.h - src/core/lib/transport/metadata.h - src/core/lib/transport/metadata_batch.h - src/core/lib/transport/pid_controller.h - src/core/lib/transport/static_metadata.h - src/core/lib/transport/status_conversion.h - src/core/lib/transport/status_metadata.h - src/core/lib/transport/timeout_encoding.h - src/core/lib/transport/transport.h - src/core/lib/transport/transport_impl.h - src/core/lib/uri/uri_parser.h - src/core/tsi/alts/crypt/gsec.h - src/core/tsi/alts/frame_protector/alts_counter.h - src/core/tsi/alts/frame_protector/alts_crypter.h - src/core/tsi/alts/frame_protector/alts_frame_protector.h - src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h - src/core/tsi/alts/frame_protector/frame_handler.h - src/core/tsi/alts/handshaker/alts_handshaker_client.h - src/core/tsi/alts/handshaker/alts_shared_resource.h - src/core/tsi/alts/handshaker/alts_tsi_handshaker.h - src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h - src/core/tsi/alts/handshaker/alts_tsi_utils.h - src/core/tsi/alts/handshaker/transport_security_common_api.h - src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h - src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h - src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h - src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h - src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h - src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h - src/core/tsi/fake_transport_security.h - src/core/tsi/local_transport_security.h - src/core/tsi/ssl/session_cache/ssl_session.h - src/core/tsi/ssl/session_cache/ssl_session_cache.h - src/core/tsi/ssl_transport_security.h - src/core/tsi/ssl_types.h - src/core/tsi/transport_security.h - src/core/tsi/transport_security_grpc.h - src/core/tsi/transport_security_interface.h src: - src/core/ext/filters/census/grpc_context.cc - src/core/ext/filters/client_channel/backend_metric.cc - src/core/ext/filters/client_channel/backup_poller.cc - src/core/ext/filters/client_channel/channel_connectivity.cc - src/core/ext/filters/client_channel/client_channel.cc - src/core/ext/filters/client_channel/client_channel_channelz.cc - src/core/ext/filters/client_channel/client_channel_factory.cc - src/core/ext/filters/client_channel/client_channel_plugin.cc - src/core/ext/filters/client_channel/global_subchannel_pool.cc - src/core/ext/filters/client_channel/health/health_check_client.cc - src/core/ext/filters/client_channel/http_connect_handshaker.cc - src/core/ext/filters/client_channel/http_proxy.cc - src/core/ext/filters/client_channel/lb_policy.cc - src/core/ext/filters/client_channel/lb_policy/address_filtering.cc - src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc - src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc - src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc - src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc - src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc - src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc - src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc - src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc - src/core/ext/filters/client_channel/lb_policy/priority/priority.cc - src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc - src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc - src/core/ext/filters/client_channel/lb_policy/xds/cds.cc - src/core/ext/filters/client_channel/lb_policy/xds/eds.cc - src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc - src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc - src/core/ext/filters/client_channel/lb_policy_registry.cc - src/core/ext/filters/client_channel/local_subchannel_pool.cc - src/core/ext/filters/client_channel/parse_address.cc - src/core/ext/filters/client_channel/proxy_mapper_registry.cc - src/core/ext/filters/client_channel/resolver.cc - src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc - src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc - src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc - src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc - src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc - src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc - src/core/ext/filters/client_channel/resolver_registry.cc - src/core/ext/filters/client_channel/resolver_result_parsing.cc - src/core/ext/filters/client_channel/resolving_lb_policy.cc - src/core/ext/filters/client_channel/retry_throttle.cc - src/core/ext/filters/client_channel/server_address.cc - src/core/ext/filters/client_channel/service_config.cc - src/core/ext/filters/client_channel/service_config_parser.cc - src/core/ext/filters/client_channel/subchannel.cc - src/core/ext/filters/client_channel/subchannel_pool_interface.cc - src/core/ext/filters/client_channel/xds/xds_api.cc - src/core/ext/filters/client_channel/xds/xds_bootstrap.cc - src/core/ext/filters/client_channel/xds/xds_channel_secure.cc - src/core/ext/filters/client_channel/xds/xds_client.cc - src/core/ext/filters/client_channel/xds/xds_client_stats.cc - src/core/ext/filters/client_idle/client_idle_filter.cc - src/core/ext/filters/deadline/deadline_filter.cc - src/core/ext/filters/http/client/http_client_filter.cc - src/core/ext/filters/http/client_authority_filter.cc - src/core/ext/filters/http/http_filters_plugin.cc - src/core/ext/filters/http/message_compress/message_compress_filter.cc - src/core/ext/filters/http/message_compress/message_decompress_filter.cc - src/core/ext/filters/http/server/http_server_filter.cc - src/core/ext/filters/max_age/max_age_filter.cc - src/core/ext/filters/message_size/message_size_filter.cc - src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc - src/core/ext/filters/workarounds/workaround_utils.cc - src/core/ext/transport/chttp2/alpn/alpn.cc - src/core/ext/transport/chttp2/client/authority.cc - src/core/ext/transport/chttp2/client/chttp2_connector.cc - src/core/ext/transport/chttp2/client/insecure/channel_create.cc - src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc - src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc - src/core/ext/transport/chttp2/server/chttp2_server.cc - src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc - src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc - src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc - src/core/ext/transport/chttp2/transport/bin_decoder.cc - src/core/ext/transport/chttp2/transport/bin_encoder.cc - src/core/ext/transport/chttp2/transport/chttp2_plugin.cc - src/core/ext/transport/chttp2/transport/chttp2_transport.cc - src/core/ext/transport/chttp2/transport/context_list.cc - src/core/ext/transport/chttp2/transport/flow_control.cc - src/core/ext/transport/chttp2/transport/frame_data.cc - src/core/ext/transport/chttp2/transport/frame_goaway.cc - src/core/ext/transport/chttp2/transport/frame_ping.cc - src/core/ext/transport/chttp2/transport/frame_rst_stream.cc - src/core/ext/transport/chttp2/transport/frame_settings.cc - src/core/ext/transport/chttp2/transport/frame_window_update.cc - src/core/ext/transport/chttp2/transport/hpack_encoder.cc - src/core/ext/transport/chttp2/transport/hpack_parser.cc - src/core/ext/transport/chttp2/transport/hpack_table.cc - src/core/ext/transport/chttp2/transport/http2_settings.cc - src/core/ext/transport/chttp2/transport/huffsyms.cc - src/core/ext/transport/chttp2/transport/incoming_metadata.cc - src/core/ext/transport/chttp2/transport/parsing.cc - src/core/ext/transport/chttp2/transport/stream_lists.cc - src/core/ext/transport/chttp2/transport/stream_map.cc - src/core/ext/transport/chttp2/transport/varint.cc - src/core/ext/transport/chttp2/transport/writing.cc - src/core/ext/transport/inproc/inproc_plugin.cc - src/core/ext/transport/inproc/inproc_transport.cc - src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c - src/core/ext/upb-generated/envoy/annotations/resource.upb.c - src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c - src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c - src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c - src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c - src/core/ext/upb-generated/envoy/api/v2/cds.upb.c - src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c - src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c - src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c - src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c - src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c - src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c - src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c - src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c - src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c - src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c - src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c - src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c - src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c - src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c - src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c - src/core/ext/upb-generated/envoy/api/v2/eds.upb.c - src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c - src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c - src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c - src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c - src/core/ext/upb-generated/envoy/api/v2/lds.upb.c - src/core/ext/upb-generated/envoy/api/v2/listener.upb.c - src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c - src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c - src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c - src/core/ext/upb-generated/envoy/api/v2/rds.upb.c - src/core/ext/upb-generated/envoy/api/v2/route.upb.c - src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c - src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c - src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c - src/core/ext/upb-generated/envoy/api/v2/srds.upb.c - src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c - src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c - src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c - src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c - src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c - src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c - src/core/ext/upb-generated/envoy/type/http.upb.c - src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c - src/core/ext/upb-generated/envoy/type/matcher/string.upb.c - src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c - src/core/ext/upb-generated/envoy/type/percent.upb.c - src/core/ext/upb-generated/envoy/type/range.upb.c - src/core/ext/upb-generated/envoy/type/semantic_version.upb.c - src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c - src/core/ext/upb-generated/gogoproto/gogo.upb.c - src/core/ext/upb-generated/google/api/annotations.upb.c - src/core/ext/upb-generated/google/api/http.upb.c - src/core/ext/upb-generated/google/protobuf/any.upb.c - src/core/ext/upb-generated/google/protobuf/descriptor.upb.c - src/core/ext/upb-generated/google/protobuf/duration.upb.c - src/core/ext/upb-generated/google/protobuf/empty.upb.c - src/core/ext/upb-generated/google/protobuf/struct.upb.c - src/core/ext/upb-generated/google/protobuf/timestamp.upb.c - src/core/ext/upb-generated/google/protobuf/wrappers.upb.c - src/core/ext/upb-generated/google/rpc/status.upb.c - src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c - src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c - src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c - src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c - src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c - src/core/ext/upb-generated/udpa/annotations/migrate.upb.c - src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c - src/core/ext/upb-generated/udpa/annotations/status.upb.c - src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c - src/core/ext/upb-generated/validate/validate.upb.c - src/core/lib/avl/avl.cc - src/core/lib/backoff/backoff.cc - src/core/lib/channel/channel_args.cc - src/core/lib/channel/channel_stack.cc - src/core/lib/channel/channel_stack_builder.cc - src/core/lib/channel/channel_trace.cc - src/core/lib/channel/channelz.cc - src/core/lib/channel/channelz_registry.cc - src/core/lib/channel/connected_channel.cc - src/core/lib/channel/handshaker.cc - src/core/lib/channel/handshaker_registry.cc - src/core/lib/channel/status_util.cc - src/core/lib/compression/compression.cc - src/core/lib/compression/compression_args.cc - src/core/lib/compression/compression_internal.cc - src/core/lib/compression/message_compress.cc - src/core/lib/compression/stream_compression.cc - src/core/lib/compression/stream_compression_gzip.cc - src/core/lib/compression/stream_compression_identity.cc - src/core/lib/debug/stats.cc - src/core/lib/debug/stats_data.cc - src/core/lib/debug/trace.cc - src/core/lib/http/format_request.cc - src/core/lib/http/httpcli.cc - src/core/lib/http/httpcli_security_connector.cc - src/core/lib/http/parser.cc - src/core/lib/iomgr/buffer_list.cc - src/core/lib/iomgr/call_combiner.cc - src/core/lib/iomgr/cfstream_handle.cc - src/core/lib/iomgr/combiner.cc - src/core/lib/iomgr/dualstack_socket_posix.cc - src/core/lib/iomgr/endpoint.cc - src/core/lib/iomgr/endpoint_cfstream.cc - src/core/lib/iomgr/endpoint_pair_posix.cc - src/core/lib/iomgr/endpoint_pair_uv.cc - src/core/lib/iomgr/endpoint_pair_windows.cc - src/core/lib/iomgr/error.cc - src/core/lib/iomgr/error_cfstream.cc - src/core/lib/iomgr/ev_apple.cc - src/core/lib/iomgr/ev_epoll1_linux.cc - src/core/lib/iomgr/ev_epollex_linux.cc - src/core/lib/iomgr/ev_poll_posix.cc - src/core/lib/iomgr/ev_posix.cc - src/core/lib/iomgr/ev_windows.cc - src/core/lib/iomgr/exec_ctx.cc - src/core/lib/iomgr/executor.cc - src/core/lib/iomgr/executor/mpmcqueue.cc - src/core/lib/iomgr/executor/threadpool.cc - src/core/lib/iomgr/fork_posix.cc - src/core/lib/iomgr/fork_windows.cc - src/core/lib/iomgr/gethostname_fallback.cc - src/core/lib/iomgr/gethostname_host_name_max.cc - src/core/lib/iomgr/gethostname_sysconf.cc - src/core/lib/iomgr/grpc_if_nametoindex_posix.cc - src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc - src/core/lib/iomgr/internal_errqueue.cc - src/core/lib/iomgr/iocp_windows.cc - src/core/lib/iomgr/iomgr.cc - src/core/lib/iomgr/iomgr_custom.cc - src/core/lib/iomgr/iomgr_internal.cc - src/core/lib/iomgr/iomgr_posix.cc - src/core/lib/iomgr/iomgr_posix_cfstream.cc - src/core/lib/iomgr/iomgr_uv.cc - src/core/lib/iomgr/iomgr_windows.cc - src/core/lib/iomgr/is_epollexclusive_available.cc - src/core/lib/iomgr/load_file.cc - src/core/lib/iomgr/lockfree_event.cc - src/core/lib/iomgr/poller/eventmanager_libuv.cc - src/core/lib/iomgr/polling_entity.cc - src/core/lib/iomgr/pollset.cc - src/core/lib/iomgr/pollset_custom.cc - src/core/lib/iomgr/pollset_set.cc - src/core/lib/iomgr/pollset_set_custom.cc - src/core/lib/iomgr/pollset_set_windows.cc - src/core/lib/iomgr/pollset_uv.cc - src/core/lib/iomgr/pollset_windows.cc - src/core/lib/iomgr/resolve_address.cc - src/core/lib/iomgr/resolve_address_custom.cc - src/core/lib/iomgr/resolve_address_posix.cc - src/core/lib/iomgr/resolve_address_windows.cc - src/core/lib/iomgr/resource_quota.cc - src/core/lib/iomgr/sockaddr_utils.cc - src/core/lib/iomgr/socket_factory_posix.cc - src/core/lib/iomgr/socket_mutator.cc - src/core/lib/iomgr/socket_utils_common_posix.cc - src/core/lib/iomgr/socket_utils_linux.cc - src/core/lib/iomgr/socket_utils_posix.cc - src/core/lib/iomgr/socket_utils_uv.cc - src/core/lib/iomgr/socket_utils_windows.cc - src/core/lib/iomgr/socket_windows.cc - src/core/lib/iomgr/tcp_client.cc - src/core/lib/iomgr/tcp_client_cfstream.cc - src/core/lib/iomgr/tcp_client_custom.cc - src/core/lib/iomgr/tcp_client_posix.cc - src/core/lib/iomgr/tcp_client_windows.cc - src/core/lib/iomgr/tcp_custom.cc - src/core/lib/iomgr/tcp_posix.cc - src/core/lib/iomgr/tcp_server.cc - src/core/lib/iomgr/tcp_server_custom.cc - src/core/lib/iomgr/tcp_server_posix.cc - src/core/lib/iomgr/tcp_server_utils_posix_common.cc - src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc - src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc - src/core/lib/iomgr/tcp_server_windows.cc - src/core/lib/iomgr/tcp_uv.cc - src/core/lib/iomgr/tcp_windows.cc - src/core/lib/iomgr/time_averaged_stats.cc - src/core/lib/iomgr/timer.cc - src/core/lib/iomgr/timer_custom.cc - src/core/lib/iomgr/timer_generic.cc - src/core/lib/iomgr/timer_heap.cc - src/core/lib/iomgr/timer_manager.cc - src/core/lib/iomgr/timer_uv.cc - src/core/lib/iomgr/udp_server.cc - src/core/lib/iomgr/unix_sockets_posix.cc - src/core/lib/iomgr/unix_sockets_posix_noop.cc - src/core/lib/iomgr/wakeup_fd_eventfd.cc - src/core/lib/iomgr/wakeup_fd_nospecial.cc - src/core/lib/iomgr/wakeup_fd_pipe.cc - src/core/lib/iomgr/wakeup_fd_posix.cc - src/core/lib/iomgr/work_serializer.cc - src/core/lib/json/json_reader.cc - src/core/lib/json/json_writer.cc - src/core/lib/security/context/security_context.cc - src/core/lib/security/credentials/alts/alts_credentials.cc - src/core/lib/security/credentials/alts/check_gcp_environment.cc - src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc - src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc - src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc - src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc - src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc - src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc - src/core/lib/security/credentials/composite/composite_credentials.cc - src/core/lib/security/credentials/credentials.cc - src/core/lib/security/credentials/credentials_metadata.cc - src/core/lib/security/credentials/fake/fake_credentials.cc - src/core/lib/security/credentials/google_default/credentials_generic.cc - src/core/lib/security/credentials/google_default/google_default_credentials.cc - src/core/lib/security/credentials/iam/iam_credentials.cc - src/core/lib/security/credentials/jwt/json_token.cc - src/core/lib/security/credentials/jwt/jwt_credentials.cc - src/core/lib/security/credentials/jwt/jwt_verifier.cc - src/core/lib/security/credentials/local/local_credentials.cc - src/core/lib/security/credentials/oauth2/oauth2_credentials.cc - src/core/lib/security/credentials/plugin/plugin_credentials.cc - src/core/lib/security/credentials/ssl/ssl_credentials.cc - src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc - src/core/lib/security/credentials/tls/tls_credentials.cc - src/core/lib/security/security_connector/alts/alts_security_connector.cc - src/core/lib/security/security_connector/fake/fake_security_connector.cc - src/core/lib/security/security_connector/load_system_roots_fallback.cc - src/core/lib/security/security_connector/load_system_roots_linux.cc - src/core/lib/security/security_connector/local/local_security_connector.cc - src/core/lib/security/security_connector/security_connector.cc - src/core/lib/security/security_connector/ssl/ssl_security_connector.cc - src/core/lib/security/security_connector/ssl_utils.cc - src/core/lib/security/security_connector/ssl_utils_config.cc - src/core/lib/security/security_connector/tls/tls_security_connector.cc - src/core/lib/security/transport/client_auth_filter.cc - src/core/lib/security/transport/secure_endpoint.cc - src/core/lib/security/transport/security_handshaker.cc - src/core/lib/security/transport/server_auth_filter.cc - src/core/lib/security/transport/target_authority_table.cc - src/core/lib/security/transport/tsi_error.cc - src/core/lib/security/util/json_util.cc - src/core/lib/slice/b64.cc - src/core/lib/slice/percent_encoding.cc - src/core/lib/slice/slice.cc - src/core/lib/slice/slice_buffer.cc - src/core/lib/slice/slice_intern.cc - src/core/lib/slice/slice_string_helpers.cc - src/core/lib/surface/api_trace.cc - src/core/lib/surface/byte_buffer.cc - src/core/lib/surface/byte_buffer_reader.cc - src/core/lib/surface/call.cc - src/core/lib/surface/call_details.cc - src/core/lib/surface/call_log_batch.cc - src/core/lib/surface/channel.cc - src/core/lib/surface/channel_init.cc - src/core/lib/surface/channel_ping.cc - src/core/lib/surface/channel_stack_type.cc - src/core/lib/surface/completion_queue.cc - src/core/lib/surface/completion_queue_factory.cc - src/core/lib/surface/event_string.cc - src/core/lib/surface/init.cc - src/core/lib/surface/init_secure.cc - src/core/lib/surface/lame_client.cc - src/core/lib/surface/metadata_array.cc - src/core/lib/surface/server.cc - src/core/lib/surface/validate_metadata.cc - src/core/lib/surface/version.cc - src/core/lib/transport/bdp_estimator.cc - src/core/lib/transport/byte_stream.cc - src/core/lib/transport/connectivity_state.cc - src/core/lib/transport/error_utils.cc - src/core/lib/transport/metadata.cc - src/core/lib/transport/metadata_batch.cc - src/core/lib/transport/pid_controller.cc - src/core/lib/transport/static_metadata.cc - src/core/lib/transport/status_conversion.cc - src/core/lib/transport/status_metadata.cc - src/core/lib/transport/timeout_encoding.cc - src/core/lib/transport/transport.cc - src/core/lib/transport/transport_op_string.cc - src/core/lib/uri/uri_parser.cc - src/core/plugin_registry/grpc_plugin_registry.cc - src/core/tsi/alts/crypt/aes_gcm.cc - src/core/tsi/alts/crypt/gsec.cc - src/core/tsi/alts/frame_protector/alts_counter.cc - src/core/tsi/alts/frame_protector/alts_crypter.cc - src/core/tsi/alts/frame_protector/alts_frame_protector.cc - src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc - src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc - src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc - src/core/tsi/alts/frame_protector/frame_handler.cc - src/core/tsi/alts/handshaker/alts_handshaker_client.cc - src/core/tsi/alts/handshaker/alts_shared_resource.cc - src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc - src/core/tsi/alts/handshaker/alts_tsi_utils.cc - src/core/tsi/alts/handshaker/transport_security_common_api.cc - src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc - src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc - src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc - src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc - src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc - src/core/tsi/fake_transport_security.cc - src/core/tsi/local_transport_security.cc - src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc - src/core/tsi/ssl/session_cache/ssl_session_cache.cc - src/core/tsi/ssl/session_cache/ssl_session_openssl.cc - src/core/tsi/ssl_transport_security.cc - src/core/tsi/transport_security.cc - src/core/tsi/transport_security_grpc.cc deps: - gpr - address_sorting - upb - absl/types:optional - absl/strings:strings - absl/container:inlined_vector baselib: true deps_linkage: static dll: true generate_plugin_registry: true secure: true - name: grpc_csharp_ext build: all language: c public_headers: [] headers: [] src: - src/csharp/ext/grpc_csharp_ext.c deps: - grpc - gpr - address_sorting - upb deps_linkage: static dll: only - name: grpc_test_util build: private language: c public_headers: [] headers: - test/core/util/cmdline.h - test/core/util/debugger_macros.h - test/core/util/fuzzer_util.h - test/core/util/grpc_profiler.h - test/core/util/histogram.h - test/core/util/memory_counters.h - test/core/util/mock_endpoint.h - test/core/util/parse_hexstring.h - test/core/util/passthru_endpoint.h - test/core/util/port.h - test/core/util/port_server_client.h - test/core/util/reconnect_server.h - test/core/util/slice_splitter.h - test/core/util/subprocess.h - test/core/util/test_config.h - test/core/util/test_tcp_server.h - test/core/util/tracer_util.h - test/core/util/trickle_endpoint.h src: - test/core/util/cmdline.cc - test/core/util/debugger_macros.cc - test/core/util/fuzzer_util.cc - test/core/util/grpc_profiler.cc - test/core/util/histogram.cc - test/core/util/memory_counters.cc - test/core/util/mock_endpoint.cc - test/core/util/parse_hexstring.cc - test/core/util/passthru_endpoint.cc - test/core/util/port.cc - test/core/util/port_isolated_runtime_environment.cc - test/core/util/port_server_client.cc - test/core/util/reconnect_server.cc - test/core/util/slice_splitter.cc - test/core/util/subprocess_posix.cc - test/core/util/subprocess_windows.cc - test/core/util/test_config.cc - test/core/util/test_tcp_server.cc - test/core/util/tracer_util.cc - test/core/util/trickle_endpoint.cc deps: - grpc - gpr - address_sorting - upb - name: grpc_test_util_unsecure build: private language: c public_headers: [] headers: - test/core/util/cmdline.h - test/core/util/debugger_macros.h - test/core/util/fuzzer_util.h - test/core/util/grpc_profiler.h - test/core/util/histogram.h - test/core/util/memory_counters.h - test/core/util/mock_endpoint.h - test/core/util/parse_hexstring.h - test/core/util/passthru_endpoint.h - test/core/util/port.h - test/core/util/port_server_client.h - test/core/util/reconnect_server.h - test/core/util/slice_splitter.h - test/core/util/subprocess.h - test/core/util/test_config.h - test/core/util/test_tcp_server.h - test/core/util/tracer_util.h - test/core/util/trickle_endpoint.h src: - test/core/util/cmdline.cc - test/core/util/debugger_macros.cc - test/core/util/fuzzer_util.cc - test/core/util/grpc_profiler.cc - test/core/util/histogram.cc - test/core/util/memory_counters.cc - test/core/util/mock_endpoint.cc - test/core/util/parse_hexstring.cc - test/core/util/passthru_endpoint.cc - test/core/util/port.cc - test/core/util/port_isolated_runtime_environment.cc - test/core/util/port_server_client.cc - test/core/util/reconnect_server.cc - test/core/util/slice_splitter.cc - test/core/util/subprocess_posix.cc - test/core/util/subprocess_windows.cc - test/core/util/test_config.cc - test/core/util/test_tcp_server.cc - test/core/util/tracer_util.cc - test/core/util/trickle_endpoint.cc deps: - grpc_unsecure - gpr - address_sorting - upb secure: false - name: grpc_unsecure build: all language: c public_headers: - include/grpc/byte_buffer.h - include/grpc/byte_buffer_reader.h - include/grpc/census.h - include/grpc/compression.h - include/grpc/fork.h - include/grpc/grpc.h - include/grpc/grpc_posix.h - include/grpc/grpc_security_constants.h - include/grpc/load_reporting.h - include/grpc/slice.h - include/grpc/slice_buffer.h - include/grpc/status.h - include/grpc/support/workaround_list.h headers: - src/core/ext/filters/client_channel/backend_metric.h - src/core/ext/filters/client_channel/backup_poller.h - src/core/ext/filters/client_channel/client_channel.h - src/core/ext/filters/client_channel/client_channel_channelz.h - src/core/ext/filters/client_channel/client_channel_factory.h - src/core/ext/filters/client_channel/connector.h - src/core/ext/filters/client_channel/global_subchannel_pool.h - src/core/ext/filters/client_channel/health/health_check_client.h - src/core/ext/filters/client_channel/http_connect_handshaker.h - src/core/ext/filters/client_channel/http_proxy.h - src/core/ext/filters/client_channel/lb_policy.h - src/core/ext/filters/client_channel/lb_policy/address_filtering.h - src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h - src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h - src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h - src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h - src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h - src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h - src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h - src/core/ext/filters/client_channel/lb_policy/subchannel_list.h - src/core/ext/filters/client_channel/lb_policy/xds/xds.h - src/core/ext/filters/client_channel/lb_policy_factory.h - src/core/ext/filters/client_channel/lb_policy_registry.h - src/core/ext/filters/client_channel/local_subchannel_pool.h - src/core/ext/filters/client_channel/parse_address.h - src/core/ext/filters/client_channel/proxy_mapper.h - src/core/ext/filters/client_channel/proxy_mapper_registry.h - src/core/ext/filters/client_channel/resolver.h - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h - src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h - src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h - src/core/ext/filters/client_channel/resolver_factory.h - src/core/ext/filters/client_channel/resolver_registry.h - src/core/ext/filters/client_channel/resolver_result_parsing.h - src/core/ext/filters/client_channel/resolving_lb_policy.h - src/core/ext/filters/client_channel/retry_throttle.h - src/core/ext/filters/client_channel/server_address.h - src/core/ext/filters/client_channel/service_config.h - src/core/ext/filters/client_channel/service_config_call_data.h - src/core/ext/filters/client_channel/service_config_parser.h - src/core/ext/filters/client_channel/subchannel.h - src/core/ext/filters/client_channel/subchannel_interface.h - src/core/ext/filters/client_channel/subchannel_pool_interface.h - src/core/ext/filters/client_channel/xds/xds_api.h - src/core/ext/filters/client_channel/xds/xds_bootstrap.h - src/core/ext/filters/client_channel/xds/xds_channel.h - src/core/ext/filters/client_channel/xds/xds_channel_args.h - src/core/ext/filters/client_channel/xds/xds_client.h - src/core/ext/filters/client_channel/xds/xds_client_stats.h - src/core/ext/filters/deadline/deadline_filter.h - src/core/ext/filters/http/client/http_client_filter.h - src/core/ext/filters/http/client_authority_filter.h - src/core/ext/filters/http/message_compress/message_compress_filter.h - src/core/ext/filters/http/message_compress/message_decompress_filter.h - src/core/ext/filters/http/server/http_server_filter.h - src/core/ext/filters/max_age/max_age_filter.h - src/core/ext/filters/message_size/message_size_filter.h - src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h - src/core/ext/filters/workarounds/workaround_utils.h - src/core/ext/transport/chttp2/alpn/alpn.h - src/core/ext/transport/chttp2/client/authority.h - src/core/ext/transport/chttp2/client/chttp2_connector.h - src/core/ext/transport/chttp2/server/chttp2_server.h - src/core/ext/transport/chttp2/transport/bin_decoder.h - src/core/ext/transport/chttp2/transport/bin_encoder.h - src/core/ext/transport/chttp2/transport/chttp2_transport.h - src/core/ext/transport/chttp2/transport/context_list.h - src/core/ext/transport/chttp2/transport/flow_control.h - src/core/ext/transport/chttp2/transport/frame.h - src/core/ext/transport/chttp2/transport/frame_data.h - src/core/ext/transport/chttp2/transport/frame_goaway.h - src/core/ext/transport/chttp2/transport/frame_ping.h - src/core/ext/transport/chttp2/transport/frame_rst_stream.h - src/core/ext/transport/chttp2/transport/frame_settings.h - src/core/ext/transport/chttp2/transport/frame_window_update.h - src/core/ext/transport/chttp2/transport/hpack_encoder.h - src/core/ext/transport/chttp2/transport/hpack_parser.h - src/core/ext/transport/chttp2/transport/hpack_table.h - src/core/ext/transport/chttp2/transport/http2_settings.h - src/core/ext/transport/chttp2/transport/huffsyms.h - src/core/ext/transport/chttp2/transport/incoming_metadata.h - src/core/ext/transport/chttp2/transport/internal.h - src/core/ext/transport/chttp2/transport/stream_map.h - src/core/ext/transport/chttp2/transport/varint.h - src/core/ext/transport/inproc/inproc_transport.h - src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h - src/core/ext/upb-generated/envoy/annotations/resource.upb.h - src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h - src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h - src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h - src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h - src/core/ext/upb-generated/envoy/api/v2/cds.upb.h - src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h - src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h - src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h - src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h - src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h - src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h - src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h - src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h - src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h - src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h - src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h - src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h - src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h - src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h - src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h - src/core/ext/upb-generated/envoy/api/v2/eds.upb.h - src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h - src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h - src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h - src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h - src/core/ext/upb-generated/envoy/api/v2/lds.upb.h - src/core/ext/upb-generated/envoy/api/v2/listener.upb.h - src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h - src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h - src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h - src/core/ext/upb-generated/envoy/api/v2/rds.upb.h - src/core/ext/upb-generated/envoy/api/v2/route.upb.h - src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h - src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h - src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h - src/core/ext/upb-generated/envoy/api/v2/srds.upb.h - src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h - src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h - src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h - src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h - src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h - src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h - src/core/ext/upb-generated/envoy/type/http.upb.h - src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h - src/core/ext/upb-generated/envoy/type/matcher/string.upb.h - src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h - src/core/ext/upb-generated/envoy/type/percent.upb.h - src/core/ext/upb-generated/envoy/type/range.upb.h - src/core/ext/upb-generated/envoy/type/semantic_version.upb.h - src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h - src/core/ext/upb-generated/gogoproto/gogo.upb.h - src/core/ext/upb-generated/google/api/annotations.upb.h - src/core/ext/upb-generated/google/api/http.upb.h - src/core/ext/upb-generated/google/protobuf/any.upb.h - src/core/ext/upb-generated/google/protobuf/descriptor.upb.h - src/core/ext/upb-generated/google/protobuf/duration.upb.h - src/core/ext/upb-generated/google/protobuf/empty.upb.h - src/core/ext/upb-generated/google/protobuf/struct.upb.h - src/core/ext/upb-generated/google/protobuf/timestamp.upb.h - src/core/ext/upb-generated/google/protobuf/wrappers.upb.h - src/core/ext/upb-generated/google/rpc/status.upb.h - src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h - src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h - src/core/ext/upb-generated/udpa/annotations/migrate.upb.h - src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h - src/core/ext/upb-generated/udpa/annotations/status.upb.h - src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h - src/core/ext/upb-generated/validate/validate.upb.h - src/core/lib/avl/avl.h - src/core/lib/backoff/backoff.h - src/core/lib/channel/channel_args.h - src/core/lib/channel/channel_stack.h - src/core/lib/channel/channel_stack_builder.h - src/core/lib/channel/channel_trace.h - src/core/lib/channel/channelz.h - src/core/lib/channel/channelz_registry.h - src/core/lib/channel/connected_channel.h - src/core/lib/channel/context.h - src/core/lib/channel/handshaker.h - src/core/lib/channel/handshaker_factory.h - src/core/lib/channel/handshaker_registry.h - src/core/lib/channel/status_util.h - src/core/lib/compression/algorithm_metadata.h - src/core/lib/compression/compression_args.h - src/core/lib/compression/compression_internal.h - src/core/lib/compression/message_compress.h - src/core/lib/compression/stream_compression.h - src/core/lib/compression/stream_compression_gzip.h - src/core/lib/compression/stream_compression_identity.h - src/core/lib/debug/stats.h - src/core/lib/debug/stats_data.h - src/core/lib/debug/trace.h - src/core/lib/gprpp/atomic.h - src/core/lib/gprpp/debug_location.h - src/core/lib/gprpp/orphanable.h - src/core/lib/gprpp/ref_counted.h - src/core/lib/gprpp/ref_counted_ptr.h - src/core/lib/http/format_request.h - src/core/lib/http/httpcli.h - src/core/lib/http/parser.h - src/core/lib/iomgr/block_annotate.h - src/core/lib/iomgr/buffer_list.h - src/core/lib/iomgr/call_combiner.h - src/core/lib/iomgr/cfstream_handle.h - src/core/lib/iomgr/closure.h - src/core/lib/iomgr/combiner.h - src/core/lib/iomgr/dynamic_annotations.h - src/core/lib/iomgr/endpoint.h - src/core/lib/iomgr/endpoint_cfstream.h - src/core/lib/iomgr/endpoint_pair.h - src/core/lib/iomgr/error.h - src/core/lib/iomgr/error_cfstream.h - src/core/lib/iomgr/error_internal.h - src/core/lib/iomgr/ev_apple.h - src/core/lib/iomgr/ev_epoll1_linux.h - src/core/lib/iomgr/ev_epollex_linux.h - src/core/lib/iomgr/ev_poll_posix.h - src/core/lib/iomgr/ev_posix.h - src/core/lib/iomgr/exec_ctx.h - src/core/lib/iomgr/executor.h - src/core/lib/iomgr/executor/mpmcqueue.h - src/core/lib/iomgr/executor/threadpool.h - src/core/lib/iomgr/gethostname.h - src/core/lib/iomgr/grpc_if_nametoindex.h - src/core/lib/iomgr/internal_errqueue.h - src/core/lib/iomgr/iocp_windows.h - src/core/lib/iomgr/iomgr.h - src/core/lib/iomgr/iomgr_custom.h - src/core/lib/iomgr/iomgr_internal.h - src/core/lib/iomgr/iomgr_posix.h - src/core/lib/iomgr/is_epollexclusive_available.h - src/core/lib/iomgr/load_file.h - src/core/lib/iomgr/lockfree_event.h - src/core/lib/iomgr/nameser.h - src/core/lib/iomgr/poller/eventmanager_libuv.h - src/core/lib/iomgr/polling_entity.h - src/core/lib/iomgr/pollset.h - src/core/lib/iomgr/pollset_custom.h - src/core/lib/iomgr/pollset_set.h - src/core/lib/iomgr/pollset_set_custom.h - src/core/lib/iomgr/pollset_set_windows.h - src/core/lib/iomgr/pollset_uv.h - src/core/lib/iomgr/pollset_windows.h - src/core/lib/iomgr/port.h - src/core/lib/iomgr/python_util.h - src/core/lib/iomgr/resolve_address.h - src/core/lib/iomgr/resolve_address_custom.h - src/core/lib/iomgr/resource_quota.h - src/core/lib/iomgr/sockaddr.h - src/core/lib/iomgr/sockaddr_custom.h - src/core/lib/iomgr/sockaddr_posix.h - src/core/lib/iomgr/sockaddr_utils.h - src/core/lib/iomgr/sockaddr_windows.h - src/core/lib/iomgr/socket_factory_posix.h - src/core/lib/iomgr/socket_mutator.h - src/core/lib/iomgr/socket_utils.h - src/core/lib/iomgr/socket_utils_posix.h - src/core/lib/iomgr/socket_windows.h - src/core/lib/iomgr/sys_epoll_wrapper.h - src/core/lib/iomgr/tcp_client.h - src/core/lib/iomgr/tcp_client_posix.h - src/core/lib/iomgr/tcp_custom.h - src/core/lib/iomgr/tcp_posix.h - src/core/lib/iomgr/tcp_server.h - src/core/lib/iomgr/tcp_server_utils_posix.h - src/core/lib/iomgr/tcp_windows.h - src/core/lib/iomgr/time_averaged_stats.h - src/core/lib/iomgr/timer.h - src/core/lib/iomgr/timer_custom.h - src/core/lib/iomgr/timer_generic.h - src/core/lib/iomgr/timer_heap.h - src/core/lib/iomgr/timer_manager.h - src/core/lib/iomgr/udp_server.h - src/core/lib/iomgr/unix_sockets_posix.h - src/core/lib/iomgr/wakeup_fd_pipe.h - src/core/lib/iomgr/wakeup_fd_posix.h - src/core/lib/iomgr/work_serializer.h - src/core/lib/json/json.h - src/core/lib/slice/b64.h - src/core/lib/slice/percent_encoding.h - src/core/lib/slice/slice_hash_table.h - src/core/lib/slice/slice_internal.h - src/core/lib/slice/slice_string_helpers.h - src/core/lib/slice/slice_utils.h - src/core/lib/slice/slice_weak_hash_table.h - src/core/lib/surface/api_trace.h - src/core/lib/surface/call.h - src/core/lib/surface/call_test_only.h - src/core/lib/surface/channel.h - src/core/lib/surface/channel_init.h - src/core/lib/surface/channel_stack_type.h - src/core/lib/surface/completion_queue.h - src/core/lib/surface/completion_queue_factory.h - src/core/lib/surface/event_string.h - src/core/lib/surface/init.h - src/core/lib/surface/lame_client.h - src/core/lib/surface/server.h - src/core/lib/surface/validate_metadata.h - src/core/lib/transport/bdp_estimator.h - src/core/lib/transport/byte_stream.h - src/core/lib/transport/connectivity_state.h - src/core/lib/transport/error_utils.h - src/core/lib/transport/http2_errors.h - src/core/lib/transport/metadata.h - src/core/lib/transport/metadata_batch.h - src/core/lib/transport/pid_controller.h - src/core/lib/transport/static_metadata.h - src/core/lib/transport/status_conversion.h - src/core/lib/transport/status_metadata.h - src/core/lib/transport/timeout_encoding.h - src/core/lib/transport/transport.h - src/core/lib/transport/transport_impl.h - src/core/lib/uri/uri_parser.h src: - src/core/ext/filters/census/grpc_context.cc - src/core/ext/filters/client_channel/backend_metric.cc - src/core/ext/filters/client_channel/backup_poller.cc - src/core/ext/filters/client_channel/channel_connectivity.cc - src/core/ext/filters/client_channel/client_channel.cc - src/core/ext/filters/client_channel/client_channel_channelz.cc - src/core/ext/filters/client_channel/client_channel_factory.cc - src/core/ext/filters/client_channel/client_channel_plugin.cc - src/core/ext/filters/client_channel/global_subchannel_pool.cc - src/core/ext/filters/client_channel/health/health_check_client.cc - src/core/ext/filters/client_channel/http_connect_handshaker.cc - src/core/ext/filters/client_channel/http_proxy.cc - src/core/ext/filters/client_channel/lb_policy.cc - src/core/ext/filters/client_channel/lb_policy/address_filtering.cc - src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc - src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc - src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc - src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc - src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.cc - src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc - src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc - src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc - src/core/ext/filters/client_channel/lb_policy/priority/priority.cc - src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc - src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc - src/core/ext/filters/client_channel/lb_policy/xds/cds.cc - src/core/ext/filters/client_channel/lb_policy/xds/eds.cc - src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc - src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc - src/core/ext/filters/client_channel/lb_policy_registry.cc - src/core/ext/filters/client_channel/local_subchannel_pool.cc - src/core/ext/filters/client_channel/parse_address.cc - src/core/ext/filters/client_channel/proxy_mapper_registry.cc - src/core/ext/filters/client_channel/resolver.cc - src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc - src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc - src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc - src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc - src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc - src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc - src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc - src/core/ext/filters/client_channel/resolver_registry.cc - src/core/ext/filters/client_channel/resolver_result_parsing.cc - src/core/ext/filters/client_channel/resolving_lb_policy.cc - src/core/ext/filters/client_channel/retry_throttle.cc - src/core/ext/filters/client_channel/server_address.cc - src/core/ext/filters/client_channel/service_config.cc - src/core/ext/filters/client_channel/service_config_parser.cc - src/core/ext/filters/client_channel/subchannel.cc - src/core/ext/filters/client_channel/subchannel_pool_interface.cc - src/core/ext/filters/client_channel/xds/xds_api.cc - src/core/ext/filters/client_channel/xds/xds_bootstrap.cc - src/core/ext/filters/client_channel/xds/xds_channel.cc - src/core/ext/filters/client_channel/xds/xds_client.cc - src/core/ext/filters/client_channel/xds/xds_client_stats.cc - src/core/ext/filters/client_idle/client_idle_filter.cc - src/core/ext/filters/deadline/deadline_filter.cc - src/core/ext/filters/http/client/http_client_filter.cc - src/core/ext/filters/http/client_authority_filter.cc - src/core/ext/filters/http/http_filters_plugin.cc - src/core/ext/filters/http/message_compress/message_compress_filter.cc - src/core/ext/filters/http/message_compress/message_decompress_filter.cc - src/core/ext/filters/http/server/http_server_filter.cc - src/core/ext/filters/max_age/max_age_filter.cc - src/core/ext/filters/message_size/message_size_filter.cc - src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc - src/core/ext/filters/workarounds/workaround_utils.cc - src/core/ext/transport/chttp2/alpn/alpn.cc - src/core/ext/transport/chttp2/client/authority.cc - src/core/ext/transport/chttp2/client/chttp2_connector.cc - src/core/ext/transport/chttp2/client/insecure/channel_create.cc - src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc - src/core/ext/transport/chttp2/server/chttp2_server.cc - src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc - src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc - src/core/ext/transport/chttp2/transport/bin_decoder.cc - src/core/ext/transport/chttp2/transport/bin_encoder.cc - src/core/ext/transport/chttp2/transport/chttp2_plugin.cc - src/core/ext/transport/chttp2/transport/chttp2_transport.cc - src/core/ext/transport/chttp2/transport/context_list.cc - src/core/ext/transport/chttp2/transport/flow_control.cc - src/core/ext/transport/chttp2/transport/frame_data.cc - src/core/ext/transport/chttp2/transport/frame_goaway.cc - src/core/ext/transport/chttp2/transport/frame_ping.cc - src/core/ext/transport/chttp2/transport/frame_rst_stream.cc - src/core/ext/transport/chttp2/transport/frame_settings.cc - src/core/ext/transport/chttp2/transport/frame_window_update.cc - src/core/ext/transport/chttp2/transport/hpack_encoder.cc - src/core/ext/transport/chttp2/transport/hpack_parser.cc - src/core/ext/transport/chttp2/transport/hpack_table.cc - src/core/ext/transport/chttp2/transport/http2_settings.cc - src/core/ext/transport/chttp2/transport/huffsyms.cc - src/core/ext/transport/chttp2/transport/incoming_metadata.cc - src/core/ext/transport/chttp2/transport/parsing.cc - src/core/ext/transport/chttp2/transport/stream_lists.cc - src/core/ext/transport/chttp2/transport/stream_map.cc - src/core/ext/transport/chttp2/transport/varint.cc - src/core/ext/transport/chttp2/transport/writing.cc - src/core/ext/transport/inproc/inproc_plugin.cc - src/core/ext/transport/inproc/inproc_transport.cc - src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c - src/core/ext/upb-generated/envoy/annotations/resource.upb.c - src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c - src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c - src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c - src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c - src/core/ext/upb-generated/envoy/api/v2/cds.upb.c - src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c - src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c - src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c - src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c - src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c - src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c - src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c - src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c - src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c - src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c - src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c - src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c - src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c - src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c - src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c - src/core/ext/upb-generated/envoy/api/v2/eds.upb.c - src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c - src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c - src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c - src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c - src/core/ext/upb-generated/envoy/api/v2/lds.upb.c - src/core/ext/upb-generated/envoy/api/v2/listener.upb.c - src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c - src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c - src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c - src/core/ext/upb-generated/envoy/api/v2/rds.upb.c - src/core/ext/upb-generated/envoy/api/v2/route.upb.c - src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c - src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c - src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c - src/core/ext/upb-generated/envoy/api/v2/srds.upb.c - src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c - src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c - src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c - src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c - src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c - src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c - src/core/ext/upb-generated/envoy/type/http.upb.c - src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c - src/core/ext/upb-generated/envoy/type/matcher/string.upb.c - src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c - src/core/ext/upb-generated/envoy/type/percent.upb.c - src/core/ext/upb-generated/envoy/type/range.upb.c - src/core/ext/upb-generated/envoy/type/semantic_version.upb.c - src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c - src/core/ext/upb-generated/gogoproto/gogo.upb.c - src/core/ext/upb-generated/google/api/annotations.upb.c - src/core/ext/upb-generated/google/api/http.upb.c - src/core/ext/upb-generated/google/protobuf/any.upb.c - src/core/ext/upb-generated/google/protobuf/descriptor.upb.c - src/core/ext/upb-generated/google/protobuf/duration.upb.c - src/core/ext/upb-generated/google/protobuf/empty.upb.c - src/core/ext/upb-generated/google/protobuf/struct.upb.c - src/core/ext/upb-generated/google/protobuf/timestamp.upb.c - src/core/ext/upb-generated/google/protobuf/wrappers.upb.c - src/core/ext/upb-generated/google/rpc/status.upb.c - src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c - src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c - src/core/ext/upb-generated/udpa/annotations/migrate.upb.c - src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c - src/core/ext/upb-generated/udpa/annotations/status.upb.c - src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c - src/core/ext/upb-generated/validate/validate.upb.c - src/core/lib/avl/avl.cc - src/core/lib/backoff/backoff.cc - src/core/lib/channel/channel_args.cc - src/core/lib/channel/channel_stack.cc - src/core/lib/channel/channel_stack_builder.cc - src/core/lib/channel/channel_trace.cc - src/core/lib/channel/channelz.cc - src/core/lib/channel/channelz_registry.cc - src/core/lib/channel/connected_channel.cc - src/core/lib/channel/handshaker.cc - src/core/lib/channel/handshaker_registry.cc - src/core/lib/channel/status_util.cc - src/core/lib/compression/compression.cc - src/core/lib/compression/compression_args.cc - src/core/lib/compression/compression_internal.cc - src/core/lib/compression/message_compress.cc - src/core/lib/compression/stream_compression.cc - src/core/lib/compression/stream_compression_gzip.cc - src/core/lib/compression/stream_compression_identity.cc - src/core/lib/debug/stats.cc - src/core/lib/debug/stats_data.cc - src/core/lib/debug/trace.cc - src/core/lib/http/format_request.cc - src/core/lib/http/httpcli.cc - src/core/lib/http/parser.cc - src/core/lib/iomgr/buffer_list.cc - src/core/lib/iomgr/call_combiner.cc - src/core/lib/iomgr/cfstream_handle.cc - src/core/lib/iomgr/combiner.cc - src/core/lib/iomgr/dualstack_socket_posix.cc - src/core/lib/iomgr/endpoint.cc - src/core/lib/iomgr/endpoint_cfstream.cc - src/core/lib/iomgr/endpoint_pair_posix.cc - src/core/lib/iomgr/endpoint_pair_uv.cc - src/core/lib/iomgr/endpoint_pair_windows.cc - src/core/lib/iomgr/error.cc - src/core/lib/iomgr/error_cfstream.cc - src/core/lib/iomgr/ev_apple.cc - src/core/lib/iomgr/ev_epoll1_linux.cc - src/core/lib/iomgr/ev_epollex_linux.cc - src/core/lib/iomgr/ev_poll_posix.cc - src/core/lib/iomgr/ev_posix.cc - src/core/lib/iomgr/ev_windows.cc - src/core/lib/iomgr/exec_ctx.cc - src/core/lib/iomgr/executor.cc - src/core/lib/iomgr/executor/mpmcqueue.cc - src/core/lib/iomgr/executor/threadpool.cc - src/core/lib/iomgr/fork_posix.cc - src/core/lib/iomgr/fork_windows.cc - src/core/lib/iomgr/gethostname_fallback.cc - src/core/lib/iomgr/gethostname_host_name_max.cc - src/core/lib/iomgr/gethostname_sysconf.cc - src/core/lib/iomgr/grpc_if_nametoindex_posix.cc - src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc - src/core/lib/iomgr/internal_errqueue.cc - src/core/lib/iomgr/iocp_windows.cc - src/core/lib/iomgr/iomgr.cc - src/core/lib/iomgr/iomgr_custom.cc - src/core/lib/iomgr/iomgr_internal.cc - src/core/lib/iomgr/iomgr_posix.cc - src/core/lib/iomgr/iomgr_posix_cfstream.cc - src/core/lib/iomgr/iomgr_uv.cc - src/core/lib/iomgr/iomgr_windows.cc - src/core/lib/iomgr/is_epollexclusive_available.cc - src/core/lib/iomgr/load_file.cc - src/core/lib/iomgr/lockfree_event.cc - src/core/lib/iomgr/poller/eventmanager_libuv.cc - src/core/lib/iomgr/polling_entity.cc - src/core/lib/iomgr/pollset.cc - src/core/lib/iomgr/pollset_custom.cc - src/core/lib/iomgr/pollset_set.cc - src/core/lib/iomgr/pollset_set_custom.cc - src/core/lib/iomgr/pollset_set_windows.cc - src/core/lib/iomgr/pollset_uv.cc - src/core/lib/iomgr/pollset_windows.cc - src/core/lib/iomgr/resolve_address.cc - src/core/lib/iomgr/resolve_address_custom.cc - src/core/lib/iomgr/resolve_address_posix.cc - src/core/lib/iomgr/resolve_address_windows.cc - src/core/lib/iomgr/resource_quota.cc - src/core/lib/iomgr/sockaddr_utils.cc - src/core/lib/iomgr/socket_factory_posix.cc - src/core/lib/iomgr/socket_mutator.cc - src/core/lib/iomgr/socket_utils_common_posix.cc - src/core/lib/iomgr/socket_utils_linux.cc - src/core/lib/iomgr/socket_utils_posix.cc - src/core/lib/iomgr/socket_utils_uv.cc - src/core/lib/iomgr/socket_utils_windows.cc - src/core/lib/iomgr/socket_windows.cc - src/core/lib/iomgr/tcp_client.cc - src/core/lib/iomgr/tcp_client_cfstream.cc - src/core/lib/iomgr/tcp_client_custom.cc - src/core/lib/iomgr/tcp_client_posix.cc - src/core/lib/iomgr/tcp_client_windows.cc - src/core/lib/iomgr/tcp_custom.cc - src/core/lib/iomgr/tcp_posix.cc - src/core/lib/iomgr/tcp_server.cc - src/core/lib/iomgr/tcp_server_custom.cc - src/core/lib/iomgr/tcp_server_posix.cc - src/core/lib/iomgr/tcp_server_utils_posix_common.cc - src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc - src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc - src/core/lib/iomgr/tcp_server_windows.cc - src/core/lib/iomgr/tcp_uv.cc - src/core/lib/iomgr/tcp_windows.cc - src/core/lib/iomgr/time_averaged_stats.cc - src/core/lib/iomgr/timer.cc - src/core/lib/iomgr/timer_custom.cc - src/core/lib/iomgr/timer_generic.cc - src/core/lib/iomgr/timer_heap.cc - src/core/lib/iomgr/timer_manager.cc - src/core/lib/iomgr/timer_uv.cc - src/core/lib/iomgr/udp_server.cc - src/core/lib/iomgr/unix_sockets_posix.cc - src/core/lib/iomgr/unix_sockets_posix_noop.cc - src/core/lib/iomgr/wakeup_fd_eventfd.cc - src/core/lib/iomgr/wakeup_fd_nospecial.cc - src/core/lib/iomgr/wakeup_fd_pipe.cc - src/core/lib/iomgr/wakeup_fd_posix.cc - src/core/lib/iomgr/work_serializer.cc - src/core/lib/json/json_reader.cc - src/core/lib/json/json_writer.cc - src/core/lib/slice/b64.cc - src/core/lib/slice/percent_encoding.cc - src/core/lib/slice/slice.cc - src/core/lib/slice/slice_buffer.cc - src/core/lib/slice/slice_intern.cc - src/core/lib/slice/slice_string_helpers.cc - src/core/lib/surface/api_trace.cc - src/core/lib/surface/byte_buffer.cc - src/core/lib/surface/byte_buffer_reader.cc - src/core/lib/surface/call.cc - src/core/lib/surface/call_details.cc - src/core/lib/surface/call_log_batch.cc - src/core/lib/surface/channel.cc - src/core/lib/surface/channel_init.cc - src/core/lib/surface/channel_ping.cc - src/core/lib/surface/channel_stack_type.cc - src/core/lib/surface/completion_queue.cc - src/core/lib/surface/completion_queue_factory.cc - src/core/lib/surface/event_string.cc - src/core/lib/surface/init.cc - src/core/lib/surface/init_unsecure.cc - src/core/lib/surface/lame_client.cc - src/core/lib/surface/metadata_array.cc - src/core/lib/surface/server.cc - src/core/lib/surface/validate_metadata.cc - src/core/lib/surface/version.cc - src/core/lib/transport/bdp_estimator.cc - src/core/lib/transport/byte_stream.cc - src/core/lib/transport/connectivity_state.cc - src/core/lib/transport/error_utils.cc - src/core/lib/transport/metadata.cc - src/core/lib/transport/metadata_batch.cc - src/core/lib/transport/pid_controller.cc - src/core/lib/transport/static_metadata.cc - src/core/lib/transport/status_conversion.cc - src/core/lib/transport/status_metadata.cc - src/core/lib/transport/timeout_encoding.cc - src/core/lib/transport/transport.cc - src/core/lib/transport/transport_op_string.cc - src/core/lib/uri/uri_parser.cc - src/core/plugin_registry/grpc_unsecure_plugin_registry.cc deps: - gpr - address_sorting - upb - absl/types:optional - absl/strings:strings - absl/container:inlined_vector baselib: true deps_linkage: static dll: true generate_plugin_registry: true secure: false - name: benchmark_helpers build: test language: c++ public_headers: [] headers: - test/cpp/microbenchmarks/fullstack_context_mutators.h - test/cpp/microbenchmarks/fullstack_fixtures.h - test/cpp/microbenchmarks/helpers.h src: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/microbenchmarks/helpers.cc deps: - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - grpc++_test_config - gpr - address_sorting - upb - benchmark defaults: benchmark - name: grpc++ build: all language: c++ public_headers: - include/grpc++/alarm.h - include/grpc++/channel.h - include/grpc++/client_context.h - include/grpc++/completion_queue.h - include/grpc++/create_channel.h - include/grpc++/create_channel_posix.h - include/grpc++/ext/health_check_service_server_builder_option.h - include/grpc++/generic/async_generic_service.h - include/grpc++/generic/generic_stub.h - include/grpc++/grpc++.h - include/grpc++/health_check_service_interface.h - include/grpc++/impl/call.h - include/grpc++/impl/channel_argument_option.h - include/grpc++/impl/client_unary_call.h - include/grpc++/impl/codegen/async_stream.h - include/grpc++/impl/codegen/async_unary_call.h - include/grpc++/impl/codegen/byte_buffer.h - include/grpc++/impl/codegen/call.h - include/grpc++/impl/codegen/call_hook.h - include/grpc++/impl/codegen/channel_interface.h - include/grpc++/impl/codegen/client_context.h - include/grpc++/impl/codegen/client_unary_call.h - include/grpc++/impl/codegen/completion_queue.h - include/grpc++/impl/codegen/completion_queue_tag.h - include/grpc++/impl/codegen/config.h - include/grpc++/impl/codegen/config_protobuf.h - include/grpc++/impl/codegen/core_codegen.h - include/grpc++/impl/codegen/core_codegen_interface.h - include/grpc++/impl/codegen/create_auth_context.h - include/grpc++/impl/codegen/grpc_library.h - include/grpc++/impl/codegen/metadata_map.h - include/grpc++/impl/codegen/method_handler_impl.h - include/grpc++/impl/codegen/proto_utils.h - include/grpc++/impl/codegen/rpc_method.h - include/grpc++/impl/codegen/rpc_service_method.h - include/grpc++/impl/codegen/security/auth_context.h - include/grpc++/impl/codegen/serialization_traits.h - include/grpc++/impl/codegen/server_context.h - include/grpc++/impl/codegen/server_interface.h - include/grpc++/impl/codegen/service_type.h - include/grpc++/impl/codegen/slice.h - include/grpc++/impl/codegen/status.h - include/grpc++/impl/codegen/status_code_enum.h - include/grpc++/impl/codegen/string_ref.h - include/grpc++/impl/codegen/stub_options.h - include/grpc++/impl/codegen/sync_stream.h - include/grpc++/impl/codegen/time.h - include/grpc++/impl/grpc_library.h - include/grpc++/impl/method_handler_impl.h - include/grpc++/impl/rpc_method.h - include/grpc++/impl/rpc_service_method.h - include/grpc++/impl/serialization_traits.h - include/grpc++/impl/server_builder_option.h - include/grpc++/impl/server_builder_plugin.h - include/grpc++/impl/server_initializer.h - include/grpc++/impl/service_type.h - include/grpc++/resource_quota.h - include/grpc++/security/auth_context.h - include/grpc++/security/auth_metadata_processor.h - include/grpc++/security/credentials.h - include/grpc++/security/server_credentials.h - include/grpc++/server.h - include/grpc++/server_builder.h - include/grpc++/server_context.h - include/grpc++/server_posix.h - include/grpc++/support/async_stream.h - include/grpc++/support/async_unary_call.h - include/grpc++/support/byte_buffer.h - include/grpc++/support/channel_arguments.h - include/grpc++/support/config.h - include/grpc++/support/slice.h - include/grpc++/support/status.h - include/grpc++/support/status_code_enum.h - include/grpc++/support/string_ref.h - include/grpc++/support/stub_options.h - include/grpc++/support/sync_stream.h - include/grpc++/support/time.h - include/grpcpp/alarm.h - include/grpcpp/alarm_impl.h - include/grpcpp/channel.h - include/grpcpp/channel_impl.h - include/grpcpp/client_context.h - include/grpcpp/completion_queue.h - include/grpcpp/completion_queue_impl.h - include/grpcpp/create_channel.h - include/grpcpp/create_channel_impl.h - include/grpcpp/create_channel_posix.h - include/grpcpp/create_channel_posix_impl.h - include/grpcpp/ext/health_check_service_server_builder_option.h - include/grpcpp/generic/async_generic_service.h - include/grpcpp/generic/generic_stub.h - include/grpcpp/generic/generic_stub_impl.h - include/grpcpp/grpcpp.h - include/grpcpp/health_check_service_interface.h - include/grpcpp/health_check_service_interface_impl.h - include/grpcpp/impl/call.h - include/grpcpp/impl/channel_argument_option.h - include/grpcpp/impl/client_unary_call.h - include/grpcpp/impl/codegen/async_generic_service.h - include/grpcpp/impl/codegen/async_stream.h - include/grpcpp/impl/codegen/async_stream_impl.h - include/grpcpp/impl/codegen/async_unary_call.h - include/grpcpp/impl/codegen/async_unary_call_impl.h - include/grpcpp/impl/codegen/byte_buffer.h - include/grpcpp/impl/codegen/call.h - include/grpcpp/impl/codegen/call_hook.h - include/grpcpp/impl/codegen/call_op_set.h - include/grpcpp/impl/codegen/call_op_set_interface.h - include/grpcpp/impl/codegen/callback_common.h - include/grpcpp/impl/codegen/channel_interface.h - include/grpcpp/impl/codegen/client_callback.h - include/grpcpp/impl/codegen/client_callback_impl.h - include/grpcpp/impl/codegen/client_context.h - include/grpcpp/impl/codegen/client_context_impl.h - include/grpcpp/impl/codegen/client_interceptor.h - include/grpcpp/impl/codegen/client_unary_call.h - include/grpcpp/impl/codegen/completion_queue.h - include/grpcpp/impl/codegen/completion_queue_impl.h - include/grpcpp/impl/codegen/completion_queue_tag.h - include/grpcpp/impl/codegen/config.h - include/grpcpp/impl/codegen/config_protobuf.h - include/grpcpp/impl/codegen/core_codegen.h - include/grpcpp/impl/codegen/core_codegen_interface.h - include/grpcpp/impl/codegen/create_auth_context.h - include/grpcpp/impl/codegen/delegating_channel.h - include/grpcpp/impl/codegen/grpc_library.h - include/grpcpp/impl/codegen/intercepted_channel.h - include/grpcpp/impl/codegen/interceptor.h - include/grpcpp/impl/codegen/interceptor_common.h - include/grpcpp/impl/codegen/message_allocator.h - include/grpcpp/impl/codegen/metadata_map.h - include/grpcpp/impl/codegen/method_handler.h - include/grpcpp/impl/codegen/method_handler_impl.h - include/grpcpp/impl/codegen/proto_buffer_reader.h - include/grpcpp/impl/codegen/proto_buffer_writer.h - include/grpcpp/impl/codegen/proto_utils.h - include/grpcpp/impl/codegen/rpc_method.h - include/grpcpp/impl/codegen/rpc_service_method.h - include/grpcpp/impl/codegen/security/auth_context.h - include/grpcpp/impl/codegen/serialization_traits.h - include/grpcpp/impl/codegen/server_callback.h - include/grpcpp/impl/codegen/server_callback_handlers.h - include/grpcpp/impl/codegen/server_callback_impl.h - include/grpcpp/impl/codegen/server_context.h - include/grpcpp/impl/codegen/server_context_impl.h - include/grpcpp/impl/codegen/server_interceptor.h - include/grpcpp/impl/codegen/server_interface.h - include/grpcpp/impl/codegen/service_type.h - include/grpcpp/impl/codegen/slice.h - include/grpcpp/impl/codegen/status.h - include/grpcpp/impl/codegen/status_code_enum.h - include/grpcpp/impl/codegen/string_ref.h - include/grpcpp/impl/codegen/stub_options.h - include/grpcpp/impl/codegen/sync.h - include/grpcpp/impl/codegen/sync_stream.h - include/grpcpp/impl/codegen/sync_stream_impl.h - include/grpcpp/impl/codegen/time.h - include/grpcpp/impl/grpc_library.h - include/grpcpp/impl/method_handler_impl.h - include/grpcpp/impl/rpc_method.h - include/grpcpp/impl/rpc_service_method.h - include/grpcpp/impl/serialization_traits.h - include/grpcpp/impl/server_builder_option.h - include/grpcpp/impl/server_builder_option_impl.h - include/grpcpp/impl/server_builder_plugin.h - include/grpcpp/impl/server_initializer.h - include/grpcpp/impl/server_initializer_impl.h - include/grpcpp/impl/service_type.h - include/grpcpp/resource_quota.h - include/grpcpp/resource_quota_impl.h - include/grpcpp/security/auth_context.h - include/grpcpp/security/auth_metadata_processor.h - include/grpcpp/security/auth_metadata_processor_impl.h - include/grpcpp/security/credentials.h - include/grpcpp/security/credentials_impl.h - include/grpcpp/security/server_credentials.h - include/grpcpp/security/server_credentials_impl.h - include/grpcpp/security/tls_credentials_options.h - include/grpcpp/server.h - include/grpcpp/server_builder.h - include/grpcpp/server_builder_impl.h - include/grpcpp/server_context.h - include/grpcpp/server_impl.h - include/grpcpp/server_posix.h - include/grpcpp/server_posix_impl.h - include/grpcpp/support/async_stream.h - include/grpcpp/support/async_stream_impl.h - include/grpcpp/support/async_unary_call.h - include/grpcpp/support/async_unary_call_impl.h - include/grpcpp/support/byte_buffer.h - include/grpcpp/support/channel_arguments.h - include/grpcpp/support/channel_arguments_impl.h - include/grpcpp/support/client_callback.h - include/grpcpp/support/client_callback_impl.h - include/grpcpp/support/client_interceptor.h - include/grpcpp/support/config.h - include/grpcpp/support/interceptor.h - include/grpcpp/support/message_allocator.h - include/grpcpp/support/method_handler.h - include/grpcpp/support/proto_buffer_reader.h - include/grpcpp/support/proto_buffer_writer.h - include/grpcpp/support/server_callback.h - include/grpcpp/support/server_callback_impl.h - include/grpcpp/support/server_interceptor.h - include/grpcpp/support/slice.h - include/grpcpp/support/status.h - include/grpcpp/support/status_code_enum.h - include/grpcpp/support/string_ref.h - include/grpcpp/support/stub_options.h - include/grpcpp/support/sync_stream.h - include/grpcpp/support/sync_stream_impl.h - include/grpcpp/support/time.h - include/grpcpp/support/validate_service_config.h headers: - src/cpp/client/create_channel_internal.h - src/cpp/client/secure_credentials.h - src/cpp/common/channel_filter.h - src/cpp/common/secure_auth_context.h - src/cpp/common/tls_credentials_options_util.h - src/cpp/server/dynamic_thread_pool.h - src/cpp/server/external_connection_acceptor_impl.h - src/cpp/server/health/default_health_check_service.h - src/cpp/server/secure_server_credentials.h - src/cpp/server/thread_pool_interface.h - src/cpp/thread_manager/thread_manager.h src: - src/cpp/client/channel_cc.cc - src/cpp/client/client_context.cc - src/cpp/client/client_interceptor.cc - src/cpp/client/create_channel.cc - src/cpp/client/create_channel_internal.cc - src/cpp/client/create_channel_posix.cc - src/cpp/client/credentials_cc.cc - src/cpp/client/insecure_credentials.cc - src/cpp/client/secure_credentials.cc - src/cpp/codegen/codegen_init.cc - src/cpp/common/alarm.cc - src/cpp/common/auth_property_iterator.cc - src/cpp/common/channel_arguments.cc - src/cpp/common/channel_filter.cc - src/cpp/common/completion_queue_cc.cc - src/cpp/common/core_codegen.cc - src/cpp/common/resource_quota_cc.cc - src/cpp/common/rpc_method.cc - src/cpp/common/secure_auth_context.cc - src/cpp/common/secure_channel_arguments.cc - src/cpp/common/secure_create_auth_context.cc - src/cpp/common/tls_credentials_options.cc - src/cpp/common/tls_credentials_options_util.cc - src/cpp/common/validate_service_config.cc - src/cpp/common/version_cc.cc - src/cpp/server/async_generic_service.cc - src/cpp/server/channel_argument_option.cc - src/cpp/server/create_default_thread_pool.cc - src/cpp/server/dynamic_thread_pool.cc - src/cpp/server/external_connection_acceptor_impl.cc - src/cpp/server/health/default_health_check_service.cc - src/cpp/server/health/health_check_service.cc - src/cpp/server/health/health_check_service_server_builder_option.cc - src/cpp/server/insecure_server_credentials.cc - src/cpp/server/secure_server_credentials.cc - src/cpp/server/server_builder.cc - src/cpp/server/server_callback.cc - src/cpp/server/server_cc.cc - src/cpp/server/server_context.cc - src/cpp/server/server_credentials.cc - src/cpp/server/server_posix.cc - src/cpp/thread_manager/thread_manager.cc - src/cpp/util/byte_buffer_cc.cc - src/cpp/util/status.cc - src/cpp/util/string_ref.cc - src/cpp/util/time_cc.cc deps: - grpc - gpr - address_sorting - upb baselib: true dll: true - name: grpc++_alts build: all language: c++ public_headers: - include/grpcpp/security/alts_context.h - include/grpcpp/security/alts_util.h headers: [] src: - src/cpp/common/alts_context.cc - src/cpp/common/alts_util.cc deps: - grpc++ - grpc - gpr - address_sorting - upb baselib: true - name: grpc++_error_details build: all language: c++ public_headers: - include/grpc++/support/error_details.h - include/grpcpp/support/error_details.h - include/grpcpp/support/error_details_impl.h headers: [] src: - src/proto/grpc/status/status.proto - src/cpp/util/error_details.cc deps: - grpc++ - grpc - gpr - address_sorting - upb - name: grpc++_reflection build: all language: c++ public_headers: - include/grpc++/ext/proto_server_reflection_plugin.h - include/grpcpp/ext/proto_server_reflection_plugin.h - include/grpcpp/ext/proto_server_reflection_plugin_impl.h headers: - src/cpp/ext/proto_server_reflection.h src: - src/proto/grpc/reflection/v1alpha/reflection.proto - src/cpp/ext/proto_server_reflection.cc - src/cpp/ext/proto_server_reflection_plugin.cc deps: - grpc++ - grpc - gpr - address_sorting - upb - name: grpc++_test build: private language: c++ public_headers: - include/grpc++/test/mock_stream.h - include/grpc++/test/server_context_test_spouse.h - include/grpcpp/test/channel_test_peer.h - include/grpcpp/test/default_reactor_test_peer.h - include/grpcpp/test/mock_stream.h - include/grpcpp/test/server_context_test_spouse.h headers: [] src: - src/cpp/client/channel_test_peer.cc deps: - grpc++ - grpc - gpr - address_sorting - upb - name: grpc++_test_config build: private language: c++ public_headers: [] headers: - test/cpp/util/test_config.h src: - test/cpp/util/test_config_cc.cc deps: - gpr - name: grpc++_test_util build: private language: c++ public_headers: [] headers: - test/core/end2end/data/ssl_test_data.h - test/cpp/util/byte_buffer_proto_helper.h - test/cpp/util/create_test_channel.h - test/cpp/util/string_ref_helper.h - test/cpp/util/subprocess.h - test/cpp/util/test_credentials_provider.h src: - test/core/end2end/data/client_certs.cc - test/core/end2end/data/server1_cert.cc - test/core/end2end/data/server1_key.cc - test/core/end2end/data/test_root_cert.cc - test/cpp/util/byte_buffer_proto_helper.cc - test/cpp/util/create_test_channel.cc - test/cpp/util/string_ref_helper.cc - test/cpp/util/subprocess.cc - test/cpp/util/test_credentials_provider.cc deps: - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: grpc++_unsecure build: all language: c++ public_headers: - include/grpc++/alarm.h - include/grpc++/channel.h - include/grpc++/client_context.h - include/grpc++/completion_queue.h - include/grpc++/create_channel.h - include/grpc++/create_channel_posix.h - include/grpc++/ext/health_check_service_server_builder_option.h - include/grpc++/generic/async_generic_service.h - include/grpc++/generic/generic_stub.h - include/grpc++/grpc++.h - include/grpc++/health_check_service_interface.h - include/grpc++/impl/call.h - include/grpc++/impl/channel_argument_option.h - include/grpc++/impl/client_unary_call.h - include/grpc++/impl/codegen/async_stream.h - include/grpc++/impl/codegen/async_unary_call.h - include/grpc++/impl/codegen/byte_buffer.h - include/grpc++/impl/codegen/call.h - include/grpc++/impl/codegen/call_hook.h - include/grpc++/impl/codegen/channel_interface.h - include/grpc++/impl/codegen/client_context.h - include/grpc++/impl/codegen/client_unary_call.h - include/grpc++/impl/codegen/completion_queue.h - include/grpc++/impl/codegen/completion_queue_tag.h - include/grpc++/impl/codegen/config.h - include/grpc++/impl/codegen/config_protobuf.h - include/grpc++/impl/codegen/core_codegen.h - include/grpc++/impl/codegen/core_codegen_interface.h - include/grpc++/impl/codegen/create_auth_context.h - include/grpc++/impl/codegen/grpc_library.h - include/grpc++/impl/codegen/metadata_map.h - include/grpc++/impl/codegen/method_handler_impl.h - include/grpc++/impl/codegen/proto_utils.h - include/grpc++/impl/codegen/rpc_method.h - include/grpc++/impl/codegen/rpc_service_method.h - include/grpc++/impl/codegen/security/auth_context.h - include/grpc++/impl/codegen/serialization_traits.h - include/grpc++/impl/codegen/server_context.h - include/grpc++/impl/codegen/server_interface.h - include/grpc++/impl/codegen/service_type.h - include/grpc++/impl/codegen/slice.h - include/grpc++/impl/codegen/status.h - include/grpc++/impl/codegen/status_code_enum.h - include/grpc++/impl/codegen/string_ref.h - include/grpc++/impl/codegen/stub_options.h - include/grpc++/impl/codegen/sync_stream.h - include/grpc++/impl/codegen/time.h - include/grpc++/impl/grpc_library.h - include/grpc++/impl/method_handler_impl.h - include/grpc++/impl/rpc_method.h - include/grpc++/impl/rpc_service_method.h - include/grpc++/impl/serialization_traits.h - include/grpc++/impl/server_builder_option.h - include/grpc++/impl/server_builder_plugin.h - include/grpc++/impl/server_initializer.h - include/grpc++/impl/service_type.h - include/grpc++/resource_quota.h - include/grpc++/security/auth_context.h - include/grpc++/security/auth_metadata_processor.h - include/grpc++/security/credentials.h - include/grpc++/security/server_credentials.h - include/grpc++/server.h - include/grpc++/server_builder.h - include/grpc++/server_context.h - include/grpc++/server_posix.h - include/grpc++/support/async_stream.h - include/grpc++/support/async_unary_call.h - include/grpc++/support/byte_buffer.h - include/grpc++/support/channel_arguments.h - include/grpc++/support/config.h - include/grpc++/support/slice.h - include/grpc++/support/status.h - include/grpc++/support/status_code_enum.h - include/grpc++/support/string_ref.h - include/grpc++/support/stub_options.h - include/grpc++/support/sync_stream.h - include/grpc++/support/time.h - include/grpcpp/alarm.h - include/grpcpp/alarm_impl.h - include/grpcpp/channel.h - include/grpcpp/channel_impl.h - include/grpcpp/client_context.h - include/grpcpp/completion_queue.h - include/grpcpp/completion_queue_impl.h - include/grpcpp/create_channel.h - include/grpcpp/create_channel_impl.h - include/grpcpp/create_channel_posix.h - include/grpcpp/create_channel_posix_impl.h - include/grpcpp/ext/health_check_service_server_builder_option.h - include/grpcpp/generic/async_generic_service.h - include/grpcpp/generic/generic_stub.h - include/grpcpp/generic/generic_stub_impl.h - include/grpcpp/grpcpp.h - include/grpcpp/health_check_service_interface.h - include/grpcpp/health_check_service_interface_impl.h - include/grpcpp/impl/call.h - include/grpcpp/impl/channel_argument_option.h - include/grpcpp/impl/client_unary_call.h - include/grpcpp/impl/codegen/async_generic_service.h - include/grpcpp/impl/codegen/async_stream.h - include/grpcpp/impl/codegen/async_stream_impl.h - include/grpcpp/impl/codegen/async_unary_call.h - include/grpcpp/impl/codegen/async_unary_call_impl.h - include/grpcpp/impl/codegen/byte_buffer.h - include/grpcpp/impl/codegen/call.h - include/grpcpp/impl/codegen/call_hook.h - include/grpcpp/impl/codegen/call_op_set.h - include/grpcpp/impl/codegen/call_op_set_interface.h - include/grpcpp/impl/codegen/callback_common.h - include/grpcpp/impl/codegen/channel_interface.h - include/grpcpp/impl/codegen/client_callback.h - include/grpcpp/impl/codegen/client_callback_impl.h - include/grpcpp/impl/codegen/client_context.h - include/grpcpp/impl/codegen/client_context_impl.h - include/grpcpp/impl/codegen/client_interceptor.h - include/grpcpp/impl/codegen/client_unary_call.h - include/grpcpp/impl/codegen/completion_queue.h - include/grpcpp/impl/codegen/completion_queue_impl.h - include/grpcpp/impl/codegen/completion_queue_tag.h - include/grpcpp/impl/codegen/config.h - include/grpcpp/impl/codegen/config_protobuf.h - include/grpcpp/impl/codegen/core_codegen.h - include/grpcpp/impl/codegen/core_codegen_interface.h - include/grpcpp/impl/codegen/create_auth_context.h - include/grpcpp/impl/codegen/delegating_channel.h - include/grpcpp/impl/codegen/grpc_library.h - include/grpcpp/impl/codegen/intercepted_channel.h - include/grpcpp/impl/codegen/interceptor.h - include/grpcpp/impl/codegen/interceptor_common.h - include/grpcpp/impl/codegen/message_allocator.h - include/grpcpp/impl/codegen/metadata_map.h - include/grpcpp/impl/codegen/method_handler.h - include/grpcpp/impl/codegen/method_handler_impl.h - include/grpcpp/impl/codegen/proto_buffer_reader.h - include/grpcpp/impl/codegen/proto_buffer_writer.h - include/grpcpp/impl/codegen/proto_utils.h - include/grpcpp/impl/codegen/rpc_method.h - include/grpcpp/impl/codegen/rpc_service_method.h - include/grpcpp/impl/codegen/security/auth_context.h - include/grpcpp/impl/codegen/serialization_traits.h - include/grpcpp/impl/codegen/server_callback.h - include/grpcpp/impl/codegen/server_callback_handlers.h - include/grpcpp/impl/codegen/server_callback_impl.h - include/grpcpp/impl/codegen/server_context.h - include/grpcpp/impl/codegen/server_context_impl.h - include/grpcpp/impl/codegen/server_interceptor.h - include/grpcpp/impl/codegen/server_interface.h - include/grpcpp/impl/codegen/service_type.h - include/grpcpp/impl/codegen/slice.h - include/grpcpp/impl/codegen/status.h - include/grpcpp/impl/codegen/status_code_enum.h - include/grpcpp/impl/codegen/string_ref.h - include/grpcpp/impl/codegen/stub_options.h - include/grpcpp/impl/codegen/sync.h - include/grpcpp/impl/codegen/sync_stream.h - include/grpcpp/impl/codegen/sync_stream_impl.h - include/grpcpp/impl/codegen/time.h - include/grpcpp/impl/grpc_library.h - include/grpcpp/impl/method_handler_impl.h - include/grpcpp/impl/rpc_method.h - include/grpcpp/impl/rpc_service_method.h - include/grpcpp/impl/serialization_traits.h - include/grpcpp/impl/server_builder_option.h - include/grpcpp/impl/server_builder_option_impl.h - include/grpcpp/impl/server_builder_plugin.h - include/grpcpp/impl/server_initializer.h - include/grpcpp/impl/server_initializer_impl.h - include/grpcpp/impl/service_type.h - include/grpcpp/resource_quota.h - include/grpcpp/resource_quota_impl.h - include/grpcpp/security/auth_context.h - include/grpcpp/security/auth_metadata_processor.h - include/grpcpp/security/auth_metadata_processor_impl.h - include/grpcpp/security/credentials.h - include/grpcpp/security/credentials_impl.h - include/grpcpp/security/server_credentials.h - include/grpcpp/security/server_credentials_impl.h - include/grpcpp/security/tls_credentials_options.h - include/grpcpp/server.h - include/grpcpp/server_builder.h - include/grpcpp/server_builder_impl.h - include/grpcpp/server_context.h - include/grpcpp/server_impl.h - include/grpcpp/server_posix.h - include/grpcpp/server_posix_impl.h - include/grpcpp/support/async_stream.h - include/grpcpp/support/async_stream_impl.h - include/grpcpp/support/async_unary_call.h - include/grpcpp/support/async_unary_call_impl.h - include/grpcpp/support/byte_buffer.h - include/grpcpp/support/channel_arguments.h - include/grpcpp/support/channel_arguments_impl.h - include/grpcpp/support/client_callback.h - include/grpcpp/support/client_callback_impl.h - include/grpcpp/support/client_interceptor.h - include/grpcpp/support/config.h - include/grpcpp/support/interceptor.h - include/grpcpp/support/message_allocator.h - include/grpcpp/support/method_handler.h - include/grpcpp/support/proto_buffer_reader.h - include/grpcpp/support/proto_buffer_writer.h - include/grpcpp/support/server_callback.h - include/grpcpp/support/server_callback_impl.h - include/grpcpp/support/server_interceptor.h - include/grpcpp/support/slice.h - include/grpcpp/support/status.h - include/grpcpp/support/status_code_enum.h - include/grpcpp/support/string_ref.h - include/grpcpp/support/stub_options.h - include/grpcpp/support/sync_stream.h - include/grpcpp/support/sync_stream_impl.h - include/grpcpp/support/time.h - include/grpcpp/support/validate_service_config.h headers: - src/cpp/client/create_channel_internal.h - src/cpp/common/channel_filter.h - src/cpp/server/dynamic_thread_pool.h - src/cpp/server/external_connection_acceptor_impl.h - src/cpp/server/health/default_health_check_service.h - src/cpp/server/thread_pool_interface.h - src/cpp/thread_manager/thread_manager.h src: - src/cpp/client/channel_cc.cc - src/cpp/client/client_context.cc - src/cpp/client/client_interceptor.cc - src/cpp/client/create_channel.cc - src/cpp/client/create_channel_internal.cc - src/cpp/client/create_channel_posix.cc - src/cpp/client/credentials_cc.cc - src/cpp/client/insecure_credentials.cc - src/cpp/codegen/codegen_init.cc - src/cpp/common/alarm.cc - src/cpp/common/channel_arguments.cc - src/cpp/common/channel_filter.cc - src/cpp/common/completion_queue_cc.cc - src/cpp/common/core_codegen.cc - src/cpp/common/insecure_create_auth_context.cc - src/cpp/common/resource_quota_cc.cc - src/cpp/common/rpc_method.cc - src/cpp/common/validate_service_config.cc - src/cpp/common/version_cc.cc - src/cpp/server/async_generic_service.cc - src/cpp/server/channel_argument_option.cc - src/cpp/server/create_default_thread_pool.cc - src/cpp/server/dynamic_thread_pool.cc - src/cpp/server/external_connection_acceptor_impl.cc - src/cpp/server/health/default_health_check_service.cc - src/cpp/server/health/health_check_service.cc - src/cpp/server/health/health_check_service_server_builder_option.cc - src/cpp/server/insecure_server_credentials.cc - src/cpp/server/server_builder.cc - src/cpp/server/server_callback.cc - src/cpp/server/server_cc.cc - src/cpp/server/server_context.cc - src/cpp/server/server_credentials.cc - src/cpp/server/server_posix.cc - src/cpp/thread_manager/thread_manager.cc - src/cpp/util/byte_buffer_cc.cc - src/cpp/util/status.cc - src/cpp/util/string_ref.cc - src/cpp/util/time_cc.cc deps: - grpc_unsecure - gpr - address_sorting - upb baselib: true dll: true secure: false - name: grpc_plugin_support build: protoc language: c++ public_headers: - include/grpc++/impl/codegen/config_protobuf.h - include/grpcpp/impl/codegen/config_protobuf.h headers: - src/compiler/config.h - src/compiler/config_protobuf.h - src/compiler/cpp_generator.h - src/compiler/cpp_generator_helpers.h - src/compiler/cpp_plugin.h - src/compiler/csharp_generator.h - src/compiler/csharp_generator_helpers.h - src/compiler/generator_helpers.h - src/compiler/node_generator.h - src/compiler/node_generator_helpers.h - src/compiler/objective_c_generator.h - src/compiler/objective_c_generator_helpers.h - src/compiler/php_generator.h - src/compiler/php_generator_helpers.h - src/compiler/protobuf_plugin.h - src/compiler/python_generator.h - src/compiler/python_generator_helpers.h - src/compiler/python_private_generator.h - src/compiler/ruby_generator.h - src/compiler/ruby_generator_helpers-inl.h - src/compiler/ruby_generator_map-inl.h - src/compiler/ruby_generator_string-inl.h - src/compiler/schema_interface.h src: - src/compiler/cpp_generator.cc - src/compiler/csharp_generator.cc - src/compiler/node_generator.cc - src/compiler/objective_c_generator.cc - src/compiler/php_generator.cc - src/compiler/python_generator.cc - src/compiler/ruby_generator.cc deps: [] secure: false - name: grpcpp_channelz build: all language: c++ public_headers: - include/grpcpp/ext/channelz_service_plugin.h - include/grpcpp/ext/channelz_service_plugin_impl.h headers: - src/cpp/server/channelz/channelz_service.h src: - src/proto/grpc/channelz/channelz.proto - src/cpp/server/channelz/channelz_service.cc - src/cpp/server/channelz/channelz_service_plugin.cc deps: - grpc++ - grpc - gpr - address_sorting - upb targets: - name: algorithm_test build: test language: c headers: [] src: - test/core/compression/algorithm_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: alloc_test build: test language: c headers: [] src: - test/core/gpr/alloc_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: alpn_test build: test language: c headers: [] src: - test/core/transport/chttp2/alpn_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: alts_counter_test build: test language: c headers: - test/core/tsi/alts/crypt/gsec_test_util.h src: - test/core/tsi/alts/crypt/gsec_test_util.cc - test/core/tsi/alts/frame_protector/alts_counter_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: alts_crypt_test build: test language: c headers: - test/core/tsi/alts/crypt/gsec_test_util.h src: - test/core/tsi/alts/crypt/aes_gcm_test.cc - test/core/tsi/alts/crypt/gsec_test_util.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: alts_crypter_test build: test language: c headers: - test/core/tsi/alts/crypt/gsec_test_util.h src: - test/core/tsi/alts/crypt/gsec_test_util.cc - test/core/tsi/alts/frame_protector/alts_crypter_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: alts_frame_protector_test build: test language: c headers: - test/core/tsi/alts/crypt/gsec_test_util.h - test/core/tsi/transport_security_test_lib.h src: - test/core/tsi/alts/crypt/gsec_test_util.cc - test/core/tsi/alts/frame_protector/alts_frame_protector_test.cc - test/core/tsi/transport_security_test_lib.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: alts_grpc_record_protocol_test build: test language: c headers: - test/core/tsi/alts/crypt/gsec_test_util.h src: - test/core/tsi/alts/crypt/gsec_test_util.cc - test/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: alts_handshaker_client_test build: test language: c headers: - test/core/tsi/alts/handshaker/alts_handshaker_service_api_test_lib.h src: - test/core/tsi/alts/handshaker/alts_handshaker_client_test.cc - test/core/tsi/alts/handshaker/alts_handshaker_service_api_test_lib.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: alts_iovec_record_protocol_test build: test language: c headers: - test/core/tsi/alts/crypt/gsec_test_util.h src: - test/core/tsi/alts/crypt/gsec_test_util.cc - test/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: alts_security_connector_test build: test language: c headers: [] src: - test/core/security/alts_security_connector_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: alts_tsi_handshaker_test build: test language: c headers: - test/core/tsi/alts/handshaker/alts_handshaker_service_api_test_lib.h src: - test/core/tsi/alts/handshaker/alts_handshaker_service_api_test_lib.cc - test/core/tsi/alts/handshaker/alts_tsi_handshaker_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: alts_tsi_utils_test build: test language: c headers: - test/core/tsi/alts/handshaker/alts_handshaker_service_api_test_lib.h src: - test/core/tsi/alts/handshaker/alts_handshaker_service_api_test_lib.cc - test/core/tsi/alts/handshaker/alts_tsi_utils_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: alts_zero_copy_grpc_protector_test build: test language: c headers: - test/core/tsi/alts/crypt/gsec_test_util.h src: - test/core/tsi/alts/crypt/gsec_test_util.cc - test/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: arena_test build: test language: c headers: [] src: - test/core/gpr/arena_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: auth_context_test build: test language: c headers: [] src: - test/core/security/auth_context_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: avl_test build: test language: c headers: [] src: - test/core/avl/avl_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: b64_test build: test language: c headers: [] src: - test/core/slice/b64_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: bad_server_response_test build: test language: c headers: - test/core/end2end/cq_verifier.h src: - test/core/end2end/bad_server_response_test.cc - test/core/end2end/cq_verifier.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: bad_ssl_alpn_test build: test language: c headers: - test/core/end2end/cq_verifier.h src: - test/core/bad_ssl/bad_ssl_test.cc - test/core/end2end/cq_verifier.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: bad_ssl_cert_test build: test language: c headers: - test/core/end2end/cq_verifier.h src: - test/core/bad_ssl/bad_ssl_test.cc - test/core/end2end/cq_verifier.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: bin_decoder_test build: test language: c headers: [] src: - test/core/transport/chttp2/bin_decoder_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: bin_encoder_test build: test language: c headers: [] src: - test/core/transport/chttp2/bin_encoder_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: buffer_list_test build: test language: c headers: [] src: - test/core/iomgr/buffer_list_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: channel_args_test build: test language: c headers: [] src: - test/core/channel/channel_args_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: channel_create_test build: test language: c headers: [] src: - test/core/surface/channel_create_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: channel_stack_builder_test build: test language: c headers: [] src: - test/core/channel/channel_stack_builder_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: channel_stack_test build: test language: c headers: [] src: - test/core/channel/channel_stack_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: check_gcp_environment_linux_test build: test language: c headers: [] src: - test/core/security/check_gcp_environment_linux_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: check_gcp_environment_windows_test build: test language: c headers: [] src: - test/core/security/check_gcp_environment_windows_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: client_ssl_test build: test language: c headers: [] src: - test/core/handshake/client_ssl.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: cmdline_test build: test language: c headers: [] src: - test/core/util/cmdline_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: combiner_test build: test language: c headers: [] src: - test/core/iomgr/combiner_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: completion_queue_threading_test build: test run: false language: c headers: [] src: - test/core/surface/completion_queue_threading_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: compression_test build: test language: c headers: [] src: - test/core/compression/compression_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: concurrent_connectivity_test build: test run: false language: c headers: [] src: - test/core/surface/concurrent_connectivity_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: connection_refused_test build: test language: c headers: - test/core/end2end/cq_verifier.h src: - test/core/end2end/connection_refused_test.cc - test/core/end2end/cq_verifier.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: cpu_test build: test language: c headers: [] src: - test/core/gpr/cpu_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: dns_resolver_connectivity_using_ares_resolver_test build: test language: c headers: [] src: - test/core/client_channel/resolvers/dns_resolver_connectivity_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb args: - --resolver=ares - name: dns_resolver_connectivity_using_native_resolver_test build: test language: c headers: [] src: - test/core/client_channel/resolvers/dns_resolver_connectivity_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb args: - --resolver=native - name: dns_resolver_cooldown_test build: test language: c headers: [] src: - test/core/client_channel/resolvers/dns_resolver_cooldown_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: dns_resolver_test build: test language: c headers: [] src: - test/core/client_channel/resolvers/dns_resolver_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: dualstack_socket_test build: test language: c headers: - test/core/end2end/cq_verifier.h src: - test/core/end2end/cq_verifier.cc - test/core/end2end/dualstack_socket_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: endpoint_pair_test build: test language: c headers: - test/core/iomgr/endpoint_tests.h src: - test/core/iomgr/endpoint_pair_test.cc - test/core/iomgr/endpoint_tests.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: env_test build: test language: c headers: [] src: - test/core/gpr/env_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: error_test build: test language: c headers: - test/core/iomgr/endpoint_tests.h src: - test/core/iomgr/endpoint_tests.cc - test/core/iomgr/error_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: ev_epollex_linux_test build: test language: c headers: [] src: - test/core/iomgr/ev_epollex_linux_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: fake_resolver_test build: test language: c headers: [] src: - test/core/client_channel/resolvers/fake_resolver_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: fake_transport_security_test build: test language: c headers: - test/core/tsi/transport_security_test_lib.h src: - test/core/tsi/fake_transport_security_test.cc - test/core/tsi/transport_security_test_lib.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: fd_conservation_posix_test build: test language: c headers: [] src: - test/core/iomgr/fd_conservation_posix_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: fd_posix_test build: test language: c headers: [] src: - test/core/iomgr/fd_posix_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: fling_stream_test build: test language: c headers: - test/core/end2end/data/ssl_test_data.h src: - test/core/end2end/data/client_certs.cc - test/core/end2end/data/server1_cert.cc - test/core/end2end/data/server1_key.cc - test/core/end2end/data/test_root_cert.cc - test/core/fling/fling_stream_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: fling_test build: test language: c headers: - test/core/end2end/data/ssl_test_data.h src: - test/core/end2end/data/client_certs.cc - test/core/end2end/data/server1_cert.cc - test/core/end2end/data/server1_key.cc - test/core/end2end/data/test_root_cert.cc - test/core/fling/fling_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: fork_test build: test language: c headers: [] src: - test/core/gprpp/fork_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac uses_polling: false - name: format_request_test build: test language: c headers: - test/core/end2end/data/ssl_test_data.h src: - test/core/end2end/data/client_certs.cc - test/core/end2end/data/server1_cert.cc - test/core/end2end/data/server1_key.cc - test/core/end2end/data/test_root_cert.cc - test/core/http/format_request_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: frame_handler_test build: test language: c headers: - test/core/tsi/alts/crypt/gsec_test_util.h src: - test/core/tsi/alts/crypt/gsec_test_util.cc - test/core/tsi/alts/frame_protector/frame_handler_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: goaway_server_test build: test language: c headers: - test/core/end2end/cq_verifier.h src: - test/core/end2end/cq_verifier.cc - test/core/end2end/goaway_server_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: grpc_alts_credentials_options_test build: test language: c headers: [] src: - test/core/security/grpc_alts_credentials_options_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: grpc_byte_buffer_reader_test build: test language: c headers: [] src: - test/core/surface/byte_buffer_reader_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: grpc_completion_queue_test build: test language: c headers: [] src: - test/core/surface/completion_queue_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: grpc_ipv6_loopback_available_test build: test language: c headers: [] src: - test/core/iomgr/grpc_ipv6_loopback_available_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: handshake_server_with_readahead_handshaker_test build: test language: c headers: - test/core/handshake/server_ssl_common.h src: - test/core/handshake/readahead_handshaker_server_ssl.cc - test/core/handshake/server_ssl_common.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: handshake_verify_peer_options_test build: test language: c headers: [] src: - test/core/handshake/verify_peer_options.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: histogram_test build: test language: c headers: [] src: - test/core/util/histogram_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: host_port_test build: test language: c headers: [] src: - test/core/gprpp/host_port_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: hpack_encoder_test build: test language: c headers: [] src: - test/core/transport/chttp2/hpack_encoder_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: hpack_parser_test build: test language: c headers: [] src: - test/core/transport/chttp2/hpack_parser_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: hpack_table_test build: test language: c headers: [] src: - test/core/transport/chttp2/hpack_table_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: httpcli_test build: test language: c headers: - test/core/end2end/data/ssl_test_data.h src: - test/core/end2end/data/client_certs.cc - test/core/end2end/data/server1_cert.cc - test/core/end2end/data/server1_key.cc - test/core/end2end/data/test_root_cert.cc - test/core/http/httpcli_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: httpscli_test build: test language: c headers: - test/core/end2end/data/ssl_test_data.h src: - test/core/end2end/data/client_certs.cc - test/core/end2end/data/server1_cert.cc - test/core/end2end/data/server1_key.cc - test/core/end2end/data/test_root_cert.cc - test/core/http/httpscli_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: init_test build: test language: c headers: [] src: - test/core/surface/init_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: inproc_callback_test build: test language: c headers: [] src: - test/core/end2end/inproc_callback_test.cc deps: - end2end_tests - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: invalid_call_argument_test build: test language: c headers: - test/core/end2end/cq_verifier.h src: - test/core/end2end/cq_verifier.cc - test/core/end2end/invalid_call_argument_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: json_token_test build: test language: c headers: [] src: - test/core/security/json_token_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: jwt_verifier_test build: test language: c headers: [] src: - test/core/security/jwt_verifier_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: lame_client_test build: test language: c headers: - test/core/end2end/cq_verifier.h src: - test/core/end2end/cq_verifier.cc - test/core/surface/lame_client_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: load_file_test build: test language: c headers: [] src: - test/core/iomgr/load_file_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: log_test build: test language: c headers: [] src: - test/core/gpr/log_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: manual_constructor_test build: test language: c headers: [] src: - test/core/gprpp/manual_constructor_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: message_compress_test build: test language: c headers: [] src: - test/core/compression/message_compress_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: metadata_test build: test language: c headers: [] src: - test/core/transport/metadata_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: minimal_stack_is_minimal_test build: test language: c headers: [] src: - test/core/channel/minimal_stack_is_minimal_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: mpmcqueue_test build: test language: c headers: [] src: - test/core/iomgr/mpmcqueue_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: mpscq_test build: test language: c headers: [] src: - test/core/gprpp/mpscq_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac uses_polling: false - name: multiple_server_queues_test build: test language: c headers: - test/core/end2end/cq_verifier.h src: - test/core/end2end/cq_verifier.cc - test/core/end2end/multiple_server_queues_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: murmur_hash_test build: test language: c headers: [] src: - test/core/gpr/murmur_hash_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: no_server_test build: test language: c headers: - test/core/end2end/cq_verifier.h src: - test/core/end2end/cq_verifier.cc - test/core/end2end/no_server_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: num_external_connectivity_watchers_test build: test language: c headers: [] src: - test/core/surface/num_external_connectivity_watchers_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: parse_address_test build: test language: c headers: [] src: - test/core/client_channel/parse_address_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: parse_address_with_named_scope_id_test build: test language: c headers: [] src: - test/core/client_channel/parse_address_with_named_scope_id_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac uses_polling: false - name: parser_test build: test language: c headers: - test/core/end2end/data/ssl_test_data.h src: - test/core/end2end/data/client_certs.cc - test/core/end2end/data/server1_cert.cc - test/core/end2end/data/server1_key.cc - test/core/end2end/data/test_root_cert.cc - test/core/http/parser_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: percent_encoding_test build: test language: c headers: [] src: - test/core/slice/percent_encoding_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: public_headers_must_be_c89 build: test language: c headers: [] src: - test/core/surface/public_headers_must_be_c89.c deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: resolve_address_using_ares_resolver_posix_test build: test language: c headers: [] src: - test/core/iomgr/resolve_address_posix_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb args: - --resolver=ares platforms: - linux - posix - mac - name: resolve_address_using_ares_resolver_test build: test language: c headers: [] src: - test/core/iomgr/resolve_address_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb args: - --resolver=ares - name: resolve_address_using_native_resolver_posix_test build: test language: c headers: [] src: - test/core/iomgr/resolve_address_posix_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb args: - --resolver=native platforms: - linux - posix - mac - name: resolve_address_using_native_resolver_test build: test language: c headers: [] src: - test/core/iomgr/resolve_address_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb args: - --resolver=native - name: resource_quota_test build: test language: c headers: [] src: - test/core/iomgr/resource_quota_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: secure_channel_create_test build: test language: c headers: [] src: - test/core/surface/secure_channel_create_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: secure_endpoint_test build: test language: c headers: - test/core/iomgr/endpoint_tests.h src: - test/core/iomgr/endpoint_tests.cc - test/core/security/secure_endpoint_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: security_connector_test build: test language: c headers: [] src: - test/core/security/security_connector_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: sequential_connectivity_test build: test run: false language: c headers: [] src: - test/core/surface/sequential_connectivity_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: server_chttp2_test build: test language: c headers: [] src: - test/core/surface/server_chttp2_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: server_ssl_test build: test language: c headers: - test/core/handshake/server_ssl_common.h src: - test/core/handshake/server_ssl.cc - test/core/handshake/server_ssl_common.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: server_test build: test language: c headers: [] src: - test/core/surface/server_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: slice_buffer_test build: test language: c headers: [] src: - test/core/slice/slice_buffer_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: slice_string_helpers_test build: test language: c headers: [] src: - test/core/slice/slice_string_helpers_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: sockaddr_resolver_test build: test language: c headers: [] src: - test/core/client_channel/resolvers/sockaddr_resolver_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: sockaddr_utils_test build: test language: c headers: [] src: - test/core/iomgr/sockaddr_utils_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: socket_utils_test build: test language: c headers: [] src: - test/core/iomgr/socket_utils_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: spinlock_test build: test language: c headers: [] src: - test/core/gpr/spinlock_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: ssl_credentials_test build: test language: c headers: [] src: - test/core/security/ssl_credentials_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: ssl_transport_security_test build: test language: c headers: - test/core/tsi/transport_security_test_lib.h src: - test/core/tsi/ssl_transport_security_test.cc - test/core/tsi/transport_security_test_lib.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: status_conversion_test build: test language: c headers: [] src: - test/core/transport/status_conversion_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: stream_compression_test build: test language: c headers: [] src: - test/core/compression/stream_compression_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: stream_map_test build: test language: c headers: [] src: - test/core/transport/chttp2/stream_map_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: stream_owned_slice_test build: test language: c headers: [] src: - test/core/transport/stream_owned_slice_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: string_test build: test language: c headers: [] src: - test/core/gpr/string_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: sync_test build: test language: c headers: [] src: - test/core/gpr/sync_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: tcp_client_posix_test build: test language: c headers: [] src: - test/core/iomgr/tcp_client_posix_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: tcp_posix_test build: test language: c headers: - test/core/iomgr/endpoint_tests.h src: - test/core/iomgr/endpoint_tests.cc - test/core/iomgr/tcp_posix_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - name: tcp_server_posix_test build: test language: c headers: [] src: - test/core/iomgr/tcp_server_posix_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: test_core_gpr_time_test build: test language: c headers: [] src: - test/core/gpr/time_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: test_core_security_credentials_test build: test language: c headers: [] src: - test/core/security/credentials_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: test_core_slice_slice_test build: test language: c headers: [] src: - test/core/slice/slice_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: thd_test build: test language: c headers: [] src: - test/core/gprpp/thd_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: threadpool_test build: test language: c headers: [] src: - test/core/iomgr/threadpool_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: time_averaged_stats_test build: test language: c headers: [] src: - test/core/iomgr/time_averaged_stats_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: timeout_encoding_test build: test language: c headers: [] src: - test/core/transport/timeout_encoding_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: timer_heap_test build: test language: c headers: [] src: - test/core/iomgr/timer_heap_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: timer_list_test build: test language: c headers: [] src: - test/core/iomgr/timer_list_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: tls_test build: test language: c headers: [] src: - test/core/gpr/tls_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: transport_security_common_api_test build: test language: c headers: [] src: - test/core/tsi/alts/handshaker/transport_security_common_api_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: transport_security_test build: test language: c headers: [] src: - test/core/tsi/transport_security_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: udp_server_test build: test language: c headers: [] src: - test/core/iomgr/udp_server_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: uri_parser_test build: test language: c headers: [] src: - test/core/client_channel/uri_parser_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: useful_test build: test language: c headers: [] src: - test/core/gpr/useful_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: varint_test build: test language: c headers: [] src: - test/core/transport/chttp2/varint_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: address_sorting_test gtest: true build: test language: c++ headers: [] src: - test/cpp/naming/address_sorting_test.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc++_test_config - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: address_sorting_test_unsecure gtest: true build: test language: c++ headers: - test/cpp/util/byte_buffer_proto_helper.h - test/cpp/util/string_ref_helper.h - test/cpp/util/subprocess.h src: - test/cpp/naming/address_sorting_test.cc - test/cpp/util/byte_buffer_proto_helper.cc - test/cpp/util/string_ref_helper.cc - test/cpp/util/subprocess.cc deps: - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - grpc++_test_config - gpr - address_sorting - upb platforms: - linux - posix - mac - name: alarm_test gtest: true build: test language: c++ headers: [] src: - test/cpp/common/alarm_test.cc deps: - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - gpr - address_sorting - upb platforms: - linux - posix - mac - name: alts_concurrent_connectivity_test gtest: true build: test language: c++ headers: - test/core/end2end/cq_verifier.h - test/core/tsi/alts/fake_handshaker/fake_handshaker_server.h src: - test/core/tsi/alts/fake_handshaker/handshaker.proto - test/core/tsi/alts/fake_handshaker/transport_security_common.proto - test/core/end2end/cq_verifier.cc - test/core/tsi/alts/fake_handshaker/fake_handshaker_server.cc - test/core/tsi/alts/handshaker/alts_concurrent_connectivity_test.cc deps: - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: alts_credentials_fuzzer build: fuzzer language: c++ headers: [] src: - test/core/security/alts_credentials_fuzzer.cc - test/core/util/fuzzer_corpus_test.cc deps: - grpc_test_util - grpc++_test_config - grpc - gpr - address_sorting - upb corpus_dirs: - test/core/security/corpus/alts_credentials_corpus maxlen: 2048 - name: alts_util_test gtest: true build: test language: c++ headers: [] src: - test/cpp/common/alts_util_test.cc deps: - grpc++_test_util - grpc++_alts - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: async_end2end_test gtest: true build: test language: c++ headers: [] src: - src/proto/grpc/health/v1/health.proto - src/proto/grpc/testing/duplicate/echo_duplicate.proto - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/async_end2end_test.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: auth_property_iterator_test gtest: true build: test language: c++ headers: [] src: - test/cpp/common/auth_property_iterator_test.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb uses_polling: false - name: backoff_test gtest: true build: test language: c++ headers: [] src: - test/core/backoff/backoff_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: bad_streaming_id_bad_client_test gtest: true build: test language: c++ headers: - test/core/bad_client/bad_client.h - test/core/end2end/cq_verifier.h src: - test/core/bad_client/bad_client.cc - test/core/bad_client/tests/bad_streaming_id.cc - test/core/end2end/cq_verifier.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: badreq_bad_client_test gtest: true build: test language: c++ headers: - test/core/bad_client/bad_client.h - test/core/end2end/cq_verifier.h src: - test/core/bad_client/bad_client.cc - test/core/bad_client/tests/badreq.cc - test/core/end2end/cq_verifier.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: bdp_estimator_test gtest: true build: test language: c++ headers: [] src: - test/core/transport/bdp_estimator_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac uses_polling: false - name: bm_alarm build: test language: c++ headers: [] src: - test/cpp/microbenchmarks/bm_alarm.cc deps: - benchmark_helpers - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - grpc++_test_config - gpr - address_sorting - upb - benchmark benchmark: true defaults: benchmark platforms: - linux - posix - name: bm_arena build: test language: c++ headers: [] src: - test/cpp/microbenchmarks/bm_arena.cc deps: - benchmark_helpers - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - grpc++_test_config - gpr - address_sorting - upb - benchmark benchmark: true defaults: benchmark platforms: - linux - posix uses_polling: false - name: bm_byte_buffer build: test language: c++ headers: [] src: - test/cpp/microbenchmarks/bm_byte_buffer.cc deps: - benchmark_helpers - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - grpc++_test_config - gpr - address_sorting - upb - benchmark benchmark: true defaults: benchmark platforms: - linux - posix uses_polling: false - name: bm_call_create build: test language: c++ headers: [] src: - test/cpp/microbenchmarks/bm_call_create.cc deps: - benchmark_helpers - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - grpc++_test_config - gpr - address_sorting - upb - benchmark benchmark: true defaults: benchmark platforms: - linux - posix uses_polling: false - name: bm_callback_streaming_ping_pong build: test language: c++ headers: - test/cpp/microbenchmarks/callback_streaming_ping_pong.h - test/cpp/microbenchmarks/callback_test_service.h - test/cpp/util/byte_buffer_proto_helper.h - test/cpp/util/string_ref_helper.h - test/cpp/util/subprocess.h src: - test/cpp/microbenchmarks/bm_callback_streaming_ping_pong.cc - test/cpp/microbenchmarks/callback_test_service.cc - test/cpp/util/byte_buffer_proto_helper.cc - test/cpp/util/string_ref_helper.cc - test/cpp/util/subprocess.cc deps: - benchmark_helpers - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - grpc++_test_config - gpr - address_sorting - upb - benchmark benchmark: true defaults: benchmark platforms: - linux - posix - name: bm_callback_unary_ping_pong build: test language: c++ headers: - test/cpp/microbenchmarks/callback_test_service.h - test/cpp/microbenchmarks/callback_unary_ping_pong.h - test/cpp/util/byte_buffer_proto_helper.h - test/cpp/util/string_ref_helper.h - test/cpp/util/subprocess.h src: - test/cpp/microbenchmarks/bm_callback_unary_ping_pong.cc - test/cpp/microbenchmarks/callback_test_service.cc - test/cpp/util/byte_buffer_proto_helper.cc - test/cpp/util/string_ref_helper.cc - test/cpp/util/subprocess.cc deps: - benchmark_helpers - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - grpc++_test_config - gpr - address_sorting - upb - benchmark benchmark: true defaults: benchmark platforms: - linux - posix - name: bm_channel build: test language: c++ headers: [] src: - test/cpp/microbenchmarks/bm_channel.cc deps: - benchmark_helpers - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - grpc++_test_config - gpr - address_sorting - upb - benchmark benchmark: true defaults: benchmark platforms: - linux - posix uses_polling: false - name: bm_chttp2_hpack build: test language: c++ headers: [] src: - test/cpp/microbenchmarks/bm_chttp2_hpack.cc deps: - benchmark_helpers - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - grpc++_test_config - gpr - address_sorting - upb - benchmark benchmark: true defaults: benchmark platforms: - linux - posix uses_polling: false - name: bm_chttp2_transport build: test language: c++ headers: [] src: - test/cpp/microbenchmarks/bm_chttp2_transport.cc deps: - benchmark_helpers - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - grpc++_test_config - gpr - address_sorting - upb - benchmark benchmark: true defaults: benchmark platforms: - linux - posix - name: bm_closure build: test language: c++ headers: [] src: - test/cpp/microbenchmarks/bm_closure.cc deps: - benchmark_helpers - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - grpc++_test_config - gpr - address_sorting - upb - benchmark benchmark: true defaults: benchmark platforms: - linux - posix - name: bm_cq build: test language: c++ headers: [] src: - test/cpp/microbenchmarks/bm_cq.cc deps: - benchmark_helpers - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - grpc++_test_config - gpr - address_sorting - upb - benchmark benchmark: true defaults: benchmark platforms: - linux - posix - name: bm_cq_multiple_threads build: test language: c++ headers: [] src: - test/cpp/microbenchmarks/bm_cq_multiple_threads.cc deps: - benchmark_helpers - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - grpc++_test_config - gpr - address_sorting - upb - benchmark benchmark: true defaults: benchmark platforms: - linux - posix uses_polling: false - name: bm_error build: test language: c++ headers: [] src: - test/cpp/microbenchmarks/bm_error.cc deps: - benchmark_helpers - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - grpc++_test_config - gpr - address_sorting - upb - benchmark benchmark: true defaults: benchmark platforms: - linux - posix uses_polling: false - name: bm_fullstack_streaming_ping_pong build: test language: c++ headers: - test/cpp/microbenchmarks/fullstack_streaming_ping_pong.h src: - test/cpp/microbenchmarks/bm_fullstack_streaming_ping_pong.cc deps: - benchmark_helpers - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - grpc++_test_config - gpr - address_sorting - upb - benchmark benchmark: true defaults: benchmark platforms: - linux - posix - name: bm_fullstack_streaming_pump build: test language: c++ headers: - test/cpp/microbenchmarks/fullstack_streaming_pump.h src: - test/cpp/microbenchmarks/bm_fullstack_streaming_pump.cc deps: - benchmark_helpers - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - grpc++_test_config - gpr - address_sorting - upb - benchmark benchmark: true defaults: benchmark platforms: - linux - posix - name: bm_fullstack_trickle build: test run: false language: c++ headers: [] src: - test/cpp/microbenchmarks/bm_fullstack_trickle.cc deps: - benchmark_helpers - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - grpc++_test_config - gpr - address_sorting - upb - benchmark benchmark: true defaults: benchmark platforms: - linux - posix - mac - name: bm_fullstack_unary_ping_pong build: test language: c++ headers: - test/cpp/microbenchmarks/fullstack_unary_ping_pong.h src: - test/cpp/microbenchmarks/bm_fullstack_unary_ping_pong.cc deps: - benchmark_helpers - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - grpc++_test_config - gpr - address_sorting - upb - benchmark benchmark: true defaults: benchmark platforms: - linux - posix - name: bm_metadata build: test language: c++ headers: [] src: - test/cpp/microbenchmarks/bm_metadata.cc deps: - benchmark_helpers - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - grpc++_test_config - gpr - address_sorting - upb - benchmark benchmark: true defaults: benchmark platforms: - linux - posix uses_polling: false - name: bm_pollset build: test language: c++ headers: [] src: - test/cpp/microbenchmarks/bm_pollset.cc deps: - benchmark_helpers - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - grpc++_test_config - gpr - address_sorting - upb - benchmark benchmark: true defaults: benchmark platforms: - linux - posix - name: bm_threadpool build: test run: false language: c++ headers: [] src: - test/cpp/microbenchmarks/bm_threadpool.cc deps: - benchmark_helpers - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - grpc++_test_config - gpr - address_sorting - upb - benchmark benchmark: true defaults: benchmark platforms: - linux - posix - mac uses_polling: false - name: bm_timer build: test language: c++ headers: [] src: - test/cpp/microbenchmarks/bm_timer.cc deps: - benchmark_helpers - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - grpc++_test_config - gpr - address_sorting - upb - benchmark benchmark: true defaults: benchmark platforms: - linux - posix uses_polling: false - name: byte_buffer_test gtest: true build: test language: c++ headers: [] src: - test/cpp/util/byte_buffer_test.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb uses_polling: false - name: byte_stream_test gtest: true build: test language: c++ headers: [] src: - test/core/transport/byte_stream_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: cancel_ares_query_test gtest: true build: test run: false language: c++ headers: - test/core/end2end/cq_verifier.h - test/cpp/naming/dns_test_util.h src: - test/core/end2end/cq_verifier.cc - test/cpp/naming/cancel_ares_query_test.cc - test/cpp/naming/dns_test_util.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc++_test_config - grpc - gpr - address_sorting - upb - name: cfstream_test gtest: true build: test run: false language: c++ headers: - test/cpp/end2end/test_service_impl.h src: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/cfstream_test.cc - test/cpp/end2end/test_service_impl.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: channel_arguments_test gtest: true build: test language: c++ headers: [] src: - test/cpp/common/channel_arguments_test.cc deps: - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb uses_polling: false - name: channel_filter_test gtest: true build: test language: c++ headers: [] src: - test/cpp/common/channel_filter_test.cc deps: - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb uses_polling: false - name: channel_trace_test gtest: true build: test language: c++ headers: - test/cpp/util/channel_trace_proto_helper.h src: - src/proto/grpc/channelz/channelz.proto - test/core/channel/channel_trace_test.cc - test/cpp/util/channel_trace_proto_helper.cc deps: - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: channelz_registry_test gtest: true build: test language: c++ headers: [] src: - test/core/channel/channelz_registry_test.cc deps: - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb uses_polling: false - name: channelz_service_test gtest: true build: test language: c++ headers: - test/cpp/end2end/test_service_impl.h src: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/channelz_service_test.cc - test/cpp/end2end/test_service_impl.cc deps: - grpcpp_channelz - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: channelz_test gtest: true build: test language: c++ headers: - test/cpp/util/channel_trace_proto_helper.h src: - src/proto/grpc/channelz/channelz.proto - test/core/channel/channelz_test.cc - test/cpp/util/channel_trace_proto_helper.cc deps: - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: cli_call_test gtest: true build: test language: c++ headers: - test/cpp/util/cli_call.h - test/cpp/util/cli_credentials.h - test/cpp/util/config_grpc_cli.h - test/cpp/util/grpc_tool.h - test/cpp/util/proto_file_parser.h - test/cpp/util/proto_reflection_descriptor_database.h - test/cpp/util/service_describer.h src: - src/proto/grpc/reflection/v1alpha/reflection.proto - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/util/cli_call.cc - test/cpp/util/cli_call_test.cc - test/cpp/util/cli_credentials.cc - test/cpp/util/grpc_tool.cc - test/cpp/util/proto_file_parser.cc - test/cpp/util/proto_reflection_descriptor_database.cc - test/cpp/util/service_describer.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: client_callback_end2end_test gtest: true build: test language: c++ headers: - test/cpp/end2end/interceptors_util.h - test/cpp/end2end/test_service_impl.h src: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/client_callback_end2end_test.cc - test/cpp/end2end/interceptors_util.cc - test/cpp/end2end/test_service_impl.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: client_channel_stress_test gtest: true build: test run: false language: c++ headers: - test/cpp/end2end/test_service_impl.h src: - src/proto/grpc/lb/v1/load_balancer.proto - src/proto/grpc/testing/duplicate/echo_duplicate.proto - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/client/client_channel_stress_test.cc - test/cpp/end2end/test_service_impl.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: client_fuzzer build: fuzzer language: c++ headers: [] src: - test/core/end2end/fuzzers/client_fuzzer.cc - test/core/util/fuzzer_corpus_test.cc deps: - grpc_test_util - grpc++_test_config - grpc - gpr - address_sorting - upb corpus_dirs: - test/core/end2end/fuzzers/client_fuzzer_corpus dict: test/core/end2end/fuzzers/hpack.dictionary maxlen: 2048 - name: client_interceptors_end2end_test gtest: true build: test language: c++ headers: - test/cpp/end2end/interceptors_util.h - test/cpp/end2end/test_service_impl.h src: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/client_interceptors_end2end_test.cc - test/cpp/end2end/interceptors_util.cc - test/cpp/end2end/test_service_impl.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: client_lb_end2end_test gtest: true build: test run: false language: c++ headers: - test/core/util/test_lb_policies.h - test/cpp/end2end/test_service_impl.h src: - src/proto/grpc/testing/duplicate/echo_duplicate.proto - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - src/proto/grpc/testing/xds/orca_load_report_for_test.proto - test/core/util/test_lb_policies.cc - test/cpp/end2end/client_lb_end2end_test.cc - test/cpp/end2end/test_service_impl.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: codegen_test_full gtest: true build: test language: c++ headers: [] src: - test/cpp/codegen/codegen_test_full.cc deps: - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb uses_polling: false - name: codegen_test_minimal gtest: true build: test language: c++ headers: [] src: - test/cpp/codegen/codegen_test_minimal.cc deps: - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb uses_polling: false - name: connection_prefix_bad_client_test gtest: true build: test language: c++ headers: - test/core/bad_client/bad_client.h - test/core/end2end/cq_verifier.h src: - test/core/bad_client/bad_client.cc - test/core/bad_client/tests/connection_prefix.cc - test/core/end2end/cq_verifier.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: connectivity_state_test gtest: true build: test language: c++ headers: [] src: - test/core/transport/connectivity_state_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: context_list_test gtest: true build: test language: c++ headers: [] src: - test/core/transport/chttp2/context_list_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: delegating_channel_test gtest: true build: test language: c++ headers: - test/cpp/end2end/test_service_impl.h src: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/delegating_channel_test.cc - test/cpp/end2end/test_service_impl.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: destroy_grpclb_channel_with_active_connect_stress_test gtest: true build: test language: c++ headers: [] src: - test/cpp/client/destroy_grpclb_channel_with_active_connect_stress_test.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: duplicate_header_bad_client_test gtest: true build: test language: c++ headers: - test/core/bad_client/bad_client.h - test/core/end2end/cq_verifier.h src: - test/core/bad_client/bad_client.cc - test/core/bad_client/tests/duplicate_header.cc - test/core/end2end/cq_verifier.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: end2end_test gtest: true build: test run: false language: c++ headers: - test/cpp/end2end/interceptors_util.h - test/cpp/end2end/test_service_impl.h src: - src/proto/grpc/testing/duplicate/echo_duplicate.proto - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/end2end_test.cc - test/cpp/end2end/interceptors_util.cc - test/cpp/end2end/test_service_impl.cc deps: - grpc++_test_util - grpc++_test - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: error_details_test gtest: true build: test language: c++ headers: [] src: - src/proto/grpc/testing/echo_messages.proto - test/cpp/util/error_details_test.cc deps: - grpc++_error_details - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: eventmanager_libuv_test gtest: true build: test language: c++ headers: [] src: - test/core/iomgr/poller/eventmanager_libuv_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: exception_test gtest: true build: test language: c++ headers: [] src: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/exception_test.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: filter_end2end_test gtest: true build: test language: c++ headers: [] src: - src/proto/grpc/testing/duplicate/echo_duplicate.proto - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/filter_end2end_test.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: flaky_network_test gtest: true build: test run: false language: c++ headers: - test/cpp/end2end/test_service_impl.h src: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/flaky_network_test.cc - test/cpp/end2end/test_service_impl.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: generic_end2end_test gtest: true build: test language: c++ headers: [] src: - src/proto/grpc/testing/duplicate/echo_duplicate.proto - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/generic_end2end_test.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: global_config_env_test gtest: true build: test language: c++ headers: [] src: - test/core/gprpp/global_config_env_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac uses_polling: false - name: global_config_test gtest: true build: test language: c++ headers: [] src: - test/core/gprpp/global_config_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: grpc_cli build: test run: false language: c++ headers: - test/cpp/util/cli_call.h - test/cpp/util/cli_credentials.h - test/cpp/util/config_grpc_cli.h - test/cpp/util/grpc_tool.h - test/cpp/util/proto_file_parser.h - test/cpp/util/proto_reflection_descriptor_database.h - test/cpp/util/service_describer.h src: - src/proto/grpc/reflection/v1alpha/reflection.proto - test/cpp/util/cli_call.cc - test/cpp/util/cli_credentials.cc - test/cpp/util/grpc_cli.cc - test/cpp/util/grpc_tool.cc - test/cpp/util/proto_file_parser.cc - test/cpp/util/proto_reflection_descriptor_database.cc - test/cpp/util/service_describer.cc deps: - grpc++ - grpc++_test_config - grpc - gpr - address_sorting - upb - name: grpc_cpp_plugin build: protoc language: c++ headers: [] src: - src/compiler/cpp_plugin.cc deps: - grpc_plugin_support secure: false - name: grpc_csharp_plugin build: protoc language: c++ headers: [] src: - src/compiler/csharp_plugin.cc deps: - grpc_plugin_support secure: false - name: grpc_node_plugin build: protoc language: c++ headers: [] src: - src/compiler/node_plugin.cc deps: - grpc_plugin_support secure: false - name: grpc_objective_c_plugin build: protoc language: c++ headers: [] src: - src/compiler/objective_c_plugin.cc deps: - grpc_plugin_support secure: false - name: grpc_php_plugin build: protoc language: c++ headers: [] src: - src/compiler/php_plugin.cc deps: - grpc_plugin_support secure: false - name: grpc_python_plugin build: protoc language: c++ headers: [] src: - src/compiler/python_plugin.cc deps: - grpc_plugin_support secure: false - name: grpc_ruby_plugin build: protoc language: c++ headers: [] src: - src/compiler/ruby_plugin.cc deps: - grpc_plugin_support secure: false - name: grpc_tls_credentials_options_test gtest: true build: test language: c++ headers: [] src: - test/core/security/grpc_tls_credentials_options_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: grpc_tool_test gtest: true build: test language: c++ headers: - test/cpp/util/cli_call.h - test/cpp/util/cli_credentials.h - test/cpp/util/config_grpc_cli.h - test/cpp/util/grpc_tool.h - test/cpp/util/proto_file_parser.h - test/cpp/util/proto_reflection_descriptor_database.h - test/cpp/util/service_describer.h src: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/util/cli_call.cc - test/cpp/util/cli_credentials.cc - test/cpp/util/grpc_tool.cc - test/cpp/util/grpc_tool_test.cc - test/cpp/util/proto_file_parser.cc - test/cpp/util/proto_reflection_descriptor_database.cc - test/cpp/util/service_describer.cc deps: - grpc++_test_util - grpc++_reflection - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: grpclb_api_test gtest: true build: test language: c++ headers: [] src: - src/proto/grpc/lb/v1/load_balancer.proto - test/cpp/grpclb/grpclb_api_test.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: grpclb_end2end_test gtest: true build: test run: false language: c++ headers: - test/cpp/end2end/test_service_impl.h src: - src/proto/grpc/lb/v1/load_balancer.proto - src/proto/grpc/testing/duplicate/echo_duplicate.proto - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/grpclb_end2end_test.cc - test/cpp/end2end/test_service_impl.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: h2_ssl_session_reuse_test gtest: true build: test language: c++ headers: [] src: - test/core/end2end/h2_ssl_session_reuse_test.cc deps: - end2end_tests - grpc_test_util - grpc - gpr - address_sorting - upb - name: head_of_line_blocking_bad_client_test gtest: true build: test language: c++ headers: - test/core/bad_client/bad_client.h - test/core/end2end/cq_verifier.h src: - test/core/bad_client/bad_client.cc - test/core/bad_client/tests/head_of_line_blocking.cc - test/core/end2end/cq_verifier.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: headers_bad_client_test gtest: true build: test language: c++ headers: - test/core/bad_client/bad_client.h - test/core/end2end/cq_verifier.h src: - test/core/bad_client/bad_client.cc - test/core/bad_client/tests/headers.cc - test/core/end2end/cq_verifier.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: health_service_end2end_test gtest: true build: test language: c++ headers: - test/cpp/end2end/test_health_check_service_impl.h - test/cpp/end2end/test_service_impl.h src: - src/proto/grpc/health/v1/health.proto - src/proto/grpc/testing/duplicate/echo_duplicate.proto - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/health_service_end2end_test.cc - test/cpp/end2end/test_health_check_service_impl.cc - test/cpp/end2end/test_service_impl.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: hpack_parser_fuzzer_test build: fuzzer language: c++ headers: [] src: - test/core/transport/chttp2/hpack_parser_fuzzer_test.cc - test/core/util/fuzzer_corpus_test.cc deps: - grpc_test_util - grpc++_test_config - grpc - gpr - address_sorting - upb corpus_dirs: - test/core/transport/chttp2/hpack_parser_corpus dict: test/core/end2end/fuzzers/hpack.dictionary maxlen: 512 - name: http2_client build: test run: false language: c++ headers: [] src: - src/proto/grpc/testing/empty.proto - src/proto/grpc/testing/messages.proto - src/proto/grpc/testing/test.proto - test/cpp/interop/http2_client.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc++_test_config - grpc - gpr - address_sorting - upb - name: http_request_fuzzer_test build: fuzzer language: c++ headers: [] src: - test/core/http/request_fuzzer.cc - test/core/util/fuzzer_corpus_test.cc deps: - grpc_test_util - grpc++_test_config - grpc - gpr - address_sorting - upb corpus_dirs: - test/core/http/request_corpus maxlen: 2048 - name: http_response_fuzzer_test build: fuzzer language: c++ headers: [] src: - test/core/http/response_fuzzer.cc - test/core/util/fuzzer_corpus_test.cc deps: - grpc_test_util - grpc++_test_config - grpc - gpr - address_sorting - upb corpus_dirs: - test/core/http/response_corpus maxlen: 2048 - name: hybrid_end2end_test gtest: true build: test language: c++ headers: - test/cpp/end2end/test_service_impl.h src: - src/proto/grpc/testing/duplicate/echo_duplicate.proto - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/hybrid_end2end_test.cc - test/cpp/end2end/test_service_impl.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: initial_settings_frame_bad_client_test gtest: true build: test language: c++ headers: - test/core/bad_client/bad_client.h - test/core/end2end/cq_verifier.h src: - test/core/bad_client/bad_client.cc - test/core/bad_client/tests/initial_settings_frame.cc - test/core/end2end/cq_verifier.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: interop_client build: test run: false language: c++ headers: - test/core/security/oauth2_utils.h - test/cpp/interop/client_helper.h - test/cpp/interop/interop_client.h src: - src/proto/grpc/testing/empty.proto - src/proto/grpc/testing/messages.proto - src/proto/grpc/testing/test.proto - test/core/security/oauth2_utils.cc - test/cpp/interop/client.cc - test/cpp/interop/client_helper.cc - test/cpp/interop/interop_client.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc++_test_config - grpc - gpr - address_sorting - upb - name: interop_server build: test run: false language: c++ headers: - test/cpp/interop/server_helper.h src: - src/proto/grpc/testing/empty.proto - src/proto/grpc/testing/messages.proto - src/proto/grpc/testing/test.proto - test/cpp/interop/interop_server.cc - test/cpp/interop/interop_server_bootstrap.cc - test/cpp/interop/server_helper.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc++_test_config - grpc - gpr - address_sorting - upb - name: interop_test build: test language: c++ headers: [] src: - test/cpp/interop/interop_test.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc++_test_config - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: json_fuzzer_test build: fuzzer language: c++ headers: [] src: - test/core/json/fuzzer.cc - test/core/util/fuzzer_corpus_test.cc deps: - grpc_test_util - grpc++_test_config - grpc - gpr - address_sorting - upb corpus_dirs: - test/core/json/corpus maxlen: 512 - name: json_test gtest: true build: test language: c++ headers: [] src: - test/core/json/json_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: large_metadata_bad_client_test gtest: true build: test language: c++ headers: - test/core/bad_client/bad_client.h - test/core/end2end/cq_verifier.h src: - test/core/bad_client/bad_client.cc - test/core/bad_client/tests/large_metadata.cc - test/core/end2end/cq_verifier.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: lb_get_cpu_stats_test gtest: true build: test language: c++ headers: - src/cpp/server/load_reporter/get_cpu_stats.h src: - src/cpp/server/load_reporter/get_cpu_stats_linux.cc - src/cpp/server/load_reporter/get_cpu_stats_macos.cc - src/cpp/server/load_reporter/get_cpu_stats_unsupported.cc - src/cpp/server/load_reporter/get_cpu_stats_windows.cc - test/cpp/server/load_reporter/get_cpu_stats_test.cc deps: - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: lb_load_data_store_test gtest: true build: test language: c++ headers: - src/cpp/server/load_reporter/constants.h - src/cpp/server/load_reporter/load_data_store.h src: - src/cpp/server/load_reporter/load_data_store.cc - test/cpp/server/load_reporter/load_data_store_test.cc deps: - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: linux_system_roots_test gtest: true build: test language: c++ headers: [] src: - test/core/security/linux_system_roots_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: message_allocator_end2end_test gtest: true build: test language: c++ headers: - test/cpp/end2end/test_service_impl.h src: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/message_allocator_end2end_test.cc - test/cpp/end2end/test_service_impl.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: mock_test gtest: true build: test language: c++ headers: [] src: - src/proto/grpc/testing/duplicate/echo_duplicate.proto - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/mock_test.cc deps: - grpc++_test_util - grpc++_test - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: nanopb_fuzzer_response_test build: fuzzer language: c++ headers: [] src: - test/core/nanopb/fuzzer_response.cc - test/core/util/fuzzer_corpus_test.cc deps: - grpc_test_util - grpc++_test_config - grpc - gpr - address_sorting - upb corpus_dirs: - test/core/nanopb/corpus_response maxlen: 128 - name: nanopb_fuzzer_serverlist_test build: fuzzer language: c++ headers: [] src: - test/core/nanopb/fuzzer_serverlist.cc - test/core/util/fuzzer_corpus_test.cc deps: - grpc_test_util - grpc++_test_config - grpc - gpr - address_sorting - upb corpus_dirs: - test/core/nanopb/corpus_serverlist maxlen: 128 - name: nonblocking_test gtest: true build: test language: c++ headers: [] src: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/nonblocking_test.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: noop-benchmark build: test language: c++ headers: [] src: - test/cpp/microbenchmarks/noop-benchmark.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - benchmark benchmark: true defaults: benchmark - name: orphanable_test gtest: true build: test language: c++ headers: [] src: - test/core/gprpp/orphanable_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: out_of_bounds_bad_client_test gtest: true build: test language: c++ headers: - test/core/bad_client/bad_client.h - test/core/end2end/cq_verifier.h src: - test/core/bad_client/bad_client.cc - test/core/bad_client/tests/out_of_bounds.cc - test/core/end2end/cq_verifier.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: percent_decode_fuzzer build: fuzzer language: c++ headers: [] src: - test/core/slice/percent_decode_fuzzer.cc - test/core/util/fuzzer_corpus_test.cc deps: - grpc_test_util - grpc++_test_config - grpc - gpr - address_sorting - upb corpus_dirs: - test/core/slice/percent_decode_corpus maxlen: 32 - name: percent_encode_fuzzer build: fuzzer language: c++ headers: [] src: - test/core/slice/percent_encode_fuzzer.cc - test/core/util/fuzzer_corpus_test.cc deps: - grpc_test_util - grpc++_test_config - grpc - gpr - address_sorting - upb corpus_dirs: - test/core/slice/percent_encode_corpus maxlen: 32 - name: pid_controller_test gtest: true build: test language: c++ headers: [] src: - test/core/transport/pid_controller_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: port_sharing_end2end_test gtest: true build: test language: c++ headers: - test/cpp/end2end/test_service_impl.h src: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/port_sharing_end2end_test.cc - test/cpp/end2end/test_service_impl.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: proto_server_reflection_test gtest: true build: test language: c++ headers: - test/cpp/end2end/test_service_impl.h - test/cpp/util/proto_reflection_descriptor_database.h src: - src/proto/grpc/testing/duplicate/echo_duplicate.proto - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/proto_server_reflection_test.cc - test/cpp/end2end/test_service_impl.cc - test/cpp/util/proto_reflection_descriptor_database.cc deps: - grpc++_test_util - grpc++_reflection - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: proto_utils_test gtest: true build: test language: c++ headers: [] src: - test/cpp/codegen/proto_utils_test.cc deps: - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb uses_polling: false - name: qps_json_driver build: test run: false language: c++ headers: - src/cpp/util/core_stats.h - test/cpp/qps/benchmark_config.h - test/cpp/qps/client.h - test/cpp/qps/driver.h - test/cpp/qps/histogram.h - test/cpp/qps/interarrival.h - test/cpp/qps/parse_json.h - test/cpp/qps/qps_server_builder.h - test/cpp/qps/qps_worker.h - test/cpp/qps/report.h - test/cpp/qps/server.h - test/cpp/qps/stats.h - test/cpp/qps/usage_timer.h src: - src/proto/grpc/core/stats.proto - src/proto/grpc/testing/benchmark_service.proto - src/proto/grpc/testing/control.proto - src/proto/grpc/testing/messages.proto - src/proto/grpc/testing/payloads.proto - src/proto/grpc/testing/report_qps_scenario_service.proto - src/proto/grpc/testing/stats.proto - src/proto/grpc/testing/worker_service.proto - src/cpp/util/core_stats.cc - test/cpp/qps/benchmark_config.cc - test/cpp/qps/client_async.cc - test/cpp/qps/client_callback.cc - test/cpp/qps/client_sync.cc - test/cpp/qps/driver.cc - test/cpp/qps/parse_json.cc - test/cpp/qps/qps_json_driver.cc - test/cpp/qps/qps_server_builder.cc - test/cpp/qps/qps_worker.cc - test/cpp/qps/report.cc - test/cpp/qps/server_async.cc - test/cpp/qps/server_callback.cc - test/cpp/qps/server_sync.cc - test/cpp/qps/usage_timer.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc++_test_config - grpc - gpr - address_sorting - upb - name: qps_worker build: test run: false language: c++ headers: - src/cpp/util/core_stats.h - test/cpp/qps/client.h - test/cpp/qps/histogram.h - test/cpp/qps/interarrival.h - test/cpp/qps/qps_server_builder.h - test/cpp/qps/qps_worker.h - test/cpp/qps/server.h - test/cpp/qps/stats.h - test/cpp/qps/usage_timer.h src: - src/proto/grpc/core/stats.proto - src/proto/grpc/testing/benchmark_service.proto - src/proto/grpc/testing/control.proto - src/proto/grpc/testing/messages.proto - src/proto/grpc/testing/payloads.proto - src/proto/grpc/testing/stats.proto - src/proto/grpc/testing/worker_service.proto - src/cpp/util/core_stats.cc - test/cpp/qps/client_async.cc - test/cpp/qps/client_callback.cc - test/cpp/qps/client_sync.cc - test/cpp/qps/qps_server_builder.cc - test/cpp/qps/qps_worker.cc - test/cpp/qps/server_async.cc - test/cpp/qps/server_callback.cc - test/cpp/qps/server_sync.cc - test/cpp/qps/usage_timer.cc - test/cpp/qps/worker.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc++_test_config - grpc - gpr - address_sorting - upb - name: raw_end2end_test gtest: true build: test language: c++ headers: - test/cpp/end2end/test_service_impl.h src: - src/proto/grpc/testing/duplicate/echo_duplicate.proto - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/raw_end2end_test.cc - test/cpp/end2end/test_service_impl.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: ref_counted_ptr_test gtest: true build: test language: c++ headers: [] src: - test/core/gprpp/ref_counted_ptr_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: ref_counted_test gtest: true build: test language: c++ headers: [] src: - test/core/gprpp/ref_counted_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: retry_throttle_test gtest: true build: test language: c++ headers: [] src: - test/core/client_channel/retry_throttle_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: secure_auth_context_test gtest: true build: test language: c++ headers: [] src: - test/cpp/common/secure_auth_context_test.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: server_builder_plugin_test gtest: true build: test language: c++ headers: - test/cpp/end2end/test_service_impl.h src: - src/proto/grpc/testing/duplicate/echo_duplicate.proto - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/server_builder_plugin_test.cc - test/cpp/end2end/test_service_impl.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: server_builder_test gtest: true build: test language: c++ headers: [] src: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/server/server_builder_test.cc deps: - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - gpr - address_sorting - upb platforms: - linux - posix - mac - name: server_builder_with_socket_mutator_test gtest: true build: test language: c++ headers: [] src: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/server/server_builder_with_socket_mutator_test.cc deps: - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - gpr - address_sorting - upb platforms: - linux - posix - mac - name: server_context_test_spouse_test gtest: true build: test language: c++ headers: [] src: - test/cpp/test/server_context_test_spouse_test.cc deps: - grpc++_test_util - grpc++_test - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: server_early_return_test gtest: true build: test language: c++ headers: [] src: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/server_early_return_test.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: server_fuzzer build: fuzzer language: c++ headers: [] src: - test/core/end2end/fuzzers/server_fuzzer.cc - test/core/util/fuzzer_corpus_test.cc deps: - grpc_test_util - grpc++_test_config - grpc - gpr - address_sorting - upb corpus_dirs: - test/core/end2end/fuzzers/server_fuzzer_corpus dict: test/core/end2end/fuzzers/hpack.dictionary maxlen: 2048 - name: server_interceptors_end2end_test gtest: true build: test language: c++ headers: - test/cpp/end2end/interceptors_util.h - test/cpp/end2end/test_service_impl.h src: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/interceptors_util.cc - test/cpp/end2end/server_interceptors_end2end_test.cc - test/cpp/end2end/test_service_impl.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: server_registered_method_bad_client_test gtest: true build: test language: c++ headers: - test/core/bad_client/bad_client.h - test/core/end2end/cq_verifier.h src: - test/core/bad_client/bad_client.cc - test/core/bad_client/tests/server_registered_method.cc - test/core/end2end/cq_verifier.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: server_request_call_test gtest: true build: test language: c++ headers: [] src: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/server/server_request_call_test.cc deps: - grpc_test_util_unsecure - grpc++_unsecure - grpc_unsecure - gpr - address_sorting - upb platforms: - linux - posix - mac - name: service_config_end2end_test gtest: true build: test language: c++ headers: - test/cpp/end2end/test_service_impl.h src: - src/proto/grpc/testing/duplicate/echo_duplicate.proto - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/service_config_end2end_test.cc - test/cpp/end2end/test_service_impl.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: service_config_test gtest: true build: test language: c++ headers: [] src: - test/core/client_channel/service_config_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: settings_timeout_test gtest: true build: test run: false language: c++ headers: [] src: - test/core/transport/chttp2/settings_timeout_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: shutdown_test gtest: true build: test language: c++ headers: [] src: - src/proto/grpc/testing/duplicate/echo_duplicate.proto - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/shutdown_test.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: simple_request_bad_client_test gtest: true build: test language: c++ headers: - test/core/bad_client/bad_client.h - test/core/end2end/cq_verifier.h src: - test/core/bad_client/bad_client.cc - test/core/bad_client/tests/simple_request.cc - test/core/end2end/cq_verifier.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: slice_hash_table_test gtest: true build: test language: c++ headers: [] src: - test/core/slice/slice_hash_table_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: slice_weak_hash_table_test gtest: true build: test language: c++ headers: [] src: - test/core/slice/slice_weak_hash_table_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: ssl_server_fuzzer build: fuzzer language: c++ headers: [] src: - test/core/security/ssl_server_fuzzer.cc - test/core/util/fuzzer_corpus_test.cc deps: - grpc_test_util - grpc++_test_config - grpc - gpr - address_sorting - upb corpus_dirs: - test/core/security/corpus/ssl_server_corpus maxlen: 2048 - name: static_metadata_test gtest: true build: test language: c++ headers: [] src: - test/core/transport/static_metadata_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: stats_test gtest: true build: test language: c++ headers: [] src: - test/core/debug/stats_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: status_metadata_test gtest: true build: test language: c++ headers: [] src: - test/core/transport/status_metadata_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: status_util_test gtest: true build: test language: c++ headers: [] src: - test/core/channel/status_util_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb uses_polling: false - name: streaming_throughput_test gtest: true build: test language: c++ headers: [] src: - src/proto/grpc/testing/duplicate/echo_duplicate.proto - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/streaming_throughput_test.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: string_ref_test gtest: true build: test language: c++ headers: [] src: - test/cpp/util/string_ref_test.cc deps: - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb uses_polling: false - name: test_cpp_client_credentials_test gtest: true build: test language: c++ headers: [] src: - test/cpp/client/credentials_test.cc deps: - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: test_cpp_util_slice_test gtest: true build: test language: c++ headers: [] src: - test/cpp/util/slice_test.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb uses_polling: false - name: test_cpp_util_time_test gtest: true build: test language: c++ headers: [] src: - test/cpp/util/time_test.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb uses_polling: false - name: thread_manager_test gtest: true build: test language: c++ headers: [] src: - test/cpp/thread_manager/thread_manager_test.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc++_test_config - grpc - gpr - address_sorting - upb - name: thread_stress_test gtest: true build: test language: c++ headers: [] src: - src/proto/grpc/testing/duplicate/echo_duplicate.proto - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/cpp/end2end/thread_stress_test.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: time_jump_test gtest: true build: test run: false language: c++ headers: [] src: - test/cpp/common/time_jump_test.cc deps: - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: timer_test gtest: true build: test language: c++ headers: [] src: - test/cpp/common/timer_test.cc deps: - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb - name: tls_security_connector_test gtest: true build: test language: c++ headers: [] src: - test/core/security/tls_security_connector_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: unknown_frame_bad_client_test gtest: true build: test language: c++ headers: - test/core/bad_client/bad_client.h - test/core/end2end/cq_verifier.h src: - test/core/bad_client/bad_client.cc - test/core/bad_client/tests/unknown_frame.cc - test/core/end2end/cq_verifier.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: uri_fuzzer_test build: fuzzer language: c++ headers: [] src: - test/core/client_channel/uri_fuzzer_test.cc - test/core/util/fuzzer_corpus_test.cc deps: - grpc_test_util - grpc++_test_config - grpc - gpr - address_sorting - upb corpus_dirs: - test/core/client_channel/uri_corpus maxlen: 128 - name: window_overflow_bad_client_test gtest: true build: test language: c++ headers: - test/core/bad_client/bad_client.h - test/core/end2end/cq_verifier.h src: - test/core/bad_client/bad_client.cc - test/core/bad_client/tests/window_overflow.cc - test/core/end2end/cq_verifier.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: work_serializer_test gtest: true build: test language: c++ headers: [] src: - test/core/iomgr/work_serializer_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: writes_per_rpc_test gtest: true build: test language: c++ headers: - test/core/util/cmdline.h - test/core/util/debugger_macros.h - test/core/util/fuzzer_util.h - test/core/util/grpc_profiler.h - test/core/util/histogram.h - test/core/util/memory_counters.h - test/core/util/mock_endpoint.h - test/core/util/parse_hexstring.h - test/core/util/passthru_endpoint.h - test/core/util/port.h - test/core/util/port_server_client.h - test/core/util/reconnect_server.h - test/core/util/slice_splitter.h - test/core/util/subprocess.h - test/core/util/test_config.h - test/core/util/test_tcp_server.h - test/core/util/tracer_util.h - test/core/util/trickle_endpoint.h src: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/core/util/cmdline.cc - test/core/util/debugger_macros.cc - test/core/util/fuzzer_util.cc - test/core/util/grpc_profiler.cc - test/core/util/histogram.cc - test/core/util/memory_counters.cc - test/core/util/mock_endpoint.cc - test/core/util/parse_hexstring.cc - test/core/util/passthru_endpoint.cc - test/core/util/port.cc - test/core/util/port_isolated_runtime_environment.cc - test/core/util/port_server_client.cc - test/core/util/reconnect_server.cc - test/core/util/slice_splitter.cc - test/core/util/subprocess_posix.cc - test/core/util/subprocess_windows.cc - test/core/util/test_config.cc - test/core/util/test_tcp_server.cc - test/core/util/tracer_util.cc - test/core/util/trickle_endpoint.cc - test/cpp/performance/writes_per_rpc_test.cc deps: - grpc++ - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: xds_bootstrap_test gtest: true build: test language: c++ headers: [] src: - test/core/client_channel/xds_bootstrap_test.cc deps: - grpc_test_util - grpc - gpr - address_sorting - upb - name: xds_end2end_test gtest: true build: test run: false language: c++ headers: - test/cpp/end2end/test_service_impl.h src: - src/proto/grpc/testing/duplicate/echo_duplicate.proto - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - src/proto/grpc/testing/xds/ads_for_test.proto - src/proto/grpc/testing/xds/cds_for_test.proto - src/proto/grpc/testing/xds/eds_for_test.proto - src/proto/grpc/testing/xds/lds_rds_for_test.proto - src/proto/grpc/testing/xds/lrs_for_test.proto - test/cpp/end2end/test_service_impl.cc - test/cpp/end2end/xds_end2end_test.cc deps: - grpc++_test_util - grpc_test_util - grpc++ - grpc - gpr - address_sorting - upb platforms: - linux - posix - mac - name: xds_interop_client build: test run: false language: c++ headers: [] src: - src/proto/grpc/testing/empty.proto - src/proto/grpc/testing/messages.proto - src/proto/grpc/testing/test.proto - test/cpp/interop/xds_interop_client.cc deps: - grpc_test_util - grpc++ - grpc++_test_config - grpc - gpr - address_sorting - upb - name: xds_interop_server build: test run: false language: c++ headers: [] src: - src/proto/grpc/testing/empty.proto - src/proto/grpc/testing/messages.proto - src/proto/grpc/testing/test.proto - test/cpp/interop/xds_interop_server.cc deps: - grpc_test_util - grpc++ - grpc++_test_config - grpc - gpr - address_sorting - upb tests: [] grpc-1.30.2/build_config.rb000066400000000000000000000012161370425124100155000ustar00rootroot00000000000000# Copyright 2017 gRPC 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 # # 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. module GrpcBuildConfig CORE_WINDOWS_DLL = '/tmp/libs/opt/grpc-10.dll' end grpc-1.30.2/build_handwritten.yaml000066400000000000000000000177341370425124100171350ustar00rootroot00000000000000'#1': This file describes the list of targets and dependencies. '#2': It is used among other things to generate all of our project files. '#3': Please refer to the templates directory for more information. settings: '#01': The public version number of the library. '#02': === '#03': Please update the 'g_stands_for' field periodically with a new g word '#04': not listed in doc/g_stands_for.md - and update that document to list the '#05': new word. When doing so, please also update BUILD. '#06': === '#07': Master always has a "-dev" suffix '#08': Use "-preN" suffixes to identify pre-release versions '#09': Per-language overrides are possible with (eg) ruby_version tag here '#10': See the expand_version.py for all the quirks here core_version: 10.0.0 csharp_major_version: 2 g_stands_for: gradius version: 1.30.2 targets: - name: check_epollexclusive build: tool language: c src: - test/build/check_epollexclusive.c deps: - grpc - gpr - name: gen_hpack_tables build: tool language: c++ src: - tools/codegen/core/gen_hpack_tables.cc deps: - grpc - gpr uses_polling: false - name: gen_legal_metadata_characters build: tool language: c++ src: - tools/codegen/core/gen_legal_metadata_characters.cc deps: [] - name: gen_percent_encoding_tables build: tool language: c++ src: - tools/codegen/core/gen_percent_encoding_tables.cc deps: [] uses_polling: false vspackages: - linkage: static name: grpc.dependencies.zlib props: false redist: true version: 1.2.8.10 - linkage: static name: grpc.dependencies.openssl props: true redist: true version: 1.0.204.1 - name: gflags props: false redist: false version: 2.1.2.1 - name: gtest props: false redist: false version: 1.7.0.1 configs: asan: CC: clang CPPFLAGS: -O0 -fsanitize-coverage=edge,trace-pc-guard -fsanitize=address -fno-omit-frame-pointer -Wno-unused-command-line-argument -DGPR_NO_DIRECT_SYSCALLS CXX: clang++ LD: clang++ LDFLAGS: -fsanitize=address LDXX: clang++ compile_the_world: true test_environ: ASAN_OPTIONS: detect_leaks=1:color=always LSAN_OPTIONS: suppressions=test/core/util/lsan_suppressions.txt:report_objects=1 asan-noleaks: CC: clang CPPFLAGS: -O0 -fsanitize-coverage=edge,trace-pc-guard -fsanitize=address -fno-omit-frame-pointer -Wno-unused-command-line-argument -DGPR_NO_DIRECT_SYSCALLS CXX: clang++ LD: clang++ LDFLAGS: fsanitize=address LDXX: clang++ compile_the_world: true test_environ: ASAN_OPTIONS: detect_leaks=0:color=always asan-trace-cmp: CC: clang CPPFLAGS: -O0 -fsanitize-coverage=edge,trace-pc-guard -fsanitize-coverage=trace-cmp -fsanitize=address -fno-omit-frame-pointer -Wno-unused-command-line-argument -DGPR_NO_DIRECT_SYSCALLS CXX: clang++ LD: clang++ LDFLAGS: -fsanitize=address LDXX: clang++ compile_the_world: true test_environ: ASAN_OPTIONS: detect_leaks=1:color=always LSAN_OPTIONS: suppressions=test/core/util/lsan_suppressions.txt:report_objects=1 basicprof: CPPFLAGS: -O2 -DGRPC_BASIC_PROFILER -DGRPC_TIMERS_RDTSC DEFINES: NDEBUG c++-compat: CFLAGS: -Wc++-compat CPPFLAGS: -O0 DEFINES: _DEBUG DEBUG counters: CPPFLAGS: -O2 -DGPR_LOW_LEVEL_COUNTERS DEFINES: NDEBUG counters_with_memory_counter: CPPFLAGS: -O2 -DGPR_LOW_LEVEL_COUNTERS -DGPR_WRAP_MEMORY_COUNTER DEFINES: NDEBUG LDFLAGS: -Wl,--wrap=malloc -Wl,--wrap=calloc -Wl,--wrap=realloc -Wl,--wrap=free dbg: CPPFLAGS: -O0 DEFINES: _DEBUG DEBUG gcov: CC: gcc CPPFLAGS: -O0 -fprofile-arcs -ftest-coverage -Wno-return-type CXX: g++ DEFINES: _DEBUG DEBUG GPR_GCOV LD: gcc LDFLAGS: -fprofile-arcs -ftest-coverage -rdynamic -lstdc++ LDXX: g++ helgrind: CPPFLAGS: -O0 DEFINES: _DEBUG DEBUG LDFLAGS: -rdynamic valgrind: --tool=helgrind lto: CPPFLAGS: -O2 DEFINES: NDEBUG memcheck: CPPFLAGS: -O0 DEFINES: _DEBUG DEBUG LDFLAGS: -rdynamic valgrind: --tool=memcheck --leak-check=full msan: CC: clang CPPFLAGS: -O0 -stdlib=libc++ -fsanitize-coverage=edge,trace-pc-guard -fsanitize=memory -fsanitize-memory-track-origins -fsanitize-memory-use-after-dtor -fno-omit-frame-pointer -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -Wno-unused-command-line-argument -fPIE -pie -DGPR_NO_DIRECT_SYSCALLS CXX: clang++ DEFINES: NDEBUG LD: clang++ LDFLAGS: -stdlib=libc++ -fsanitize=memory -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -fPIE -pie $(if $(JENKINS_BUILD),-Wl$(comma)-Ttext-segment=0x7e0000000000,) LDXX: clang++ compile_the_world: true test_environ: MSAN_OPTIONS: poison_in_dtor=1 mutrace: CPPFLAGS: -O3 -fno-omit-frame-pointer DEFINES: NDEBUG LDFLAGS: -rdynamic noexcept: CPPFLAGS: -O2 -Wframe-larger-than=16384 CXXFLAGS: -fno-exceptions DEFINES: NDEBUG opt: CPPFLAGS: -O2 -Wframe-larger-than=16384 DEFINES: NDEBUG stapprof: CPPFLAGS: -O2 -DGRPC_STAP_PROFILER DEFINES: NDEBUG tsan: CC: clang CPPFLAGS: -O0 -fsanitize=thread -fno-omit-frame-pointer -Wno-unused-command-line-argument -DGPR_NO_DIRECT_SYSCALLS CXX: clang++ DEFINES: GRPC_TSAN LD: clang++ LDFLAGS: -fsanitize=thread LDXX: clang++ compile_the_world: true test_environ: TSAN_OPTIONS: suppressions=test/core/util/tsan_suppressions.txt:halt_on_error=1:second_deadlock_stack=1 ubsan: CC: clang CPPFLAGS: -O0 -stdlib=libc++ -fsanitize-coverage=edge,trace-pc-guard -fsanitize=undefined -fno-omit-frame-pointer -Wno-unused-command-line-argument -Wvarargs CXX: clang++ DEFINES: NDEBUG GRPC_UBSAN LD: clang++ LDFLAGS: -stdlib=libc++ -fsanitize=undefined,unsigned-integer-overflow LDXX: clang++ compile_the_world: true test_environ: UBSAN_OPTIONS: halt_on_error=1:print_stacktrace=1:suppressions=test/core/util/ubsan_suppressions.txt defaults: ares: CFLAGS: -g CPPFLAGS: -Ithird_party/cares -Ithird_party/cares/cares -fvisibility=hidden -D_GNU_SOURCE $(if $(subst Darwin,,$(SYSTEM)),,-Ithird_party/cares/config_darwin) $(if $(subst FreeBSD,,$(SYSTEM)),,-Ithird_party/cares/config_freebsd) $(if $(subst Linux,,$(SYSTEM)),,-Ithird_party/cares/config_linux) $(if $(subst OpenBSD,,$(SYSTEM)),,-Ithird_party/cares/config_openbsd) -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX $(if $(subst MINGW32,,$(SYSTEM)),-DHAVE_CONFIG_H,) benchmark: CPPFLAGS: -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX boringssl: CFLAGS: -g CPPFLAGS: -Ithird_party/boringssl-with-bazel/src/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX CXXFLAGS: -fno-exceptions global: CFLAGS: -g COREFLAGS: -fno-exceptions CPPFLAGS: -g -Wall -Wextra -DOSATOMIC_USE_INLINED=1 -Ithird_party/abseil-cpp -Ithird_party/upb -Isrc/core/ext/upb-generated LDFLAGS: -g zlib: CFLAGS: -fvisibility=hidden php_config_m4: deps: - grpc - address_sorting - boringssl - z headers: - src/php/ext/grpc/byte_buffer.h - src/php/ext/grpc/call.h - src/php/ext/grpc/call_credentials.h - src/php/ext/grpc/channel.h - src/php/ext/grpc/channel_credentials.h - src/php/ext/grpc/completion_queue.h - src/php/ext/grpc/php7_wrapper.h - src/php/ext/grpc/php_grpc.h - src/php/ext/grpc/server.h - src/php/ext/grpc/server_credentials.h - src/php/ext/grpc/timeval.h - src/php/ext/grpc/version.h src: - src/php/ext/grpc/byte_buffer.c - src/php/ext/grpc/call.c - src/php/ext/grpc/call_credentials.c - src/php/ext/grpc/channel.c - src/php/ext/grpc/channel_credentials.c - src/php/ext/grpc/completion_queue.c - src/php/ext/grpc/php_grpc.c - src/php/ext/grpc/server.c - src/php/ext/grpc/server_credentials.c - src/php/ext/grpc/timeval.c python_dependencies: deps: - grpc - address_sorting - ares - boringssl - z ruby_gem: deps: - grpc - address_sorting - ares - boringssl - z grpc-1.30.2/cmake/000077500000000000000000000000001370425124100136075ustar00rootroot00000000000000grpc-1.30.2/cmake/OWNERS000066400000000000000000000000621370425124100145450ustar00rootroot00000000000000set noparent @jtattermusch @nicolasnoble @apolcyn grpc-1.30.2/cmake/abseil-cpp.cmake000066400000000000000000000033601370425124100166320ustar00rootroot00000000000000# Copyright 2019 gRPC 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 # # 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. if(gRPC_ABSL_PROVIDER STREQUAL "module") if(NOT ABSL_ROOT_DIR) set(ABSL_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/abseil-cpp) endif() if(EXISTS "${ABSL_ROOT_DIR}/CMakeLists.txt") add_subdirectory(${ABSL_ROOT_DIR} third_party/abseil-cpp) if(TARGET absl_base) if(gRPC_INSTALL AND _gRPC_INSTALL_SUPPORTED_FROM_MODULE) install(TARGETS ${gRPC_ABSL_USED_TARGETS} EXPORT gRPCTargets RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR}) endif() endif() else() message(WARNING "gRPC_ABSL_PROVIDER is \"module\" but ABSL_ROOT_DIR is wrong") endif() if(gRPC_INSTALL AND NOT _gRPC_INSTALL_SUPPORTED_FROM_MODULE) message(WARNING "gRPC_INSTALL will be forced to FALSE because gRPC_ABSL_PROVIDER is \"module\" and CMake version (${CMAKE_VERSION}) is less than 3.13.") set(gRPC_INSTALL FALSE) endif() elseif(gRPC_ABSL_PROVIDER STREQUAL "package") # Use "CONFIG" as there is no built-in cmake module for absl. find_package(absl REQUIRED CONFIG) set(_gRPC_FIND_ABSL "if(NOT absl_FOUND)\n find_package(absl CONFIG)\nendif()") endif() grpc-1.30.2/cmake/address_sorting.cmake000066400000000000000000000013401370425124100200010ustar00rootroot00000000000000# Copyright 2017 gRPC 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 # # 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. set(_gRPC_ADDRESS_SORTING_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/address_sorting/include") set(_gRPC_ADDRESS_SORTING_LIBRARIES address_sorting) grpc-1.30.2/cmake/benchmark.cmake000066400000000000000000000031501370425124100165420ustar00rootroot00000000000000# Copyright 2017 gRPC 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 # # 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. if(gRPC_BENCHMARK_PROVIDER STREQUAL "module") set(BENCHMARK_ENABLE_GTEST_TESTS OFF CACHE BOOL "Turn off gTest in gBenchmark") if(NOT BENCHMARK_ROOT_DIR) set(BENCHMARK_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/benchmark) endif() if(EXISTS "${BENCHMARK_ROOT_DIR}/CMakeLists.txt") add_subdirectory(${BENCHMARK_ROOT_DIR} third_party/benchmark) if(TARGET benchmark) set(_gRPC_BENCHMARK_LIBRARIES benchmark) endif() else() message(WARNING "gRPC_BENCHMARK_PROVIDER is \"module\" but BENCHMARK_ROOT_DIR is wrong") endif() elseif(gRPC_BENCHMARK_PROVIDER STREQUAL "package") # Use "CONFIG" as there is no built-in cmake module for benchmark. find_package(benchmark REQUIRED CONFIG) if(TARGET benchmark::benchmark) set(_gRPC_BENCHMARK_LIBRARIES benchmark::benchmark) endif() set(_gRPC_FIND_BENCHMARK "if(NOT benchmark_FOUND)\n find_package(benchmark CONFIG)\nendif()") elseif(gRPC_BENCHMARK_PROVIDER STREQUAL "none") # Benchmark is a test-only dependency and can be avoided if we're not building tests. endif() grpc-1.30.2/cmake/cares.cmake000066400000000000000000000036321370425124100157120ustar00rootroot00000000000000# Copyright 2017 gRPC 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 # # 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. if(gRPC_CARES_PROVIDER STREQUAL "module") if(NOT CARES_ROOT_DIR) set(CARES_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/cares/cares) endif() set(CARES_SHARED OFF CACHE BOOL "disable shared library") set(CARES_STATIC ON CACHE BOOL "link cares statically") if(gRPC_BACKWARDS_COMPATIBILITY_MODE) # See https://github.com/grpc/grpc/issues/17255 set(HAVE_LIBNSL OFF CACHE BOOL "avoid cares dependency on libnsl") endif() add_subdirectory("${CARES_ROOT_DIR}" third_party/cares/cares) if(TARGET c-ares) set(_gRPC_CARES_LIBRARIES c-ares) if(gRPC_INSTALL AND _gRPC_INSTALL_SUPPORTED_FROM_MODULE) install(TARGETS c-ares EXPORT gRPCTargets RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR}) endif() endif() if(gRPC_INSTALL AND NOT _gRPC_INSTALL_SUPPORTED_FROM_MODULE) message(WARNING "gRPC_INSTALL will be forced to FALSE because gRPC_CARES_PROVIDER is \"module\" and CMake version (${CMAKE_VERSION}) is less than 3.13.") set(gRPC_INSTALL FALSE) endif() elseif(gRPC_CARES_PROVIDER STREQUAL "package") find_package(c-ares 1.13.0 REQUIRED) if(TARGET c-ares::cares) set(_gRPC_CARES_LIBRARIES c-ares::cares) endif() set(_gRPC_FIND_CARES "if(NOT c-ares_FOUND)\n find_package(c-ares)\nendif()") endif() grpc-1.30.2/cmake/gRPCConfig.cmake.in000066400000000000000000000004001370425124100171310ustar00rootroot00000000000000# Module path list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/modules) # Depend packages @_gRPC_FIND_ZLIB@ @_gRPC_FIND_PROTOBUF@ @_gRPC_FIND_SSL@ @_gRPC_FIND_CARES@ @_gRPC_FIND_ABSL@ # Targets include(${CMAKE_CURRENT_LIST_DIR}/gRPCTargets.cmake) grpc-1.30.2/cmake/gflags.cmake000066400000000000000000000026571370425124100160660ustar00rootroot00000000000000# Copyright 2017 gRPC 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 # # 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. if(gRPC_GFLAGS_PROVIDER STREQUAL "module") if(NOT GFLAGS_ROOT_DIR) set(GFLAGS_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gflags) endif() if(EXISTS "${GFLAGS_ROOT_DIR}/CMakeLists.txt") add_subdirectory(${GFLAGS_ROOT_DIR} third_party/gflags) set(_gRPC_GFLAGS_LIBRARIES gflags::gflags) else() message(WARNING "gRPC_GFLAGS_PROVIDER is \"module\" but GFLAGS_ROOT_DIR is wrong") endif() elseif(gRPC_GFLAGS_PROVIDER STREQUAL "package") # Use "CONFIG" as there is no built-in cmake module for gflags. find_package(gflags REQUIRED CONFIG) if(TARGET gflags::gflags) set(_gRPC_GFLAGS_LIBRARIES gflags::gflags) endif() set(_gRPC_FIND_GFLAGS "if(NOT gflags_FOUND)\n find_package(gflags CONFIG)\nendif()") elseif(gRPC_GFLAGS_PROVIDER STREQUAL "none") # gflags is a test-only dependency and can be avoided if we're not building tests. endif() grpc-1.30.2/cmake/modules/000077500000000000000000000000001370425124100152575ustar00rootroot00000000000000grpc-1.30.2/cmake/modules/Findc-ares.cmake000066400000000000000000000030171370425124100202350ustar00rootroot00000000000000include(FindPackageHandleStandardArgs) function(__cares_get_version) if(c-ares_INCLUDE_DIR AND EXISTS "${c-ares_INCLUDE_DIR}/ares_version.h") file(STRINGS "${c-ares_INCLUDE_DIR}/ares_version.h" _cares_version_str REGEX "^#define ARES_VERSION_STR \"([^\n]*)\"$") if(_cares_version_str MATCHES "#define ARES_VERSION_STR \"([^\n]*)\"") set(c-ares_VERSION "${CMAKE_MATCH_1}" PARENT_SCOPE) endif() endif() endfunction() # We need to disable version checking, since c-ares does not provide it. set(_cares_version_var_suffixes "" _MAJOR _MINOR _PATCH _TWEAK _COUNT) foreach(_suffix IN LISTS _cares_version_var_suffixes) set(_cares_save_FIND_VERSION${_suffix} ${c-ares_FIND_VERSION${_suffix}}) unset(c-ares_FIND_VERSION${_suffix}) endforeach() find_package(c-ares CONFIG) foreach(_suffix IN LISTS _cares_version_var_suffixes) set(c-ares_FIND_VERSION${_suffix} ${_cares_save_FIND_VERSION${_suffix}}) endforeach() if(c-ares_FOUND) if(NOT DEFINED c-ares_VERSION) __cares_get_version() endif() find_package_handle_standard_args(c-ares CONFIG_MODE) return() endif() find_path(c-ares_INCLUDE_DIR NAMES ares.h) __cares_get_version() find_library(c-ares_LIBRARY cares) find_package_handle_standard_args(c-ares REQUIRED_VARS c-ares_INCLUDE_DIR c-ares_LIBRARY VERSION_VAR c-ares_VERSION ) if(c-ares_FOUND) add_library(c-ares::cares UNKNOWN IMPORTED) set_target_properties(c-ares::cares PROPERTIES IMPORTED_LOCATION "${c-ares_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${c-ares_INCLUDE_DIR}" ) endif() grpc-1.30.2/cmake/msvc_static_runtime.cmake000066400000000000000000000021711370425124100206740ustar00rootroot00000000000000# Copyright 2017 gRPC 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 # # 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. option(gRPC_MSVC_STATIC_RUNTIME "Link with static msvc runtime libraries" OFF) if(gRPC_MSVC_STATIC_RUNTIME) # switch from dynamic to static linking of msvcrt foreach(flag_var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) if(${flag_var} MATCHES "/MD") string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") endif() endforeach() endif() grpc-1.30.2/cmake/pkg-config-template.pc.in000066400000000000000000000004331370425124100203750ustar00rootroot00000000000000prefix=@CMAKE_INSTALL_PREFIX@ exec_prefix=${prefix} includedir=${prefix}/include libdir=${exec_prefix}/lib Name: @PC_NAME@ Description: @PC_DESCRIPTION@ Version: @PC_VERSION@ Cflags: -I${includedir} Requires: @PC_REQUIRES@ Libs: -L${libdir} @PC_LIB@ Libs.private: @PC_LIBS_PRIVATE@ grpc-1.30.2/cmake/protobuf.cmake000066400000000000000000000104431370425124100164530ustar00rootroot00000000000000# Copyright 2017 gRPC 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 # # 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. if(gRPC_PROTOBUF_PROVIDER STREQUAL "module") # Building the protobuf tests require gmock what is not part of a standard protobuf checkout. # Disable them unless they are explicitly requested from the cmake command line (when we assume # gmock is downloaded to the right location inside protobuf). if(NOT protobuf_BUILD_TESTS) set(protobuf_BUILD_TESTS OFF CACHE BOOL "Build protobuf tests") endif() # Disable building protobuf with zlib. Building protobuf with zlib breaks # the build if zlib is not installed on the system. if(NOT protobuf_WITH_ZLIB) set(protobuf_WITH_ZLIB OFF CACHE BOOL "Build protobuf with zlib.") endif() if(NOT PROTOBUF_ROOT_DIR) set(PROTOBUF_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/protobuf) endif() if(EXISTS "${PROTOBUF_ROOT_DIR}/cmake/CMakeLists.txt") set(protobuf_MSVC_STATIC_RUNTIME OFF CACHE BOOL "Link static runtime libraries") add_subdirectory(${PROTOBUF_ROOT_DIR}/cmake third_party/protobuf) if(TARGET ${_gRPC_PROTOBUF_LIBRARY_NAME}) set(_gRPC_PROTOBUF_LIBRARIES ${_gRPC_PROTOBUF_LIBRARY_NAME}) endif() if(TARGET libprotoc) set(_gRPC_PROTOBUF_PROTOC_LIBRARIES libprotoc) endif() if(TARGET protoc) set(_gRPC_PROTOBUF_PROTOC protoc) if(CMAKE_CROSSCOMPILING) find_program(_gRPC_PROTOBUF_PROTOC_EXECUTABLE protoc) else() set(_gRPC_PROTOBUF_PROTOC_EXECUTABLE $) endif() endif() # For well-known .proto files distributed with protobuf set(_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR "${PROTOBUF_ROOT_DIR}/src") else() message(WARNING "gRPC_PROTOBUF_PROVIDER is \"module\" but PROTOBUF_ROOT_DIR is wrong") endif() if(gRPC_INSTALL AND NOT _gRPC_INSTALL_SUPPORTED_FROM_MODULE) message(WARNING "gRPC_INSTALL will be forced to FALSE because gRPC_PROTOBUF_PROVIDER is \"module\" and CMake version (${CMAKE_VERSION}) is less than 3.13.") set(gRPC_INSTALL FALSE) endif() elseif(gRPC_PROTOBUF_PROVIDER STREQUAL "package") find_package(Protobuf REQUIRED ${gRPC_PROTOBUF_PACKAGE_TYPE}) # {Protobuf,PROTOBUF}_FOUND is defined based on find_package type ("MODULE" vs "CONFIG"). # For "MODULE", the case has also changed between cmake 3.5 and 3.6. # We use the legacy uppercase version for *_LIBRARIES AND *_INCLUDE_DIRS variables # as newer cmake versions provide them too for backward compatibility. if(Protobuf_FOUND OR PROTOBUF_FOUND) if(TARGET protobuf::${_gRPC_PROTOBUF_LIBRARY_NAME}) set(_gRPC_PROTOBUF_LIBRARIES protobuf::${_gRPC_PROTOBUF_LIBRARY_NAME}) else() set(_gRPC_PROTOBUF_LIBRARIES ${PROTOBUF_LIBRARIES}) endif() if(TARGET protobuf::libprotoc) set(_gRPC_PROTOBUF_PROTOC_LIBRARIES protobuf::libprotoc) # extract the include dir from target's properties get_target_property(_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR protobuf::libprotoc INTERFACE_INCLUDE_DIRECTORIES) else() set(_gRPC_PROTOBUF_PROTOC_LIBRARIES ${PROTOBUF_PROTOC_LIBRARIES}) set(_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR ${PROTOBUF_INCLUDE_DIRS}) endif() if(TARGET protobuf::protoc) set(_gRPC_PROTOBUF_PROTOC protobuf::protoc) if(CMAKE_CROSSCOMPILING) find_program(_gRPC_PROTOBUF_PROTOC_EXECUTABLE protoc) else() set(_gRPC_PROTOBUF_PROTOC_EXECUTABLE $) endif() else() set(_gRPC_PROTOBUF_PROTOC ${PROTOBUF_PROTOC_EXECUTABLE}) if(CMAKE_CROSSCOMPILING) find_program(_gRPC_PROTOBUF_PROTOC_EXECUTABLE protoc) else() set(_gRPC_PROTOBUF_PROTOC_EXECUTABLE ${PROTOBUF_PROTOC_EXECUTABLE}) endif() endif() set(_gRPC_FIND_PROTOBUF "if(NOT Protobuf_FOUND AND NOT PROTOBUF_FOUND)\n find_package(Protobuf ${gRPC_PROTOBUF_PACKAGE_TYPE})\nendif()") endif() endif() grpc-1.30.2/cmake/ssl.cmake000066400000000000000000000063131370425124100154150ustar00rootroot00000000000000# Copyright 2017 gRPC 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 # # 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. # The CMakeLists.txt for BoringSSL doesn't propagate include directories # transitively so `_gRPC_SSL_INCLUDE_DIR` should be set for gRPC # to find header files. if(gRPC_SSL_PROVIDER STREQUAL "module") if(NOT BORINGSSL_ROOT_DIR) set(BORINGSSL_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/boringssl-with-bazel) endif() if(EXISTS "${BORINGSSL_ROOT_DIR}/CMakeLists.txt") if(CMAKE_GENERATOR MATCHES "Visual Studio") if(CMAKE_VERSION VERSION_LESS 3.13) # Visual Studio build with assembly optimizations is broken for older # version of CMake (< 3.13). message(WARNING "Disabling SSL assembly support because CMake version ${CMAKE_VERSION} is too old (less than 3.13)") set(OPENSSL_NO_ASM ON) else() # If we're using a new enough version of CMake, make sure that the # NASM assembler can be found. include(CheckLanguage) check_language(ASM_NASM) if(NOT CMAKE_ASM_NASM_COMPILER) message(WARNING "Disabling SSL assembly support because NASM could not be found") set(OPENSSL_NO_ASM ON) endif() endif() endif() add_subdirectory(${BORINGSSL_ROOT_DIR} third_party/boringssl-with-bazel) if(TARGET ssl) set(_gRPC_SSL_LIBRARIES ssl crypto) set(_gRPC_SSL_INCLUDE_DIR ${BORINGSSL_ROOT_DIR}/src/include) if(gRPC_INSTALL AND _gRPC_INSTALL_SUPPORTED_FROM_MODULE) install(TARGETS ssl crypto EXPORT gRPCTargets RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR}) endif() endif() else() message(WARNING "gRPC_SSL_PROVIDER is \"module\" but BORINGSSL_ROOT_DIR is wrong") endif() if(gRPC_INSTALL AND NOT _gRPC_INSTALL_SUPPORTED_FROM_MODULE) message(WARNING "gRPC_INSTALL will be forced to FALSE because gRPC_SSL_PROVIDER is \"module\" and CMake version (${CMAKE_VERSION}) is less than 3.13.") set(gRPC_INSTALL FALSE) endif() elseif(gRPC_SSL_PROVIDER STREQUAL "package") # OpenSSL installation directory can be configured by setting OPENSSL_ROOT_DIR # We expect to locate OpenSSL using the built-in cmake module as the openssl # project itself does not provide installation support in its CMakeLists.txt # See https://cmake.org/cmake/help/v3.6/module/FindOpenSSL.html find_package(OpenSSL REQUIRED) if(TARGET OpenSSL::SSL) set(_gRPC_SSL_LIBRARIES OpenSSL::SSL OpenSSL::Crypto) else() set(_gRPC_SSL_LIBRARIES ${OPENSSL_LIBRARIES}) endif() set(_gRPC_SSL_INCLUDE_DIR ${OPENSSL_INCLUDE_DIR}) set(_gRPC_FIND_SSL "if(NOT OPENSSL_FOUND)\n find_package(OpenSSL)\nendif()") endif() grpc-1.30.2/cmake/upb.cmake000066400000000000000000000014471370425124100154050ustar00rootroot00000000000000# Copyright 2019 gRPC 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 # # 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. set(UPB_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/upb) set(_gRPC_UPB_INCLUDE_DIR "${UPB_ROOT_DIR}") set(_gRPC_UPB_GRPC_GENERATED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/core/ext/upb-generated") set(_gRPC_UPB_LIBRARIES upb) grpc-1.30.2/cmake/zlib.cmake000066400000000000000000000051761370425124100155620ustar00rootroot00000000000000# Copyright 2017 gRPC 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 # # 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. # The CMakeLists.txt for zlib doesn't propagate include directories # transitively so `_gRPC_ZLIB_INCLUDE_DIR` should be set for gRPC # to find header files. if(gRPC_ZLIB_PROVIDER STREQUAL "module") if(NOT ZLIB_ROOT_DIR) set(ZLIB_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/zlib) endif() if(EXISTS "${ZLIB_ROOT_DIR}/CMakeLists.txt") # TODO(jtattermusch): workaround for https://github.com/madler/zlib/issues/218 include_directories("${ZLIB_ROOT_DIR}") add_subdirectory(${ZLIB_ROOT_DIR} third_party/zlib) if(TARGET zlibstatic) set(_gRPC_ZLIB_LIBRARIES zlibstatic) set(_gRPC_ZLIB_INCLUDE_DIR "${ZLIB_ROOT_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/third_party/zlib") if(gRPC_INSTALL AND _gRPC_INSTALL_SUPPORTED_FROM_MODULE) install(TARGETS zlibstatic EXPORT gRPCTargets RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR}) endif() endif() else() message(WARNING "gRPC_ZLIB_PROVIDER is \"module\" but ZLIB_ROOT_DIR is wrong") endif() if(gRPC_INSTALL AND NOT _gRPC_INSTALL_SUPPORTED_FROM_MODULE) message(WARNING "gRPC_INSTALL will be forced to FALSE because gRPC_ZLIB_PROVIDER is \"module\" and CMake version (${CMAKE_VERSION}) is less than 3.13.") set(gRPC_INSTALL FALSE) endif() elseif(gRPC_ZLIB_PROVIDER STREQUAL "package") # zlib installation directory can be configured by setting ZLIB_ROOT # We allow locating zlib using both "CONFIG" and "MODULE" as the expectation # is that many Linux systems will have zlib installed via a distribution # package ("MODULE"), while on Windows the user is likely to have installed # zlib using cmake ("CONFIG"). # See https://cmake.org/cmake/help/v3.6/module/FindZLIB.html find_package(ZLIB REQUIRED) if(TARGET ZLIB::ZLIB) set(_gRPC_ZLIB_LIBRARIES ZLIB::ZLIB) else() set(_gRPC_ZLIB_LIBRARIES ${ZLIB_LIBRARIES}) endif() set(_gRPC_ZLIB_INCLUDE_DIR ${ZLIB_INCLUDE_DIRS}) set(_gRPC_FIND_ZLIB "if(NOT ZLIB_FOUND)\n find_package(ZLIB)\nendif()") endif() grpc-1.30.2/composer.json000066400000000000000000000010351370425124100152500ustar00rootroot00000000000000{ "name": "grpc/grpc", "type": "library", "description": "gRPC library for PHP", "keywords": ["rpc"], "homepage": "https://grpc.io", "license": "Apache-2.0", "require": { "php": ">=5.5.0" }, "require-dev": { "google/auth": "^v1.3.0" }, "suggest": { "ext-protobuf": "For better performance, install the protobuf C extension.", "google/protobuf": "To get started using grpc quickly, install the native protobuf library." }, "autoload": { "psr-4": { "Grpc\\": "src/php/lib/Grpc/" } } } grpc-1.30.2/config.m4000066400000000000000000001667431370425124100142570ustar00rootroot00000000000000PHP_ARG_ENABLE(grpc, whether to enable grpc support, [ --enable-grpc Enable grpc support]) if test "$PHP_GRPC" != "no"; then dnl Write more examples of tests here... dnl # --with-grpc -> add include path PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/include) PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/src/core/ext/upb-generated) PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/src/php/ext/grpc) PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/abseil-cpp) PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/address_sorting/include) PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/boringssl-with-bazel/src/include) PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/upb) LIBS="-lpthread $LIBS" CFLAGS="-Wall -Werror -Wno-parentheses-equality -Wno-unused-value -std=c11 -g -O2" CXXFLAGS="-std=c++11 -fno-exceptions -fno-rtti -g -O2" GRPC_SHARED_LIBADD="-lpthread $GRPC_SHARED_LIBADD" PHP_REQUIRE_CXX() PHP_ADD_LIBRARY(pthread) PHP_ADD_LIBRARY(dl,,GRPC_SHARED_LIBADD) PHP_ADD_LIBRARY(dl) case $host in *darwin*) PHP_ADD_LIBRARY(c++,1,GRPC_SHARED_LIBADD) ;; *) PHP_ADD_LIBRARY(stdc++,1,GRPC_SHARED_LIBADD) PHP_ADD_LIBRARY(rt,,GRPC_SHARED_LIBADD) PHP_ADD_LIBRARY(rt) ;; esac PHP_SUBST(GRPC_SHARED_LIBADD) PHP_NEW_EXTENSION(grpc, src/core/ext/filters/census/grpc_context.cc \ src/core/ext/filters/client_channel/backend_metric.cc \ src/core/ext/filters/client_channel/backup_poller.cc \ src/core/ext/filters/client_channel/channel_connectivity.cc \ src/core/ext/filters/client_channel/client_channel.cc \ src/core/ext/filters/client_channel/client_channel_channelz.cc \ src/core/ext/filters/client_channel/client_channel_factory.cc \ src/core/ext/filters/client_channel/client_channel_plugin.cc \ src/core/ext/filters/client_channel/global_subchannel_pool.cc \ src/core/ext/filters/client_channel/health/health_check_client.cc \ src/core/ext/filters/client_channel/http_connect_handshaker.cc \ src/core/ext/filters/client_channel/http_proxy.cc \ src/core/ext/filters/client_channel/lb_policy.cc \ src/core/ext/filters/client_channel/lb_policy/address_filtering.cc \ src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc \ src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc \ src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc \ src/core/ext/filters/client_channel/lb_policy/priority/priority.cc \ src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc \ src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc \ src/core/ext/filters/client_channel/lb_policy/xds/cds.cc \ src/core/ext/filters/client_channel/lb_policy/xds/eds.cc \ src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc \ src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc \ src/core/ext/filters/client_channel/lb_policy_registry.cc \ src/core/ext/filters/client_channel/local_subchannel_pool.cc \ src/core/ext/filters/client_channel/parse_address.cc \ src/core/ext/filters/client_channel/proxy_mapper_registry.cc \ src/core/ext/filters/client_channel/resolver.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc \ src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc \ src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc \ src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc \ src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc \ src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc \ src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc \ src/core/ext/filters/client_channel/resolver_registry.cc \ src/core/ext/filters/client_channel/resolver_result_parsing.cc \ src/core/ext/filters/client_channel/resolving_lb_policy.cc \ src/core/ext/filters/client_channel/retry_throttle.cc \ src/core/ext/filters/client_channel/server_address.cc \ src/core/ext/filters/client_channel/service_config.cc \ src/core/ext/filters/client_channel/service_config_parser.cc \ src/core/ext/filters/client_channel/subchannel.cc \ src/core/ext/filters/client_channel/subchannel_pool_interface.cc \ src/core/ext/filters/client_channel/xds/xds_api.cc \ src/core/ext/filters/client_channel/xds/xds_bootstrap.cc \ src/core/ext/filters/client_channel/xds/xds_channel_secure.cc \ src/core/ext/filters/client_channel/xds/xds_client.cc \ src/core/ext/filters/client_channel/xds/xds_client_stats.cc \ src/core/ext/filters/client_idle/client_idle_filter.cc \ src/core/ext/filters/deadline/deadline_filter.cc \ src/core/ext/filters/http/client/http_client_filter.cc \ src/core/ext/filters/http/client_authority_filter.cc \ src/core/ext/filters/http/http_filters_plugin.cc \ src/core/ext/filters/http/message_compress/message_compress_filter.cc \ src/core/ext/filters/http/message_compress/message_decompress_filter.cc \ src/core/ext/filters/http/server/http_server_filter.cc \ src/core/ext/filters/max_age/max_age_filter.cc \ src/core/ext/filters/message_size/message_size_filter.cc \ src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc \ src/core/ext/filters/workarounds/workaround_utils.cc \ src/core/ext/transport/chttp2/alpn/alpn.cc \ src/core/ext/transport/chttp2/client/authority.cc \ src/core/ext/transport/chttp2/client/chttp2_connector.cc \ src/core/ext/transport/chttp2/client/insecure/channel_create.cc \ src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc \ src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc \ src/core/ext/transport/chttp2/server/chttp2_server.cc \ src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc \ src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc \ src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc \ src/core/ext/transport/chttp2/transport/bin_decoder.cc \ src/core/ext/transport/chttp2/transport/bin_encoder.cc \ src/core/ext/transport/chttp2/transport/chttp2_plugin.cc \ src/core/ext/transport/chttp2/transport/chttp2_transport.cc \ src/core/ext/transport/chttp2/transport/context_list.cc \ src/core/ext/transport/chttp2/transport/flow_control.cc \ src/core/ext/transport/chttp2/transport/frame_data.cc \ src/core/ext/transport/chttp2/transport/frame_goaway.cc \ src/core/ext/transport/chttp2/transport/frame_ping.cc \ src/core/ext/transport/chttp2/transport/frame_rst_stream.cc \ src/core/ext/transport/chttp2/transport/frame_settings.cc \ src/core/ext/transport/chttp2/transport/frame_window_update.cc \ src/core/ext/transport/chttp2/transport/hpack_encoder.cc \ src/core/ext/transport/chttp2/transport/hpack_parser.cc \ src/core/ext/transport/chttp2/transport/hpack_table.cc \ src/core/ext/transport/chttp2/transport/http2_settings.cc \ src/core/ext/transport/chttp2/transport/huffsyms.cc \ src/core/ext/transport/chttp2/transport/incoming_metadata.cc \ src/core/ext/transport/chttp2/transport/parsing.cc \ src/core/ext/transport/chttp2/transport/stream_lists.cc \ src/core/ext/transport/chttp2/transport/stream_map.cc \ src/core/ext/transport/chttp2/transport/varint.cc \ src/core/ext/transport/chttp2/transport/writing.cc \ src/core/ext/transport/inproc/inproc_plugin.cc \ src/core/ext/transport/inproc/inproc_transport.cc \ src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c \ src/core/ext/upb-generated/envoy/annotations/resource.upb.c \ src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c \ src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c \ src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c \ src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c \ src/core/ext/upb-generated/envoy/api/v2/cds.upb.c \ src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c \ src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c \ src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c \ src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c \ src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c \ src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c \ src/core/ext/upb-generated/envoy/api/v2/eds.upb.c \ src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c \ src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c \ src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c \ src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c \ src/core/ext/upb-generated/envoy/api/v2/lds.upb.c \ src/core/ext/upb-generated/envoy/api/v2/listener.upb.c \ src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c \ src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c \ src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c \ src/core/ext/upb-generated/envoy/api/v2/rds.upb.c \ src/core/ext/upb-generated/envoy/api/v2/route.upb.c \ src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c \ src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c \ src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c \ src/core/ext/upb-generated/envoy/api/v2/srds.upb.c \ src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c \ src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c \ src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c \ src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c \ src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c \ src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c \ src/core/ext/upb-generated/envoy/type/http.upb.c \ src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c \ src/core/ext/upb-generated/envoy/type/matcher/string.upb.c \ src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c \ src/core/ext/upb-generated/envoy/type/percent.upb.c \ src/core/ext/upb-generated/envoy/type/range.upb.c \ src/core/ext/upb-generated/envoy/type/semantic_version.upb.c \ src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c \ src/core/ext/upb-generated/gogoproto/gogo.upb.c \ src/core/ext/upb-generated/google/api/annotations.upb.c \ src/core/ext/upb-generated/google/api/http.upb.c \ src/core/ext/upb-generated/google/protobuf/any.upb.c \ src/core/ext/upb-generated/google/protobuf/descriptor.upb.c \ src/core/ext/upb-generated/google/protobuf/duration.upb.c \ src/core/ext/upb-generated/google/protobuf/empty.upb.c \ src/core/ext/upb-generated/google/protobuf/struct.upb.c \ src/core/ext/upb-generated/google/protobuf/timestamp.upb.c \ src/core/ext/upb-generated/google/protobuf/wrappers.upb.c \ src/core/ext/upb-generated/google/rpc/status.upb.c \ src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c \ src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c \ src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c \ src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c \ src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c \ src/core/ext/upb-generated/udpa/annotations/migrate.upb.c \ src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c \ src/core/ext/upb-generated/udpa/annotations/status.upb.c \ src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c \ src/core/ext/upb-generated/validate/validate.upb.c \ src/core/lib/avl/avl.cc \ src/core/lib/backoff/backoff.cc \ src/core/lib/channel/channel_args.cc \ src/core/lib/channel/channel_stack.cc \ src/core/lib/channel/channel_stack_builder.cc \ src/core/lib/channel/channel_trace.cc \ src/core/lib/channel/channelz.cc \ src/core/lib/channel/channelz_registry.cc \ src/core/lib/channel/connected_channel.cc \ src/core/lib/channel/handshaker.cc \ src/core/lib/channel/handshaker_registry.cc \ src/core/lib/channel/status_util.cc \ src/core/lib/compression/compression.cc \ src/core/lib/compression/compression_args.cc \ src/core/lib/compression/compression_internal.cc \ src/core/lib/compression/message_compress.cc \ src/core/lib/compression/stream_compression.cc \ src/core/lib/compression/stream_compression_gzip.cc \ src/core/lib/compression/stream_compression_identity.cc \ src/core/lib/debug/stats.cc \ src/core/lib/debug/stats_data.cc \ src/core/lib/debug/trace.cc \ src/core/lib/gpr/alloc.cc \ src/core/lib/gpr/atm.cc \ src/core/lib/gpr/cpu_iphone.cc \ src/core/lib/gpr/cpu_linux.cc \ src/core/lib/gpr/cpu_posix.cc \ src/core/lib/gpr/cpu_windows.cc \ src/core/lib/gpr/env_linux.cc \ src/core/lib/gpr/env_posix.cc \ src/core/lib/gpr/env_windows.cc \ src/core/lib/gpr/log.cc \ src/core/lib/gpr/log_android.cc \ src/core/lib/gpr/log_linux.cc \ src/core/lib/gpr/log_posix.cc \ src/core/lib/gpr/log_windows.cc \ src/core/lib/gpr/murmur_hash.cc \ src/core/lib/gpr/string.cc \ src/core/lib/gpr/string_posix.cc \ src/core/lib/gpr/string_util_windows.cc \ src/core/lib/gpr/string_windows.cc \ src/core/lib/gpr/sync.cc \ src/core/lib/gpr/sync_abseil.cc \ src/core/lib/gpr/sync_posix.cc \ src/core/lib/gpr/sync_windows.cc \ src/core/lib/gpr/time.cc \ src/core/lib/gpr/time_posix.cc \ src/core/lib/gpr/time_precise.cc \ src/core/lib/gpr/time_windows.cc \ src/core/lib/gpr/tls_pthread.cc \ src/core/lib/gpr/tmpfile_msys.cc \ src/core/lib/gpr/tmpfile_posix.cc \ src/core/lib/gpr/tmpfile_windows.cc \ src/core/lib/gpr/wrap_memcpy.cc \ src/core/lib/gprpp/arena.cc \ src/core/lib/gprpp/fork.cc \ src/core/lib/gprpp/global_config_env.cc \ src/core/lib/gprpp/host_port.cc \ src/core/lib/gprpp/mpscq.cc \ src/core/lib/gprpp/thd_posix.cc \ src/core/lib/gprpp/thd_windows.cc \ src/core/lib/http/format_request.cc \ src/core/lib/http/httpcli.cc \ src/core/lib/http/httpcli_security_connector.cc \ src/core/lib/http/parser.cc \ src/core/lib/iomgr/buffer_list.cc \ src/core/lib/iomgr/call_combiner.cc \ src/core/lib/iomgr/cfstream_handle.cc \ src/core/lib/iomgr/combiner.cc \ src/core/lib/iomgr/dualstack_socket_posix.cc \ src/core/lib/iomgr/endpoint.cc \ src/core/lib/iomgr/endpoint_cfstream.cc \ src/core/lib/iomgr/endpoint_pair_posix.cc \ src/core/lib/iomgr/endpoint_pair_uv.cc \ src/core/lib/iomgr/endpoint_pair_windows.cc \ src/core/lib/iomgr/error.cc \ src/core/lib/iomgr/error_cfstream.cc \ src/core/lib/iomgr/ev_apple.cc \ src/core/lib/iomgr/ev_epoll1_linux.cc \ src/core/lib/iomgr/ev_epollex_linux.cc \ src/core/lib/iomgr/ev_poll_posix.cc \ src/core/lib/iomgr/ev_posix.cc \ src/core/lib/iomgr/ev_windows.cc \ src/core/lib/iomgr/exec_ctx.cc \ src/core/lib/iomgr/executor.cc \ src/core/lib/iomgr/executor/mpmcqueue.cc \ src/core/lib/iomgr/executor/threadpool.cc \ src/core/lib/iomgr/fork_posix.cc \ src/core/lib/iomgr/fork_windows.cc \ src/core/lib/iomgr/gethostname_fallback.cc \ src/core/lib/iomgr/gethostname_host_name_max.cc \ src/core/lib/iomgr/gethostname_sysconf.cc \ src/core/lib/iomgr/grpc_if_nametoindex_posix.cc \ src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc \ src/core/lib/iomgr/internal_errqueue.cc \ src/core/lib/iomgr/iocp_windows.cc \ src/core/lib/iomgr/iomgr.cc \ src/core/lib/iomgr/iomgr_custom.cc \ src/core/lib/iomgr/iomgr_internal.cc \ src/core/lib/iomgr/iomgr_posix.cc \ src/core/lib/iomgr/iomgr_posix_cfstream.cc \ src/core/lib/iomgr/iomgr_uv.cc \ src/core/lib/iomgr/iomgr_windows.cc \ src/core/lib/iomgr/is_epollexclusive_available.cc \ src/core/lib/iomgr/load_file.cc \ src/core/lib/iomgr/lockfree_event.cc \ src/core/lib/iomgr/poller/eventmanager_libuv.cc \ src/core/lib/iomgr/polling_entity.cc \ src/core/lib/iomgr/pollset.cc \ src/core/lib/iomgr/pollset_custom.cc \ src/core/lib/iomgr/pollset_set.cc \ src/core/lib/iomgr/pollset_set_custom.cc \ src/core/lib/iomgr/pollset_set_windows.cc \ src/core/lib/iomgr/pollset_uv.cc \ src/core/lib/iomgr/pollset_windows.cc \ src/core/lib/iomgr/resolve_address.cc \ src/core/lib/iomgr/resolve_address_custom.cc \ src/core/lib/iomgr/resolve_address_posix.cc \ src/core/lib/iomgr/resolve_address_windows.cc \ src/core/lib/iomgr/resource_quota.cc \ src/core/lib/iomgr/sockaddr_utils.cc \ src/core/lib/iomgr/socket_factory_posix.cc \ src/core/lib/iomgr/socket_mutator.cc \ src/core/lib/iomgr/socket_utils_common_posix.cc \ src/core/lib/iomgr/socket_utils_linux.cc \ src/core/lib/iomgr/socket_utils_posix.cc \ src/core/lib/iomgr/socket_utils_uv.cc \ src/core/lib/iomgr/socket_utils_windows.cc \ src/core/lib/iomgr/socket_windows.cc \ src/core/lib/iomgr/tcp_client.cc \ src/core/lib/iomgr/tcp_client_cfstream.cc \ src/core/lib/iomgr/tcp_client_custom.cc \ src/core/lib/iomgr/tcp_client_posix.cc \ src/core/lib/iomgr/tcp_client_windows.cc \ src/core/lib/iomgr/tcp_custom.cc \ src/core/lib/iomgr/tcp_posix.cc \ src/core/lib/iomgr/tcp_server.cc \ src/core/lib/iomgr/tcp_server_custom.cc \ src/core/lib/iomgr/tcp_server_posix.cc \ src/core/lib/iomgr/tcp_server_utils_posix_common.cc \ src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc \ src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc \ src/core/lib/iomgr/tcp_server_windows.cc \ src/core/lib/iomgr/tcp_uv.cc \ src/core/lib/iomgr/tcp_windows.cc \ src/core/lib/iomgr/time_averaged_stats.cc \ src/core/lib/iomgr/timer.cc \ src/core/lib/iomgr/timer_custom.cc \ src/core/lib/iomgr/timer_generic.cc \ src/core/lib/iomgr/timer_heap.cc \ src/core/lib/iomgr/timer_manager.cc \ src/core/lib/iomgr/timer_uv.cc \ src/core/lib/iomgr/udp_server.cc \ src/core/lib/iomgr/unix_sockets_posix.cc \ src/core/lib/iomgr/unix_sockets_posix_noop.cc \ src/core/lib/iomgr/wakeup_fd_eventfd.cc \ src/core/lib/iomgr/wakeup_fd_nospecial.cc \ src/core/lib/iomgr/wakeup_fd_pipe.cc \ src/core/lib/iomgr/wakeup_fd_posix.cc \ src/core/lib/iomgr/work_serializer.cc \ src/core/lib/json/json_reader.cc \ src/core/lib/json/json_writer.cc \ src/core/lib/profiling/basic_timers.cc \ src/core/lib/profiling/stap_timers.cc \ src/core/lib/security/context/security_context.cc \ src/core/lib/security/credentials/alts/alts_credentials.cc \ src/core/lib/security/credentials/alts/check_gcp_environment.cc \ src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc \ src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc \ src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc \ src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc \ src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc \ src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc \ src/core/lib/security/credentials/composite/composite_credentials.cc \ src/core/lib/security/credentials/credentials.cc \ src/core/lib/security/credentials/credentials_metadata.cc \ src/core/lib/security/credentials/fake/fake_credentials.cc \ src/core/lib/security/credentials/google_default/credentials_generic.cc \ src/core/lib/security/credentials/google_default/google_default_credentials.cc \ src/core/lib/security/credentials/iam/iam_credentials.cc \ src/core/lib/security/credentials/jwt/json_token.cc \ src/core/lib/security/credentials/jwt/jwt_credentials.cc \ src/core/lib/security/credentials/jwt/jwt_verifier.cc \ src/core/lib/security/credentials/local/local_credentials.cc \ src/core/lib/security/credentials/oauth2/oauth2_credentials.cc \ src/core/lib/security/credentials/plugin/plugin_credentials.cc \ src/core/lib/security/credentials/ssl/ssl_credentials.cc \ src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc \ src/core/lib/security/credentials/tls/tls_credentials.cc \ src/core/lib/security/security_connector/alts/alts_security_connector.cc \ src/core/lib/security/security_connector/fake/fake_security_connector.cc \ src/core/lib/security/security_connector/load_system_roots_fallback.cc \ src/core/lib/security/security_connector/load_system_roots_linux.cc \ src/core/lib/security/security_connector/local/local_security_connector.cc \ src/core/lib/security/security_connector/security_connector.cc \ src/core/lib/security/security_connector/ssl/ssl_security_connector.cc \ src/core/lib/security/security_connector/ssl_utils.cc \ src/core/lib/security/security_connector/ssl_utils_config.cc \ src/core/lib/security/security_connector/tls/tls_security_connector.cc \ src/core/lib/security/transport/client_auth_filter.cc \ src/core/lib/security/transport/secure_endpoint.cc \ src/core/lib/security/transport/security_handshaker.cc \ src/core/lib/security/transport/server_auth_filter.cc \ src/core/lib/security/transport/target_authority_table.cc \ src/core/lib/security/transport/tsi_error.cc \ src/core/lib/security/util/json_util.cc \ src/core/lib/slice/b64.cc \ src/core/lib/slice/percent_encoding.cc \ src/core/lib/slice/slice.cc \ src/core/lib/slice/slice_buffer.cc \ src/core/lib/slice/slice_intern.cc \ src/core/lib/slice/slice_string_helpers.cc \ src/core/lib/surface/api_trace.cc \ src/core/lib/surface/byte_buffer.cc \ src/core/lib/surface/byte_buffer_reader.cc \ src/core/lib/surface/call.cc \ src/core/lib/surface/call_details.cc \ src/core/lib/surface/call_log_batch.cc \ src/core/lib/surface/channel.cc \ src/core/lib/surface/channel_init.cc \ src/core/lib/surface/channel_ping.cc \ src/core/lib/surface/channel_stack_type.cc \ src/core/lib/surface/completion_queue.cc \ src/core/lib/surface/completion_queue_factory.cc \ src/core/lib/surface/event_string.cc \ src/core/lib/surface/init.cc \ src/core/lib/surface/init_secure.cc \ src/core/lib/surface/lame_client.cc \ src/core/lib/surface/metadata_array.cc \ src/core/lib/surface/server.cc \ src/core/lib/surface/validate_metadata.cc \ src/core/lib/surface/version.cc \ src/core/lib/transport/bdp_estimator.cc \ src/core/lib/transport/byte_stream.cc \ src/core/lib/transport/connectivity_state.cc \ src/core/lib/transport/error_utils.cc \ src/core/lib/transport/metadata.cc \ src/core/lib/transport/metadata_batch.cc \ src/core/lib/transport/pid_controller.cc \ src/core/lib/transport/static_metadata.cc \ src/core/lib/transport/status_conversion.cc \ src/core/lib/transport/status_metadata.cc \ src/core/lib/transport/timeout_encoding.cc \ src/core/lib/transport/transport.cc \ src/core/lib/transport/transport_op_string.cc \ src/core/lib/uri/uri_parser.cc \ src/core/plugin_registry/grpc_plugin_registry.cc \ src/core/tsi/alts/crypt/aes_gcm.cc \ src/core/tsi/alts/crypt/gsec.cc \ src/core/tsi/alts/frame_protector/alts_counter.cc \ src/core/tsi/alts/frame_protector/alts_crypter.cc \ src/core/tsi/alts/frame_protector/alts_frame_protector.cc \ src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc \ src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc \ src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc \ src/core/tsi/alts/frame_protector/frame_handler.cc \ src/core/tsi/alts/handshaker/alts_handshaker_client.cc \ src/core/tsi/alts/handshaker/alts_shared_resource.cc \ src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc \ src/core/tsi/alts/handshaker/alts_tsi_utils.cc \ src/core/tsi/alts/handshaker/transport_security_common_api.cc \ src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc \ src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc \ src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc \ src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc \ src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc \ src/core/tsi/fake_transport_security.cc \ src/core/tsi/local_transport_security.cc \ src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc \ src/core/tsi/ssl/session_cache/ssl_session_cache.cc \ src/core/tsi/ssl/session_cache/ssl_session_openssl.cc \ src/core/tsi/ssl_transport_security.cc \ src/core/tsi/transport_security.cc \ src/core/tsi/transport_security_grpc.cc \ src/php/ext/grpc/byte_buffer.c \ src/php/ext/grpc/call.c \ src/php/ext/grpc/call_credentials.c \ src/php/ext/grpc/channel.c \ src/php/ext/grpc/channel_credentials.c \ src/php/ext/grpc/completion_queue.c \ src/php/ext/grpc/php_grpc.c \ src/php/ext/grpc/server.c \ src/php/ext/grpc/server_credentials.c \ src/php/ext/grpc/timeval.c \ third_party/abseil-cpp/absl/base/dynamic_annotations.cc \ third_party/abseil-cpp/absl/base/internal/cycleclock.cc \ third_party/abseil-cpp/absl/base/internal/raw_logging.cc \ third_party/abseil-cpp/absl/base/internal/spinlock.cc \ third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc \ third_party/abseil-cpp/absl/base/internal/sysinfo.cc \ third_party/abseil-cpp/absl/base/internal/thread_identity.cc \ third_party/abseil-cpp/absl/base/internal/throw_delegate.cc \ third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc \ third_party/abseil-cpp/absl/base/log_severity.cc \ third_party/abseil-cpp/absl/numeric/int128.cc \ third_party/abseil-cpp/absl/strings/ascii.cc \ third_party/abseil-cpp/absl/strings/charconv.cc \ third_party/abseil-cpp/absl/strings/escaping.cc \ third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc \ third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc \ third_party/abseil-cpp/absl/strings/internal/escaping.cc \ third_party/abseil-cpp/absl/strings/internal/memutil.cc \ third_party/abseil-cpp/absl/strings/internal/ostringstream.cc \ third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc \ third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc \ third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc \ third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc \ third_party/abseil-cpp/absl/strings/internal/str_format/output.cc \ third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc \ third_party/abseil-cpp/absl/strings/internal/utf8.cc \ third_party/abseil-cpp/absl/strings/match.cc \ third_party/abseil-cpp/absl/strings/numbers.cc \ third_party/abseil-cpp/absl/strings/str_cat.cc \ third_party/abseil-cpp/absl/strings/str_replace.cc \ third_party/abseil-cpp/absl/strings/str_split.cc \ third_party/abseil-cpp/absl/strings/string_view.cc \ third_party/abseil-cpp/absl/strings/substitute.cc \ third_party/abseil-cpp/absl/time/civil_time.cc \ third_party/abseil-cpp/absl/time/clock.cc \ third_party/abseil-cpp/absl/time/duration.cc \ third_party/abseil-cpp/absl/time/format.cc \ third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc \ third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc \ third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc \ third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc \ third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc \ third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc \ third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc \ third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc \ third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc \ third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc \ third_party/abseil-cpp/absl/time/time.cc \ third_party/abseil-cpp/absl/types/bad_optional_access.cc \ third_party/address_sorting/address_sorting.c \ third_party/address_sorting/address_sorting_posix.c \ third_party/address_sorting/address_sorting_windows.c \ third_party/boringssl-with-bazel/err_data.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c \ third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c \ third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c \ third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c \ third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c \ third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c \ third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c \ third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c \ third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c \ third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c \ third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c \ third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c \ third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c \ third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c \ third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c \ third_party/boringssl-with-bazel/src/crypto/base64/base64.c \ third_party/boringssl-with-bazel/src/crypto/bio/bio.c \ third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c \ third_party/boringssl-with-bazel/src/crypto/bio/connect.c \ third_party/boringssl-with-bazel/src/crypto/bio/fd.c \ third_party/boringssl-with-bazel/src/crypto/bio/file.c \ third_party/boringssl-with-bazel/src/crypto/bio/hexdump.c \ third_party/boringssl-with-bazel/src/crypto/bio/pair.c \ third_party/boringssl-with-bazel/src/crypto/bio/printf.c \ third_party/boringssl-with-bazel/src/crypto/bio/socket.c \ third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c \ third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c \ third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c \ third_party/boringssl-with-bazel/src/crypto/buf/buf.c \ third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c \ third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c \ third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c \ third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c \ third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c \ third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c \ third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c \ third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c \ third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesccm.c \ third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c \ third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c \ third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c \ third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c \ third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c \ third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c \ third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c \ third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c \ third_party/boringssl-with-bazel/src/crypto/cmac/cmac.c \ third_party/boringssl-with-bazel/src/crypto/conf/conf.c \ third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-fuchsia.c \ third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-linux.c \ third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c \ third_party/boringssl-with-bazel/src/crypto/cpu-arm.c \ third_party/boringssl-with-bazel/src/crypto/cpu-intel.c \ third_party/boringssl-with-bazel/src/crypto/cpu-ppc64le.c \ third_party/boringssl-with-bazel/src/crypto/crypto.c \ third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c \ third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c \ third_party/boringssl-with-bazel/src/crypto/dh/check.c \ third_party/boringssl-with-bazel/src/crypto/dh/dh.c \ third_party/boringssl-with-bazel/src/crypto/dh/dh_asn1.c \ third_party/boringssl-with-bazel/src/crypto/dh/params.c \ third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c \ third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c \ third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c \ third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c \ third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c \ third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c \ third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c \ third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c \ third_party/boringssl-with-bazel/src/crypto/engine/engine.c \ third_party/boringssl-with-bazel/src/crypto/err/err.c \ third_party/boringssl-with-bazel/src/crypto/evp/digestsign.c \ third_party/boringssl-with-bazel/src/crypto/evp/evp.c \ third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c \ third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c \ third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c \ third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c \ third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c \ third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c \ third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c \ third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c \ third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c \ third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c \ third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c \ third_party/boringssl-with-bazel/src/crypto/evp/pbkdf.c \ third_party/boringssl-with-bazel/src/crypto/evp/print.c \ third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c \ third_party/boringssl-with-bazel/src/crypto/evp/sign.c \ third_party/boringssl-with-bazel/src/crypto/ex_data.c \ third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c \ third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c \ third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c \ third_party/boringssl-with-bazel/src/crypto/hkdf/hkdf.c \ third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c \ third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c \ third_party/boringssl-with-bazel/src/crypto/mem.c \ third_party/boringssl-with-bazel/src/crypto/obj/obj.c \ third_party/boringssl-with-bazel/src/crypto/obj/obj_xref.c \ third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c \ third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c \ third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c \ third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c \ third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c \ third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c \ third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c \ third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c \ third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c \ third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c \ third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c \ third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c \ third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c \ third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c \ third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c \ third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c \ third_party/boringssl-with-bazel/src/crypto/pool/pool.c \ third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c \ third_party/boringssl-with-bazel/src/crypto/rand_extra/forkunsafe.c \ third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c \ third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c \ third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c \ third_party/boringssl-with-bazel/src/crypto/rc4/rc4.c \ third_party/boringssl-with-bazel/src/crypto/refcount_c11.c \ third_party/boringssl-with-bazel/src/crypto/refcount_lock.c \ third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c \ third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.c \ third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c \ third_party/boringssl-with-bazel/src/crypto/stack/stack.c \ third_party/boringssl-with-bazel/src/crypto/thread.c \ third_party/boringssl-with-bazel/src/crypto/thread_none.c \ third_party/boringssl-with-bazel/src/crypto/thread_pthread.c \ third_party/boringssl-with-bazel/src/crypto/thread_win.c \ third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c \ third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c \ third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c \ third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c \ third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c \ third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c \ third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c \ third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c \ third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c \ third_party/boringssl-with-bazel/src/crypto/x509/by_file.c \ third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c \ third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c \ third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c \ third_party/boringssl-with-bazel/src/crypto/x509/t_req.c \ third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c \ third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509name.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c \ third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_all.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_info.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_name.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_req.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_val.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c \ third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c \ third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c \ third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc \ third_party/boringssl-with-bazel/src/ssl/d1_both.cc \ third_party/boringssl-with-bazel/src/ssl/d1_lib.cc \ third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc \ third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc \ third_party/boringssl-with-bazel/src/ssl/dtls_method.cc \ third_party/boringssl-with-bazel/src/ssl/dtls_record.cc \ third_party/boringssl-with-bazel/src/ssl/handoff.cc \ third_party/boringssl-with-bazel/src/ssl/handshake.cc \ third_party/boringssl-with-bazel/src/ssl/handshake_client.cc \ third_party/boringssl-with-bazel/src/ssl/handshake_server.cc \ third_party/boringssl-with-bazel/src/ssl/s3_both.cc \ third_party/boringssl-with-bazel/src/ssl/s3_lib.cc \ third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_file.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_session.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc \ third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc \ third_party/boringssl-with-bazel/src/ssl/t1_enc.cc \ third_party/boringssl-with-bazel/src/ssl/t1_lib.cc \ third_party/boringssl-with-bazel/src/ssl/tls13_both.cc \ third_party/boringssl-with-bazel/src/ssl/tls13_client.cc \ third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc \ third_party/boringssl-with-bazel/src/ssl/tls13_server.cc \ third_party/boringssl-with-bazel/src/ssl/tls_method.cc \ third_party/boringssl-with-bazel/src/ssl/tls_record.cc \ third_party/upb/upb/decode.c \ third_party/upb/upb/encode.c \ third_party/upb/upb/msg.c \ third_party/upb/upb/port.c \ third_party/upb/upb/table.c \ third_party/upb/upb/upb.c \ , $ext_shared, , -fvisibility=hidden \ -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN \ -D_HAS_EXCEPTIONS=0 -DNOMINMAX -DGRPC_ARES=0 \ -DGRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK=1) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/census) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/health) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/lb_policy) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/lb_policy/grpclb) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/lb_policy/pick_first) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/lb_policy/priority) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/lb_policy/round_robin) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/lb_policy/weighted_target) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/lb_policy/xds) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/resolver/dns) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/resolver/dns/c_ares) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/resolver/dns/native) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/resolver/fake) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/resolver/sockaddr) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/resolver/xds) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/xds) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_idle) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/deadline) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/http) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/http/client) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/http/message_compress) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/http/server) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/max_age) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/message_size) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/workarounds) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/alpn) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/client) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/client/insecure) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/client/secure) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/server) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/server/insecure) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/server/secure) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/transport) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/inproc) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/annotations) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/api/v2) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/api/v2/auth) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/api/v2/cluster) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/api/v2/core) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/api/v2/endpoint) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/api/v2/listener) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/api/v2/route) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/config/listener/v2) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/config/trace/v2) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/service/discovery/v2) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/service/load_stats/v2) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/type) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/type/matcher) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/type/metadata/v2) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/type/tracing/v2) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/gogoproto) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/google/api) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/google/protobuf) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/google/rpc) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/src/proto/grpc/gcp) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/src/proto/grpc/health/v1) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/src/proto/grpc/lb/v1) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/udpa/annotations) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/udpa/data/orca/v1) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/validate) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/avl) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/backoff) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/channel) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/compression) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/debug) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/gpr) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/gprpp) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/http) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/iomgr) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/iomgr/executor) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/iomgr/poller) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/json) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/profiling) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/security/context) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/security/credentials) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/security/credentials/alts) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/security/credentials/composite) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/security/credentials/fake) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/security/credentials/google_default) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/security/credentials/iam) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/security/credentials/jwt) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/security/credentials/local) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/security/credentials/oauth2) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/security/credentials/plugin) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/security/credentials/ssl) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/security/credentials/tls) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/security/security_connector) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/security/security_connector/alts) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/security/security_connector/fake) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/security/security_connector/local) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/security/security_connector/ssl) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/security/security_connector/tls) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/security/transport) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/security/util) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/slice) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/surface) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/transport) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/uri) PHP_ADD_BUILD_DIR($ext_builddir/src/core/plugin_registry) PHP_ADD_BUILD_DIR($ext_builddir/src/core/tsi) PHP_ADD_BUILD_DIR($ext_builddir/src/core/tsi/alts/crypt) PHP_ADD_BUILD_DIR($ext_builddir/src/core/tsi/alts/frame_protector) PHP_ADD_BUILD_DIR($ext_builddir/src/core/tsi/alts/handshaker) PHP_ADD_BUILD_DIR($ext_builddir/src/core/tsi/alts/zero_copy_frame_protector) PHP_ADD_BUILD_DIR($ext_builddir/src/core/tsi/ssl/session_cache) PHP_ADD_BUILD_DIR($ext_builddir/src/php/ext/grpc) PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/base) PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/base/internal) PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/numeric) PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/strings) PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/strings/internal) PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/strings/internal/str_format) PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/time) PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/time/internal/cctz/src) PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/types) PHP_ADD_BUILD_DIR($ext_builddir/third_party/address_sorting) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/asn1) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/base64) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/bio) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/bn_extra) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/buf) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/bytestring) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/chacha) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/cipher_extra) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/cmac) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/conf) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/curve25519) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/dh) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/digest_extra) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/dsa) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/ec_extra) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/ecdh_extra) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/engine) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/err) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/evp) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/fipsmodule) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/hkdf) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/hrss) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/lhash) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/obj) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/pem) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/pkcs7) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/pkcs8) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/poly1305) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/pool) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/rand_extra) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/rc4) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/rsa_extra) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/siphash) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/stack) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/trust_token) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/x509) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/x509v3) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/ssl) PHP_ADD_BUILD_DIR($ext_builddir/third_party/upb/upb) fi grpc-1.30.2/config.w32000066400000000000000000002175621370425124100143460ustar00rootroot00000000000000// $Id$ // vim:ft=javascript ARG_WITH("grpc", "grpc support", "no"); if (PHP_GRPC != "no") { EXTENSION("grpc", "src\\core\\ext\\filters\\census\\grpc_context.cc " + "src\\core\\ext\\filters\\client_channel\\backend_metric.cc " + "src\\core\\ext\\filters\\client_channel\\backup_poller.cc " + "src\\core\\ext\\filters\\client_channel\\channel_connectivity.cc " + "src\\core\\ext\\filters\\client_channel\\client_channel.cc " + "src\\core\\ext\\filters\\client_channel\\client_channel_channelz.cc " + "src\\core\\ext\\filters\\client_channel\\client_channel_factory.cc " + "src\\core\\ext\\filters\\client_channel\\client_channel_plugin.cc " + "src\\core\\ext\\filters\\client_channel\\global_subchannel_pool.cc " + "src\\core\\ext\\filters\\client_channel\\health\\health_check_client.cc " + "src\\core\\ext\\filters\\client_channel\\http_connect_handshaker.cc " + "src\\core\\ext\\filters\\client_channel\\http_proxy.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\address_filtering.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\child_policy_handler.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\client_load_reporting_filter.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\grpclb.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\grpclb_balancer_addresses.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\grpclb_channel_secure.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\grpclb_client_stats.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\load_balancer_api.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\pick_first\\pick_first.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\priority\\priority.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\round_robin\\round_robin.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\weighted_target\\weighted_target.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\xds\\cds.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\xds\\eds.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\xds\\lrs.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy\\xds\\xds_routing.cc " + "src\\core\\ext\\filters\\client_channel\\lb_policy_registry.cc " + "src\\core\\ext\\filters\\client_channel\\local_subchannel_pool.cc " + "src\\core\\ext\\filters\\client_channel\\parse_address.cc " + "src\\core\\ext\\filters\\client_channel\\proxy_mapper_registry.cc " + "src\\core\\ext\\filters\\client_channel\\resolver.cc " + "src\\core\\ext\\filters\\client_channel\\resolver\\dns\\c_ares\\dns_resolver_ares.cc " + "src\\core\\ext\\filters\\client_channel\\resolver\\dns\\c_ares\\grpc_ares_ev_driver.cc " + "src\\core\\ext\\filters\\client_channel\\resolver\\dns\\c_ares\\grpc_ares_ev_driver_libuv.cc " + "src\\core\\ext\\filters\\client_channel\\resolver\\dns\\c_ares\\grpc_ares_ev_driver_posix.cc " + "src\\core\\ext\\filters\\client_channel\\resolver\\dns\\c_ares\\grpc_ares_ev_driver_windows.cc " + "src\\core\\ext\\filters\\client_channel\\resolver\\dns\\c_ares\\grpc_ares_wrapper.cc " + "src\\core\\ext\\filters\\client_channel\\resolver\\dns\\c_ares\\grpc_ares_wrapper_fallback.cc " + "src\\core\\ext\\filters\\client_channel\\resolver\\dns\\c_ares\\grpc_ares_wrapper_libuv.cc " + "src\\core\\ext\\filters\\client_channel\\resolver\\dns\\c_ares\\grpc_ares_wrapper_posix.cc " + "src\\core\\ext\\filters\\client_channel\\resolver\\dns\\c_ares\\grpc_ares_wrapper_windows.cc " + "src\\core\\ext\\filters\\client_channel\\resolver\\dns\\dns_resolver_selection.cc " + "src\\core\\ext\\filters\\client_channel\\resolver\\dns\\native\\dns_resolver.cc " + "src\\core\\ext\\filters\\client_channel\\resolver\\fake\\fake_resolver.cc " + "src\\core\\ext\\filters\\client_channel\\resolver\\sockaddr\\sockaddr_resolver.cc " + "src\\core\\ext\\filters\\client_channel\\resolver\\xds\\xds_resolver.cc " + "src\\core\\ext\\filters\\client_channel\\resolver_registry.cc " + "src\\core\\ext\\filters\\client_channel\\resolver_result_parsing.cc " + "src\\core\\ext\\filters\\client_channel\\resolving_lb_policy.cc " + "src\\core\\ext\\filters\\client_channel\\retry_throttle.cc " + "src\\core\\ext\\filters\\client_channel\\server_address.cc " + "src\\core\\ext\\filters\\client_channel\\service_config.cc " + "src\\core\\ext\\filters\\client_channel\\service_config_parser.cc " + "src\\core\\ext\\filters\\client_channel\\subchannel.cc " + "src\\core\\ext\\filters\\client_channel\\subchannel_pool_interface.cc " + "src\\core\\ext\\filters\\client_channel\\xds\\xds_api.cc " + "src\\core\\ext\\filters\\client_channel\\xds\\xds_bootstrap.cc " + "src\\core\\ext\\filters\\client_channel\\xds\\xds_channel_secure.cc " + "src\\core\\ext\\filters\\client_channel\\xds\\xds_client.cc " + "src\\core\\ext\\filters\\client_channel\\xds\\xds_client_stats.cc " + "src\\core\\ext\\filters\\client_idle\\client_idle_filter.cc " + "src\\core\\ext\\filters\\deadline\\deadline_filter.cc " + "src\\core\\ext\\filters\\http\\client\\http_client_filter.cc " + "src\\core\\ext\\filters\\http\\client_authority_filter.cc " + "src\\core\\ext\\filters\\http\\http_filters_plugin.cc " + "src\\core\\ext\\filters\\http\\message_compress\\message_compress_filter.cc " + "src\\core\\ext\\filters\\http\\message_compress\\message_decompress_filter.cc " + "src\\core\\ext\\filters\\http\\server\\http_server_filter.cc " + "src\\core\\ext\\filters\\max_age\\max_age_filter.cc " + "src\\core\\ext\\filters\\message_size\\message_size_filter.cc " + "src\\core\\ext\\filters\\workarounds\\workaround_cronet_compression_filter.cc " + "src\\core\\ext\\filters\\workarounds\\workaround_utils.cc " + "src\\core\\ext\\transport\\chttp2\\alpn\\alpn.cc " + "src\\core\\ext\\transport\\chttp2\\client\\authority.cc " + "src\\core\\ext\\transport\\chttp2\\client\\chttp2_connector.cc " + "src\\core\\ext\\transport\\chttp2\\client\\insecure\\channel_create.cc " + "src\\core\\ext\\transport\\chttp2\\client\\insecure\\channel_create_posix.cc " + "src\\core\\ext\\transport\\chttp2\\client\\secure\\secure_channel_create.cc " + "src\\core\\ext\\transport\\chttp2\\server\\chttp2_server.cc " + "src\\core\\ext\\transport\\chttp2\\server\\insecure\\server_chttp2.cc " + "src\\core\\ext\\transport\\chttp2\\server\\insecure\\server_chttp2_posix.cc " + "src\\core\\ext\\transport\\chttp2\\server\\secure\\server_secure_chttp2.cc " + "src\\core\\ext\\transport\\chttp2\\transport\\bin_decoder.cc " + "src\\core\\ext\\transport\\chttp2\\transport\\bin_encoder.cc " + "src\\core\\ext\\transport\\chttp2\\transport\\chttp2_plugin.cc " + "src\\core\\ext\\transport\\chttp2\\transport\\chttp2_transport.cc " + "src\\core\\ext\\transport\\chttp2\\transport\\context_list.cc " + "src\\core\\ext\\transport\\chttp2\\transport\\flow_control.cc " + "src\\core\\ext\\transport\\chttp2\\transport\\frame_data.cc " + "src\\core\\ext\\transport\\chttp2\\transport\\frame_goaway.cc " + "src\\core\\ext\\transport\\chttp2\\transport\\frame_ping.cc " + "src\\core\\ext\\transport\\chttp2\\transport\\frame_rst_stream.cc " + "src\\core\\ext\\transport\\chttp2\\transport\\frame_settings.cc " + "src\\core\\ext\\transport\\chttp2\\transport\\frame_window_update.cc " + "src\\core\\ext\\transport\\chttp2\\transport\\hpack_encoder.cc " + "src\\core\\ext\\transport\\chttp2\\transport\\hpack_parser.cc " + "src\\core\\ext\\transport\\chttp2\\transport\\hpack_table.cc " + "src\\core\\ext\\transport\\chttp2\\transport\\http2_settings.cc " + "src\\core\\ext\\transport\\chttp2\\transport\\huffsyms.cc " + "src\\core\\ext\\transport\\chttp2\\transport\\incoming_metadata.cc " + "src\\core\\ext\\transport\\chttp2\\transport\\parsing.cc " + "src\\core\\ext\\transport\\chttp2\\transport\\stream_lists.cc " + "src\\core\\ext\\transport\\chttp2\\transport\\stream_map.cc " + "src\\core\\ext\\transport\\chttp2\\transport\\varint.cc " + "src\\core\\ext\\transport\\chttp2\\transport\\writing.cc " + "src\\core\\ext\\transport\\inproc\\inproc_plugin.cc " + "src\\core\\ext\\transport\\inproc\\inproc_transport.cc " + "src\\core\\ext\\upb-generated\\envoy\\annotations\\deprecation.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\annotations\\resource.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\auth\\cert.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\auth\\common.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\auth\\secret.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\auth\\tls.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\cds.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\cluster.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\cluster\\circuit_breaker.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\cluster\\filter.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\cluster\\outlier_detection.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\address.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\backoff.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\base.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\config_source.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\event_service_config.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\grpc_service.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\health_check.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\http_uri.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\protocol.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\socket_option.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\discovery.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\eds.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\endpoint.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\endpoint\\endpoint.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\endpoint\\endpoint_components.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\endpoint\\load_report.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\lds.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\listener.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\listener\\listener.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\listener\\listener_components.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\listener\\udp_listener_config.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\rds.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\route.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\route\\route.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\route\\route_components.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\scoped_route.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\srds.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\config\\filter\\accesslog\\v2\\accesslog.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\config\\filter\\network\\http_connection_manager\\v2\\http_connection_manager.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\config\\listener\\v2\\api_listener.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\config\\trace\\v2\\http_tracer.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\service\\discovery\\v2\\ads.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\service\\load_stats\\v2\\lrs.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\type\\http.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\type\\matcher\\regex.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\type\\matcher\\string.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\type\\metadata\\v2\\metadata.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\type\\percent.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\type\\range.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\type\\semantic_version.upb.c " + "src\\core\\ext\\upb-generated\\envoy\\type\\tracing\\v2\\custom_tag.upb.c " + "src\\core\\ext\\upb-generated\\gogoproto\\gogo.upb.c " + "src\\core\\ext\\upb-generated\\google\\api\\annotations.upb.c " + "src\\core\\ext\\upb-generated\\google\\api\\http.upb.c " + "src\\core\\ext\\upb-generated\\google\\protobuf\\any.upb.c " + "src\\core\\ext\\upb-generated\\google\\protobuf\\descriptor.upb.c " + "src\\core\\ext\\upb-generated\\google\\protobuf\\duration.upb.c " + "src\\core\\ext\\upb-generated\\google\\protobuf\\empty.upb.c " + "src\\core\\ext\\upb-generated\\google\\protobuf\\struct.upb.c " + "src\\core\\ext\\upb-generated\\google\\protobuf\\timestamp.upb.c " + "src\\core\\ext\\upb-generated\\google\\protobuf\\wrappers.upb.c " + "src\\core\\ext\\upb-generated\\google\\rpc\\status.upb.c " + "src\\core\\ext\\upb-generated\\src\\proto\\grpc\\gcp\\altscontext.upb.c " + "src\\core\\ext\\upb-generated\\src\\proto\\grpc\\gcp\\handshaker.upb.c " + "src\\core\\ext\\upb-generated\\src\\proto\\grpc\\gcp\\transport_security_common.upb.c " + "src\\core\\ext\\upb-generated\\src\\proto\\grpc\\health\\v1\\health.upb.c " + "src\\core\\ext\\upb-generated\\src\\proto\\grpc\\lb\\v1\\load_balancer.upb.c " + "src\\core\\ext\\upb-generated\\udpa\\annotations\\migrate.upb.c " + "src\\core\\ext\\upb-generated\\udpa\\annotations\\sensitive.upb.c " + "src\\core\\ext\\upb-generated\\udpa\\annotations\\status.upb.c " + "src\\core\\ext\\upb-generated\\udpa\\data\\orca\\v1\\orca_load_report.upb.c " + "src\\core\\ext\\upb-generated\\validate\\validate.upb.c " + "src\\core\\lib\\avl\\avl.cc " + "src\\core\\lib\\backoff\\backoff.cc " + "src\\core\\lib\\channel\\channel_args.cc " + "src\\core\\lib\\channel\\channel_stack.cc " + "src\\core\\lib\\channel\\channel_stack_builder.cc " + "src\\core\\lib\\channel\\channel_trace.cc " + "src\\core\\lib\\channel\\channelz.cc " + "src\\core\\lib\\channel\\channelz_registry.cc " + "src\\core\\lib\\channel\\connected_channel.cc " + "src\\core\\lib\\channel\\handshaker.cc " + "src\\core\\lib\\channel\\handshaker_registry.cc " + "src\\core\\lib\\channel\\status_util.cc " + "src\\core\\lib\\compression\\compression.cc " + "src\\core\\lib\\compression\\compression_args.cc " + "src\\core\\lib\\compression\\compression_internal.cc " + "src\\core\\lib\\compression\\message_compress.cc " + "src\\core\\lib\\compression\\stream_compression.cc " + "src\\core\\lib\\compression\\stream_compression_gzip.cc " + "src\\core\\lib\\compression\\stream_compression_identity.cc " + "src\\core\\lib\\debug\\stats.cc " + "src\\core\\lib\\debug\\stats_data.cc " + "src\\core\\lib\\debug\\trace.cc " + "src\\core\\lib\\gpr\\alloc.cc " + "src\\core\\lib\\gpr\\atm.cc " + "src\\core\\lib\\gpr\\cpu_iphone.cc " + "src\\core\\lib\\gpr\\cpu_linux.cc " + "src\\core\\lib\\gpr\\cpu_posix.cc " + "src\\core\\lib\\gpr\\cpu_windows.cc " + "src\\core\\lib\\gpr\\env_linux.cc " + "src\\core\\lib\\gpr\\env_posix.cc " + "src\\core\\lib\\gpr\\env_windows.cc " + "src\\core\\lib\\gpr\\log.cc " + "src\\core\\lib\\gpr\\log_android.cc " + "src\\core\\lib\\gpr\\log_linux.cc " + "src\\core\\lib\\gpr\\log_posix.cc " + "src\\core\\lib\\gpr\\log_windows.cc " + "src\\core\\lib\\gpr\\murmur_hash.cc " + "src\\core\\lib\\gpr\\string.cc " + "src\\core\\lib\\gpr\\string_posix.cc " + "src\\core\\lib\\gpr\\string_util_windows.cc " + "src\\core\\lib\\gpr\\string_windows.cc " + "src\\core\\lib\\gpr\\sync.cc " + "src\\core\\lib\\gpr\\sync_abseil.cc " + "src\\core\\lib\\gpr\\sync_posix.cc " + "src\\core\\lib\\gpr\\sync_windows.cc " + "src\\core\\lib\\gpr\\time.cc " + "src\\core\\lib\\gpr\\time_posix.cc " + "src\\core\\lib\\gpr\\time_precise.cc " + "src\\core\\lib\\gpr\\time_windows.cc " + "src\\core\\lib\\gpr\\tls_pthread.cc " + "src\\core\\lib\\gpr\\tmpfile_msys.cc " + "src\\core\\lib\\gpr\\tmpfile_posix.cc " + "src\\core\\lib\\gpr\\tmpfile_windows.cc " + "src\\core\\lib\\gpr\\wrap_memcpy.cc " + "src\\core\\lib\\gprpp\\arena.cc " + "src\\core\\lib\\gprpp\\fork.cc " + "src\\core\\lib\\gprpp\\global_config_env.cc " + "src\\core\\lib\\gprpp\\host_port.cc " + "src\\core\\lib\\gprpp\\mpscq.cc " + "src\\core\\lib\\gprpp\\thd_posix.cc " + "src\\core\\lib\\gprpp\\thd_windows.cc " + "src\\core\\lib\\http\\format_request.cc " + "src\\core\\lib\\http\\httpcli.cc " + "src\\core\\lib\\http\\httpcli_security_connector.cc " + "src\\core\\lib\\http\\parser.cc " + "src\\core\\lib\\iomgr\\buffer_list.cc " + "src\\core\\lib\\iomgr\\call_combiner.cc " + "src\\core\\lib\\iomgr\\cfstream_handle.cc " + "src\\core\\lib\\iomgr\\combiner.cc " + "src\\core\\lib\\iomgr\\dualstack_socket_posix.cc " + "src\\core\\lib\\iomgr\\endpoint.cc " + "src\\core\\lib\\iomgr\\endpoint_cfstream.cc " + "src\\core\\lib\\iomgr\\endpoint_pair_posix.cc " + "src\\core\\lib\\iomgr\\endpoint_pair_uv.cc " + "src\\core\\lib\\iomgr\\endpoint_pair_windows.cc " + "src\\core\\lib\\iomgr\\error.cc " + "src\\core\\lib\\iomgr\\error_cfstream.cc " + "src\\core\\lib\\iomgr\\ev_apple.cc " + "src\\core\\lib\\iomgr\\ev_epoll1_linux.cc " + "src\\core\\lib\\iomgr\\ev_epollex_linux.cc " + "src\\core\\lib\\iomgr\\ev_poll_posix.cc " + "src\\core\\lib\\iomgr\\ev_posix.cc " + "src\\core\\lib\\iomgr\\ev_windows.cc " + "src\\core\\lib\\iomgr\\exec_ctx.cc " + "src\\core\\lib\\iomgr\\executor.cc " + "src\\core\\lib\\iomgr\\executor\\mpmcqueue.cc " + "src\\core\\lib\\iomgr\\executor\\threadpool.cc " + "src\\core\\lib\\iomgr\\fork_posix.cc " + "src\\core\\lib\\iomgr\\fork_windows.cc " + "src\\core\\lib\\iomgr\\gethostname_fallback.cc " + "src\\core\\lib\\iomgr\\gethostname_host_name_max.cc " + "src\\core\\lib\\iomgr\\gethostname_sysconf.cc " + "src\\core\\lib\\iomgr\\grpc_if_nametoindex_posix.cc " + "src\\core\\lib\\iomgr\\grpc_if_nametoindex_unsupported.cc " + "src\\core\\lib\\iomgr\\internal_errqueue.cc " + "src\\core\\lib\\iomgr\\iocp_windows.cc " + "src\\core\\lib\\iomgr\\iomgr.cc " + "src\\core\\lib\\iomgr\\iomgr_custom.cc " + "src\\core\\lib\\iomgr\\iomgr_internal.cc " + "src\\core\\lib\\iomgr\\iomgr_posix.cc " + "src\\core\\lib\\iomgr\\iomgr_posix_cfstream.cc " + "src\\core\\lib\\iomgr\\iomgr_uv.cc " + "src\\core\\lib\\iomgr\\iomgr_windows.cc " + "src\\core\\lib\\iomgr\\is_epollexclusive_available.cc " + "src\\core\\lib\\iomgr\\load_file.cc " + "src\\core\\lib\\iomgr\\lockfree_event.cc " + "src\\core\\lib\\iomgr\\poller\\eventmanager_libuv.cc " + "src\\core\\lib\\iomgr\\polling_entity.cc " + "src\\core\\lib\\iomgr\\pollset.cc " + "src\\core\\lib\\iomgr\\pollset_custom.cc " + "src\\core\\lib\\iomgr\\pollset_set.cc " + "src\\core\\lib\\iomgr\\pollset_set_custom.cc " + "src\\core\\lib\\iomgr\\pollset_set_windows.cc " + "src\\core\\lib\\iomgr\\pollset_uv.cc " + "src\\core\\lib\\iomgr\\pollset_windows.cc " + "src\\core\\lib\\iomgr\\resolve_address.cc " + "src\\core\\lib\\iomgr\\resolve_address_custom.cc " + "src\\core\\lib\\iomgr\\resolve_address_posix.cc " + "src\\core\\lib\\iomgr\\resolve_address_windows.cc " + "src\\core\\lib\\iomgr\\resource_quota.cc " + "src\\core\\lib\\iomgr\\sockaddr_utils.cc " + "src\\core\\lib\\iomgr\\socket_factory_posix.cc " + "src\\core\\lib\\iomgr\\socket_mutator.cc " + "src\\core\\lib\\iomgr\\socket_utils_common_posix.cc " + "src\\core\\lib\\iomgr\\socket_utils_linux.cc " + "src\\core\\lib\\iomgr\\socket_utils_posix.cc " + "src\\core\\lib\\iomgr\\socket_utils_uv.cc " + "src\\core\\lib\\iomgr\\socket_utils_windows.cc " + "src\\core\\lib\\iomgr\\socket_windows.cc " + "src\\core\\lib\\iomgr\\tcp_client.cc " + "src\\core\\lib\\iomgr\\tcp_client_cfstream.cc " + "src\\core\\lib\\iomgr\\tcp_client_custom.cc " + "src\\core\\lib\\iomgr\\tcp_client_posix.cc " + "src\\core\\lib\\iomgr\\tcp_client_windows.cc " + "src\\core\\lib\\iomgr\\tcp_custom.cc " + "src\\core\\lib\\iomgr\\tcp_posix.cc " + "src\\core\\lib\\iomgr\\tcp_server.cc " + "src\\core\\lib\\iomgr\\tcp_server_custom.cc " + "src\\core\\lib\\iomgr\\tcp_server_posix.cc " + "src\\core\\lib\\iomgr\\tcp_server_utils_posix_common.cc " + "src\\core\\lib\\iomgr\\tcp_server_utils_posix_ifaddrs.cc " + "src\\core\\lib\\iomgr\\tcp_server_utils_posix_noifaddrs.cc " + "src\\core\\lib\\iomgr\\tcp_server_windows.cc " + "src\\core\\lib\\iomgr\\tcp_uv.cc " + "src\\core\\lib\\iomgr\\tcp_windows.cc " + "src\\core\\lib\\iomgr\\time_averaged_stats.cc " + "src\\core\\lib\\iomgr\\timer.cc " + "src\\core\\lib\\iomgr\\timer_custom.cc " + "src\\core\\lib\\iomgr\\timer_generic.cc " + "src\\core\\lib\\iomgr\\timer_heap.cc " + "src\\core\\lib\\iomgr\\timer_manager.cc " + "src\\core\\lib\\iomgr\\timer_uv.cc " + "src\\core\\lib\\iomgr\\udp_server.cc " + "src\\core\\lib\\iomgr\\unix_sockets_posix.cc " + "src\\core\\lib\\iomgr\\unix_sockets_posix_noop.cc " + "src\\core\\lib\\iomgr\\wakeup_fd_eventfd.cc " + "src\\core\\lib\\iomgr\\wakeup_fd_nospecial.cc " + "src\\core\\lib\\iomgr\\wakeup_fd_pipe.cc " + "src\\core\\lib\\iomgr\\wakeup_fd_posix.cc " + "src\\core\\lib\\iomgr\\work_serializer.cc " + "src\\core\\lib\\json\\json_reader.cc " + "src\\core\\lib\\json\\json_writer.cc " + "src\\core\\lib\\profiling\\basic_timers.cc " + "src\\core\\lib\\profiling\\stap_timers.cc " + "src\\core\\lib\\security\\context\\security_context.cc " + "src\\core\\lib\\security\\credentials\\alts\\alts_credentials.cc " + "src\\core\\lib\\security\\credentials\\alts\\check_gcp_environment.cc " + "src\\core\\lib\\security\\credentials\\alts\\check_gcp_environment_linux.cc " + "src\\core\\lib\\security\\credentials\\alts\\check_gcp_environment_no_op.cc " + "src\\core\\lib\\security\\credentials\\alts\\check_gcp_environment_windows.cc " + "src\\core\\lib\\security\\credentials\\alts\\grpc_alts_credentials_client_options.cc " + "src\\core\\lib\\security\\credentials\\alts\\grpc_alts_credentials_options.cc " + "src\\core\\lib\\security\\credentials\\alts\\grpc_alts_credentials_server_options.cc " + "src\\core\\lib\\security\\credentials\\composite\\composite_credentials.cc " + "src\\core\\lib\\security\\credentials\\credentials.cc " + "src\\core\\lib\\security\\credentials\\credentials_metadata.cc " + "src\\core\\lib\\security\\credentials\\fake\\fake_credentials.cc " + "src\\core\\lib\\security\\credentials\\google_default\\credentials_generic.cc " + "src\\core\\lib\\security\\credentials\\google_default\\google_default_credentials.cc " + "src\\core\\lib\\security\\credentials\\iam\\iam_credentials.cc " + "src\\core\\lib\\security\\credentials\\jwt\\json_token.cc " + "src\\core\\lib\\security\\credentials\\jwt\\jwt_credentials.cc " + "src\\core\\lib\\security\\credentials\\jwt\\jwt_verifier.cc " + "src\\core\\lib\\security\\credentials\\local\\local_credentials.cc " + "src\\core\\lib\\security\\credentials\\oauth2\\oauth2_credentials.cc " + "src\\core\\lib\\security\\credentials\\plugin\\plugin_credentials.cc " + "src\\core\\lib\\security\\credentials\\ssl\\ssl_credentials.cc " + "src\\core\\lib\\security\\credentials\\tls\\grpc_tls_credentials_options.cc " + "src\\core\\lib\\security\\credentials\\tls\\tls_credentials.cc " + "src\\core\\lib\\security\\security_connector\\alts\\alts_security_connector.cc " + "src\\core\\lib\\security\\security_connector\\fake\\fake_security_connector.cc " + "src\\core\\lib\\security\\security_connector\\load_system_roots_fallback.cc " + "src\\core\\lib\\security\\security_connector\\load_system_roots_linux.cc " + "src\\core\\lib\\security\\security_connector\\local\\local_security_connector.cc " + "src\\core\\lib\\security\\security_connector\\security_connector.cc " + "src\\core\\lib\\security\\security_connector\\ssl\\ssl_security_connector.cc " + "src\\core\\lib\\security\\security_connector\\ssl_utils.cc " + "src\\core\\lib\\security\\security_connector\\ssl_utils_config.cc " + "src\\core\\lib\\security\\security_connector\\tls\\tls_security_connector.cc " + "src\\core\\lib\\security\\transport\\client_auth_filter.cc " + "src\\core\\lib\\security\\transport\\secure_endpoint.cc " + "src\\core\\lib\\security\\transport\\security_handshaker.cc " + "src\\core\\lib\\security\\transport\\server_auth_filter.cc " + "src\\core\\lib\\security\\transport\\target_authority_table.cc " + "src\\core\\lib\\security\\transport\\tsi_error.cc " + "src\\core\\lib\\security\\util\\json_util.cc " + "src\\core\\lib\\slice\\b64.cc " + "src\\core\\lib\\slice\\percent_encoding.cc " + "src\\core\\lib\\slice\\slice.cc " + "src\\core\\lib\\slice\\slice_buffer.cc " + "src\\core\\lib\\slice\\slice_intern.cc " + "src\\core\\lib\\slice\\slice_string_helpers.cc " + "src\\core\\lib\\surface\\api_trace.cc " + "src\\core\\lib\\surface\\byte_buffer.cc " + "src\\core\\lib\\surface\\byte_buffer_reader.cc " + "src\\core\\lib\\surface\\call.cc " + "src\\core\\lib\\surface\\call_details.cc " + "src\\core\\lib\\surface\\call_log_batch.cc " + "src\\core\\lib\\surface\\channel.cc " + "src\\core\\lib\\surface\\channel_init.cc " + "src\\core\\lib\\surface\\channel_ping.cc " + "src\\core\\lib\\surface\\channel_stack_type.cc " + "src\\core\\lib\\surface\\completion_queue.cc " + "src\\core\\lib\\surface\\completion_queue_factory.cc " + "src\\core\\lib\\surface\\event_string.cc " + "src\\core\\lib\\surface\\init.cc " + "src\\core\\lib\\surface\\init_secure.cc " + "src\\core\\lib\\surface\\lame_client.cc " + "src\\core\\lib\\surface\\metadata_array.cc " + "src\\core\\lib\\surface\\server.cc " + "src\\core\\lib\\surface\\validate_metadata.cc " + "src\\core\\lib\\surface\\version.cc " + "src\\core\\lib\\transport\\bdp_estimator.cc " + "src\\core\\lib\\transport\\byte_stream.cc " + "src\\core\\lib\\transport\\connectivity_state.cc " + "src\\core\\lib\\transport\\error_utils.cc " + "src\\core\\lib\\transport\\metadata.cc " + "src\\core\\lib\\transport\\metadata_batch.cc " + "src\\core\\lib\\transport\\pid_controller.cc " + "src\\core\\lib\\transport\\static_metadata.cc " + "src\\core\\lib\\transport\\status_conversion.cc " + "src\\core\\lib\\transport\\status_metadata.cc " + "src\\core\\lib\\transport\\timeout_encoding.cc " + "src\\core\\lib\\transport\\transport.cc " + "src\\core\\lib\\transport\\transport_op_string.cc " + "src\\core\\lib\\uri\\uri_parser.cc " + "src\\core\\plugin_registry\\grpc_plugin_registry.cc " + "src\\core\\tsi\\alts\\crypt\\aes_gcm.cc " + "src\\core\\tsi\\alts\\crypt\\gsec.cc " + "src\\core\\tsi\\alts\\frame_protector\\alts_counter.cc " + "src\\core\\tsi\\alts\\frame_protector\\alts_crypter.cc " + "src\\core\\tsi\\alts\\frame_protector\\alts_frame_protector.cc " + "src\\core\\tsi\\alts\\frame_protector\\alts_record_protocol_crypter_common.cc " + "src\\core\\tsi\\alts\\frame_protector\\alts_seal_privacy_integrity_crypter.cc " + "src\\core\\tsi\\alts\\frame_protector\\alts_unseal_privacy_integrity_crypter.cc " + "src\\core\\tsi\\alts\\frame_protector\\frame_handler.cc " + "src\\core\\tsi\\alts\\handshaker\\alts_handshaker_client.cc " + "src\\core\\tsi\\alts\\handshaker\\alts_shared_resource.cc " + "src\\core\\tsi\\alts\\handshaker\\alts_tsi_handshaker.cc " + "src\\core\\tsi\\alts\\handshaker\\alts_tsi_utils.cc " + "src\\core\\tsi\\alts\\handshaker\\transport_security_common_api.cc " + "src\\core\\tsi\\alts\\zero_copy_frame_protector\\alts_grpc_integrity_only_record_protocol.cc " + "src\\core\\tsi\\alts\\zero_copy_frame_protector\\alts_grpc_privacy_integrity_record_protocol.cc " + "src\\core\\tsi\\alts\\zero_copy_frame_protector\\alts_grpc_record_protocol_common.cc " + "src\\core\\tsi\\alts\\zero_copy_frame_protector\\alts_iovec_record_protocol.cc " + "src\\core\\tsi\\alts\\zero_copy_frame_protector\\alts_zero_copy_grpc_protector.cc " + "src\\core\\tsi\\fake_transport_security.cc " + "src\\core\\tsi\\local_transport_security.cc " + "src\\core\\tsi\\ssl\\session_cache\\ssl_session_boringssl.cc " + "src\\core\\tsi\\ssl\\session_cache\\ssl_session_cache.cc " + "src\\core\\tsi\\ssl\\session_cache\\ssl_session_openssl.cc " + "src\\core\\tsi\\ssl_transport_security.cc " + "src\\core\\tsi\\transport_security.cc " + "src\\core\\tsi\\transport_security_grpc.cc " + "src\\php\\ext\\grpc\\byte_buffer.c " + "src\\php\\ext\\grpc\\call.c " + "src\\php\\ext\\grpc\\call_credentials.c " + "src\\php\\ext\\grpc\\channel.c " + "src\\php\\ext\\grpc\\channel_credentials.c " + "src\\php\\ext\\grpc\\completion_queue.c " + "src\\php\\ext\\grpc\\php_grpc.c " + "src\\php\\ext\\grpc\\server.c " + "src\\php\\ext\\grpc\\server_credentials.c " + "src\\php\\ext\\grpc\\timeval.c " + "third_party\\abseil-cpp\\absl\\base\\dynamic_annotations.cc " + "third_party\\abseil-cpp\\absl\\base\\internal\\cycleclock.cc " + "third_party\\abseil-cpp\\absl\\base\\internal\\raw_logging.cc " + "third_party\\abseil-cpp\\absl\\base\\internal\\spinlock.cc " + "third_party\\abseil-cpp\\absl\\base\\internal\\spinlock_wait.cc " + "third_party\\abseil-cpp\\absl\\base\\internal\\sysinfo.cc " + "third_party\\abseil-cpp\\absl\\base\\internal\\thread_identity.cc " + "third_party\\abseil-cpp\\absl\\base\\internal\\throw_delegate.cc " + "third_party\\abseil-cpp\\absl\\base\\internal\\unscaledcycleclock.cc " + "third_party\\abseil-cpp\\absl\\base\\log_severity.cc " + "third_party\\abseil-cpp\\absl\\numeric\\int128.cc " + "third_party\\abseil-cpp\\absl\\strings\\ascii.cc " + "third_party\\abseil-cpp\\absl\\strings\\charconv.cc " + "third_party\\abseil-cpp\\absl\\strings\\escaping.cc " + "third_party\\abseil-cpp\\absl\\strings\\internal\\charconv_bigint.cc " + "third_party\\abseil-cpp\\absl\\strings\\internal\\charconv_parse.cc " + "third_party\\abseil-cpp\\absl\\strings\\internal\\escaping.cc " + "third_party\\abseil-cpp\\absl\\strings\\internal\\memutil.cc " + "third_party\\abseil-cpp\\absl\\strings\\internal\\ostringstream.cc " + "third_party\\abseil-cpp\\absl\\strings\\internal\\str_format\\arg.cc " + "third_party\\abseil-cpp\\absl\\strings\\internal\\str_format\\bind.cc " + "third_party\\abseil-cpp\\absl\\strings\\internal\\str_format\\extension.cc " + "third_party\\abseil-cpp\\absl\\strings\\internal\\str_format\\float_conversion.cc " + "third_party\\abseil-cpp\\absl\\strings\\internal\\str_format\\output.cc " + "third_party\\abseil-cpp\\absl\\strings\\internal\\str_format\\parser.cc " + "third_party\\abseil-cpp\\absl\\strings\\internal\\utf8.cc " + "third_party\\abseil-cpp\\absl\\strings\\match.cc " + "third_party\\abseil-cpp\\absl\\strings\\numbers.cc " + "third_party\\abseil-cpp\\absl\\strings\\str_cat.cc " + "third_party\\abseil-cpp\\absl\\strings\\str_replace.cc " + "third_party\\abseil-cpp\\absl\\strings\\str_split.cc " + "third_party\\abseil-cpp\\absl\\strings\\string_view.cc " + "third_party\\abseil-cpp\\absl\\strings\\substitute.cc " + "third_party\\abseil-cpp\\absl\\time\\civil_time.cc " + "third_party\\abseil-cpp\\absl\\time\\clock.cc " + "third_party\\abseil-cpp\\absl\\time\\duration.cc " + "third_party\\abseil-cpp\\absl\\time\\format.cc " + "third_party\\abseil-cpp\\absl\\time\\internal\\cctz\\src\\civil_time_detail.cc " + "third_party\\abseil-cpp\\absl\\time\\internal\\cctz\\src\\time_zone_fixed.cc " + "third_party\\abseil-cpp\\absl\\time\\internal\\cctz\\src\\time_zone_format.cc " + "third_party\\abseil-cpp\\absl\\time\\internal\\cctz\\src\\time_zone_if.cc " + "third_party\\abseil-cpp\\absl\\time\\internal\\cctz\\src\\time_zone_impl.cc " + "third_party\\abseil-cpp\\absl\\time\\internal\\cctz\\src\\time_zone_info.cc " + "third_party\\abseil-cpp\\absl\\time\\internal\\cctz\\src\\time_zone_libc.cc " + "third_party\\abseil-cpp\\absl\\time\\internal\\cctz\\src\\time_zone_lookup.cc " + "third_party\\abseil-cpp\\absl\\time\\internal\\cctz\\src\\time_zone_posix.cc " + "third_party\\abseil-cpp\\absl\\time\\internal\\cctz\\src\\zone_info_source.cc " + "third_party\\abseil-cpp\\absl\\time\\time.cc " + "third_party\\abseil-cpp\\absl\\types\\bad_optional_access.cc " + "third_party\\address_sorting\\address_sorting.c " + "third_party\\address_sorting\\address_sorting_posix.c " + "third_party\\address_sorting\\address_sorting_windows.c " + "third_party\\boringssl-with-bazel\\err_data.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_bitstr.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_bool.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_d2i_fp.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_dup.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_enum.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_gentm.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_i2d_fp.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_int.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_mbstr.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_object.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_octet.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_print.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_strnid.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_time.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_type.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_utctm.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_utf8.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\asn1_lib.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\asn1_par.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\asn_pack.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\f_enum.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\f_int.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\f_string.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\tasn_dec.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\tasn_enc.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\tasn_fre.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\tasn_new.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\tasn_typ.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\tasn_utl.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\time_support.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\base64\\base64.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\bio\\bio.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\bio\\bio_mem.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\bio\\connect.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\bio\\fd.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\bio\\file.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\bio\\hexdump.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\bio\\pair.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\bio\\printf.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\bio\\socket.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\bio\\socket_helper.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\bn_extra\\bn_asn1.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\bn_extra\\convert.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\buf\\buf.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\bytestring\\asn1_compat.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\bytestring\\ber.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\bytestring\\cbb.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\bytestring\\cbs.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\bytestring\\unicode.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\chacha\\chacha.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\cipher_extra.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\derive_key.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\e_aesccm.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\e_aesctrhmac.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\e_aesgcmsiv.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\e_chacha20poly1305.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\e_null.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\e_rc2.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\e_rc4.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\e_tls.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\tls_cbc.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\cmac\\cmac.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\conf\\conf.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\cpu-aarch64-fuchsia.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\cpu-aarch64-linux.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\cpu-arm-linux.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\cpu-arm.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\cpu-intel.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\cpu-ppc64le.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\crypto.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\curve25519\\curve25519.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\curve25519\\spake25519.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\dh\\check.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\dh\\dh.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\dh\\dh_asn1.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\dh\\params.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\digest_extra\\digest_extra.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\dsa\\dsa.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\dsa\\dsa_asn1.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\ec_extra\\ec_asn1.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\ec_extra\\ec_derive.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\ec_extra\\hash_to_curve.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\ecdh_extra\\ecdh_extra.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\ecdsa_extra\\ecdsa_asn1.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\engine\\engine.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\err\\err.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\evp\\digestsign.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\evp\\evp.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\evp\\evp_asn1.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\evp\\evp_ctx.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_dsa_asn1.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_ec.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_ec_asn1.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_ed25519.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_ed25519_asn1.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_rsa.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_rsa_asn1.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_x25519.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_x25519_asn1.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\evp\\pbkdf.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\evp\\print.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\evp\\scrypt.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\evp\\sign.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\ex_data.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\fipsmodule\\bcm.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\fipsmodule\\fips_shared_support.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\fipsmodule\\is_fips.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\hkdf\\hkdf.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\hrss\\hrss.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\lhash\\lhash.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\mem.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\obj\\obj.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\obj\\obj_xref.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\pem\\pem_all.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\pem\\pem_info.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\pem\\pem_lib.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\pem\\pem_oth.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\pem\\pem_pk8.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\pem\\pem_pkey.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\pem\\pem_x509.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\pem\\pem_xaux.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\pkcs7\\pkcs7.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\pkcs7\\pkcs7_x509.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\pkcs8\\p5_pbev2.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\pkcs8\\pkcs8.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\pkcs8\\pkcs8_x509.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\poly1305\\poly1305.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\poly1305\\poly1305_arm.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\poly1305\\poly1305_vec.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\pool\\pool.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\rand_extra\\deterministic.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\rand_extra\\forkunsafe.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\rand_extra\\fuchsia.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\rand_extra\\rand_extra.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\rand_extra\\windows.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\rc4\\rc4.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\refcount_c11.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\refcount_lock.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\rsa_extra\\rsa_asn1.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\rsa_extra\\rsa_print.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\siphash\\siphash.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\stack\\stack.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\thread.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\thread_none.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\thread_pthread.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\thread_win.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\trust_token\\pmbtoken.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\trust_token\\trust_token.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\a_digest.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\a_sign.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\a_strex.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\a_verify.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\algorithm.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\asn1_gen.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\by_dir.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\by_file.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\i2d_pr.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\rsa_pss.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\t_crl.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\t_req.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\t_x509.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\t_x509a.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_att.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_cmp.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_d2.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_def.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_ext.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_lu.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_obj.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_r2x.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_req.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_set.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_trs.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_txt.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_v3.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_vfy.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_vpm.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509cset.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509name.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509rset.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509spki.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_algor.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_all.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_attrib.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_crl.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_exten.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_info.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_name.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_pkey.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_pubkey.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_req.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_sig.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_spki.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_val.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_x509.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_x509a.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\pcy_cache.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\pcy_data.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\pcy_lib.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\pcy_map.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\pcy_node.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\pcy_tree.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_akey.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_akeya.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_alt.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_bcons.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_bitst.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_conf.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_cpols.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_crld.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_enum.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_extku.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_genn.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_ia5.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_info.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_int.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_lib.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_ncons.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_ocsp.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_pci.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_pcia.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_pcons.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_pku.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_pmaps.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_prn.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_purp.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_skey.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_sxnet.c " + "third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_utl.c " + "third_party\\boringssl-with-bazel\\src\\ssl\\bio_ssl.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\d1_both.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\d1_lib.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\d1_pkt.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\d1_srtp.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\dtls_method.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\dtls_record.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\handoff.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\handshake.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\handshake_client.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\handshake_server.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\s3_both.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\s3_lib.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\s3_pkt.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\ssl_aead_ctx.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\ssl_asn1.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\ssl_buffer.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\ssl_cert.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\ssl_cipher.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\ssl_file.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\ssl_key_share.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\ssl_lib.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\ssl_privkey.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\ssl_session.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\ssl_stat.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\ssl_transcript.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\ssl_versions.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\ssl_x509.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\t1_enc.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\t1_lib.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\tls13_both.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\tls13_client.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\tls13_enc.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\tls13_server.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\tls_method.cc " + "third_party\\boringssl-with-bazel\\src\\ssl\\tls_record.cc " + "third_party\\upb\\upb\\decode.c " + "third_party\\upb\\upb\\encode.c " + "third_party\\upb\\upb\\msg.c " + "third_party\\upb\\upb\\port.c " + "third_party\\upb\\upb\\table.c " + "third_party\\upb\\upb\\upb.c " + "third_party\\zlib\\adler32.c " + "third_party\\zlib\\compress.c " + "third_party\\zlib\\crc32.c " + "third_party\\zlib\\deflate.c " + "third_party\\zlib\\gzclose.c " + "third_party\\zlib\\gzlib.c " + "third_party\\zlib\\gzread.c " + "third_party\\zlib\\gzwrite.c " + "third_party\\zlib\\infback.c " + "third_party\\zlib\\inffast.c " + "third_party\\zlib\\inflate.c " + "third_party\\zlib\\inftrees.c " + "third_party\\zlib\\trees.c " + "third_party\\zlib\\uncompr.c " + "third_party\\zlib\\zutil.c " + "" , null, "/DOPENSSL_NO_ASM /D_GNU_SOURCE /DWIN32_LEAN_AND_MEAN "+ "/D_HAS_EXCEPTIONS=0 /DNOMINMAX /DGRPC_ARES=0 /D_WIN32_WINNT=0x600 "+ "/I"+configure_module_dirname+" "+ "/I"+configure_module_dirname+"\\include "+ "/I"+configure_module_dirname+"\\src\\core\\ext\\upb-generated "+ "/I"+configure_module_dirname+"\\src\\php\\ext\\grpc "+ "/I"+configure_module_dirname+"\\third_party\\abseil-cpp "+ "/I"+configure_module_dirname+"\\third_party\\address_sorting\\include "+ "/I"+configure_module_dirname+"\\third_party\\boringssl-with-bazel\\src\\include "+ "/I"+configure_module_dirname+"\\third_party\\upb "+ "/I"+configure_module_dirname+"\\third_party\\zlib "); base_dir = get_define('BUILD_DIR'); FSO.CreateFolder(base_dir+"\\ext"); FSO.CreateFolder(base_dir+"\\ext\\grpc"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\census"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\health"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\lb_policy"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\lb_policy\\pick_first"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\lb_policy\\priority"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\lb_policy\\round_robin"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\lb_policy\\weighted_target"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\lb_policy\\xds"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\resolver"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\resolver\\dns"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\resolver\\dns\\c_ares"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\resolver\\dns\\native"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\resolver\\fake"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\resolver\\sockaddr"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\resolver\\xds"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_channel\\xds"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\client_idle"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\deadline"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\http"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\http\\client"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\http\\message_compress"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\http\\server"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\max_age"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\message_size"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters\\workarounds"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\transport"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\transport\\chttp2"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\transport\\chttp2\\alpn"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\transport\\chttp2\\client"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\transport\\chttp2\\client\\insecure"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\transport\\chttp2\\client\\secure"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\transport\\chttp2\\server"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\transport\\chttp2\\server\\insecure"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\transport\\chttp2\\server\\secure"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\transport\\chttp2\\transport"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\transport\\inproc"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\annotations"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api\\v2"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api\\v2\\auth"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api\\v2\\cluster"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api\\v2\\endpoint"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api\\v2\\listener"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api\\v2\\route"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\filter"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\filter\\accesslog"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\filter\\accesslog\\v2"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\filter\\network"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\filter\\network\\http_connection_manager"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\filter\\network\\http_connection_manager\\v2"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\listener"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\listener\\v2"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\trace"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\trace\\v2"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\discovery"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\discovery\\v2"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\load_stats"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\load_stats\\v2"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\type"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\type\\matcher"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\type\\metadata"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\type\\metadata\\v2"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\type\\tracing"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\type\\tracing\\v2"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\gogoproto"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\google"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\google\\api"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\google\\protobuf"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\google\\rpc"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\src"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\src\\proto"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\src\\proto\\grpc"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\src\\proto\\grpc\\gcp"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\src\\proto\\grpc\\health"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\src\\proto\\grpc\\health\\v1"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\src\\proto\\grpc\\lb"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\src\\proto\\grpc\\lb\\v1"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\udpa"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\udpa\\annotations"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\udpa\\data"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\udpa\\data\\orca"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\udpa\\data\\orca\\v1"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\validate"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\avl"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\backoff"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\channel"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\compression"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\debug"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\gpr"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\gprpp"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\http"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\iomgr"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\iomgr\\executor"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\iomgr\\poller"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\json"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\profiling"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\security"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\security\\context"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\security\\credentials"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\security\\credentials\\alts"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\security\\credentials\\composite"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\security\\credentials\\fake"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\security\\credentials\\google_default"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\security\\credentials\\iam"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\security\\credentials\\jwt"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\security\\credentials\\local"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\security\\credentials\\oauth2"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\security\\credentials\\plugin"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\security\\credentials\\ssl"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\security\\credentials\\tls"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\security\\security_connector"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\security\\security_connector\\alts"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\security\\security_connector\\fake"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\security\\security_connector\\local"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\security\\security_connector\\ssl"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\security\\security_connector\\tls"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\security\\transport"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\security\\util"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\slice"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\surface"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\transport"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\uri"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\plugin_registry"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\tsi"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\tsi\\alts"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\tsi\\alts\\crypt"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\tsi\\alts\\frame_protector"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\tsi\\alts\\handshaker"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\tsi\\alts\\zero_copy_frame_protector"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\tsi\\ssl"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\tsi\\ssl\\session_cache"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\php"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\php\\ext"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\php\\ext\\grpc"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\base"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\base\\internal"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\numeric"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\strings"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\strings\\internal"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\strings\\internal\\str_format"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\time"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\time\\internal"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\time\\internal\\cctz"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\time\\internal\\cctz\\src"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\types"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\address_sorting"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\asn1"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\base64"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\bio"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\bn_extra"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\buf"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\bytestring"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\chacha"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\cmac"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\conf"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\curve25519"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\dh"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\digest_extra"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\dsa"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\ec_extra"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\ecdh_extra"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\ecdsa_extra"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\engine"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\err"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\evp"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\fipsmodule"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\hkdf"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\hrss"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\lhash"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\obj"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\pem"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\pkcs7"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\pkcs8"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\poly1305"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\pool"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\rand_extra"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\rc4"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\rsa_extra"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\siphash"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\stack"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\trust_token"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\x509"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\x509v3"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\ssl"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\upb"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\upb\\upb"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\zlib"); _build_dirs = new Array(); for (i = 0; i < build_dirs.length; i++) { if (build_dirs[i].indexOf('grpc') == -1) { _build_dirs[_build_dirs.length] = build_dirs[i]; } } build_dirs = _build_dirs; } grpc-1.30.2/doc/000077500000000000000000000000001370425124100132745ustar00rootroot00000000000000grpc-1.30.2/doc/.gitignore000066400000000000000000000000141370425124100152570ustar00rootroot00000000000000build/ src/ grpc-1.30.2/doc/PROTOCOL-HTTP2.md000066400000000000000000000362701370425124100157260ustar00rootroot00000000000000# gRPC over HTTP2 ## Introduction This document serves as a detailed description for an implementation of gRPC carried over HTTP2 framing. It assumes familiarity with the HTTP2 specification. ## Protocol Production rules are using ABNF syntax. ### Outline The following is the general sequence of message atoms in a GRPC request & response message stream * Request → Request-Headers \*Length-Prefixed-Message EOS * Response → (Response-Headers \*Length-Prefixed-Message Trailers) / Trailers-Only ### Requests * Request → Request-Headers \*Length-Prefixed-Message EOS Request-Headers are delivered as HTTP2 headers in HEADERS + CONTINUATION frames. * **Request-Headers** → Call-Definition \*Custom-Metadata * **Call-Definition** → Method Scheme Path TE [Authority] [Timeout] Content-Type [Message-Type] [Message-Encoding] [Message-Accept-Encoding] [User-Agent] * **Method** → ":method POST" * **Scheme** → ":scheme " ("http" / "https") * **Path** → ":path" "/" Service-Name "/" {_method name_} # But see note below. * **Service-Name** → {_IDL-specific service name_} * **Authority** → ":authority" {_virtual host name of authority_} * **TE** → "te" "trailers" # Used to detect incompatible proxies * **Timeout** → "grpc-timeout" TimeoutValue TimeoutUnit * **TimeoutValue** → {_positive integer as ASCII string of at most 8 digits_} * **TimeoutUnit** → Hour / Minute / Second / Millisecond / Microsecond / Nanosecond * **Hour** → "H" * **Minute** → "M" * **Second** → "S" * **Millisecond** → "m" * **Microsecond** → "u" * **Nanosecond** → "n" * **Content-Type** → "content-type" "application/grpc" [("+proto" / "+json" / {_custom_})] * **Content-Coding** → "identity" / "gzip" / "deflate" / "snappy" / {_custom_} * **Message-Encoding** → "grpc-encoding" Content-Coding * **Message-Accept-Encoding** → "grpc-accept-encoding" Content-Coding \*("," Content-Coding) * **User-Agent** → "user-agent" {_structured user-agent string_} * **Message-Type** → "grpc-message-type" {_type name for message schema_} * **Custom-Metadata** → Binary-Header / ASCII-Header * **Binary-Header** → {Header-Name "-bin" } {_base64 encoded value_} * **ASCII-Header** → Header-Name ASCII-Value * **Header-Name** → 1\*( %x30-39 / %x61-7A / "\_" / "-" / ".") ; 0-9 a-z \_ - . * **ASCII-Value** → 1\*( %x20-%x7E ) ; space and printable ASCII HTTP2 requires that reserved headers, ones starting with ":" appear before all other headers. Additionally implementations should send **Timeout** immediately after the reserved headers and they should send the **Call-Definition** headers before sending **Custom-Metadata**. **Path** is case-sensitive. Some gRPC implementations may allow the **Path** format shown above to be overridden, but this functionality is strongly discouraged. gRPC does not go out of its way to break users that are using this kind of override, but we do not actively support it, and some functionality (e.g., service config support) will not work when the path is not of the form shown above. If **Timeout** is omitted a server should assume an infinite timeout. Client implementations are free to send a default minimum timeout based on their deployment requirements. If **Content-Type** does not begin with "application/grpc", gRPC servers SHOULD respond with HTTP status of 415 (Unsupported Media Type). This will prevent other HTTP/2 clients from interpreting a gRPC error response, which uses status 200 (OK), as successful. **Custom-Metadata** is an arbitrary set of key-value pairs defined by the application layer. Header names starting with "grpc-" but not listed here are reserved for future GRPC use and should not be used by applications as **Custom-Metadata**. Note that HTTP2 does not allow arbitrary octet sequences for header values so binary header values must be encoded using Base64 as per https://tools.ietf.org/html/rfc4648#section-4. Implementations MUST accept padded and un-padded values and should emit un-padded values. Applications define binary headers by having their names end with "-bin". Runtime libraries use this suffix to detect binary headers and properly apply base64 encoding & decoding as headers are sent and received. **Custom-Metadata** header order is not guaranteed to be preserved except for values with duplicate header names. Duplicate header names may have their values joined with "," as the delimiter and be considered semantically equivalent. Implementations must split **Binary-Header**s on "," before decoding the Base64-encoded values. **ASCII-Value** should not have leading or trailing whitespace. If it contains leading or trailing whitespace, it may be stripped. The **ASCII-Value** character range defined is more strict than HTTP. Implementations must not error due to receiving an invalid **ASCII-Value** that's a valid **field-value** in HTTP, but the precise behavior is not strictly defined: they may throw the value away or accept the value. If accepted, care must be taken to make sure that the application is permitted to echo the value back as metadata. For example, if the metadata is provided to the application as a list in a request, the application should not trigger an error by providing that same list as the metadata in the response. Servers may limit the size of **Request-Headers**, with a default of 8 KiB suggested. Implementations are encouraged to compute total header size like HTTP/2's `SETTINGS_MAX_HEADER_LIST_SIZE`: the sum of all header fields, for each field the sum of the uncompressed field name and value lengths plus 32, with binary values' lengths being post-Base64. The repeated sequence of **Length-Prefixed-Message** items is delivered in DATA frames * **Length-Prefixed-Message** → Compressed-Flag Message-Length Message * **Compressed-Flag** → 0 / 1 # encoded as 1 byte unsigned integer * **Message-Length** → {_length of Message_} # encoded as 4 byte unsigned integer (big endian) * **Message** → \*{binary octet} A **Compressed-Flag** value of 1 indicates that the binary octet sequence of **Message** is compressed using the mechanism declared by the **Message-Encoding** header. A value of 0 indicates that no encoding of **Message** bytes has occurred. Compression contexts are NOT maintained over message boundaries, implementations must create a new context for each message in the stream. If the **Message-Encoding** header is omitted then the **Compressed-Flag** must be 0. For requests, **EOS** (end-of-stream) is indicated by the presence of the END_STREAM flag on the last received DATA frame. In scenarios where the **Request** stream needs to be closed but no data remains to be sent implementations MUST send an empty DATA frame with this flag set. ### Responses * **Response** → (Response-Headers \*Length-Prefixed-Message Trailers) / Trailers-Only * **Response-Headers** → HTTP-Status [Message-Encoding] [Message-Accept-Encoding] Content-Type \*Custom-Metadata * **Trailers-Only** → HTTP-Status Content-Type Trailers * **Trailers** → Status [Status-Message] \*Custom-Metadata * **HTTP-Status** → ":status 200" * **Status** → "grpc-status" 1\*DIGIT ; 0-9 * **Status-Message** → "grpc-message" Percent-Encoded * **Percent-Encoded** → 1\*(Percent-Byte-Unencoded / Percent-Byte-Encoded) * **Percent-Byte-Unencoded** → 1\*( %x20-%x24 / %x26-%x7E ) ; space and VCHAR, except % * **Percent-Byte-Encoded** → "%" 2HEXDIGIT ; 0-9 A-F **Response-Headers** & **Trailers-Only** are each delivered in a single HTTP2 HEADERS frame block. Most responses are expected to have both headers and trailers but **Trailers-Only** is permitted for calls that produce an immediate error. Status must be sent in **Trailers** even if the status code is OK. For responses end-of-stream is indicated by the presence of the END_STREAM flag on the last received HEADERS frame that carries **Trailers**. Implementations should expect broken deployments to send non-200 HTTP status codes in responses as well as a variety of non-GRPC content-types and to omit **Status** & **Status-Message**. Implementations must synthesize a **Status** & **Status-Message** to propagate to the application layer when this occurs. Clients may limit the size of **Response-Headers**, **Trailers**, and **Trailers-Only**, with a default of 8 KiB each suggested. The value portion of **Status** is a decimal-encoded integer as an ASCII string, without any leading zeros. The value portion of **Status-Message** is conceptually a Unicode string description of the error, physically encoded as UTF-8 followed by percent-encoding. Percent-encoding is specified in [RFC 3986 §2.1](https://tools.ietf.org/html/rfc3986#section-2.1), although the form used here has different restricted characters. When decoding invalid values, implementations MUST NOT error or throw away the message. At worst, the implementation can abort decoding the status message altogether such that the user would received the raw percent-encoded form. Alternatively, the implementation can decode valid portions while leaving broken %-encodings as-is or replacing them with a replacement character (e.g., '?' or the Unicode replacement character). #### Example Sample unary-call showing HTTP2 framing sequence **Request** ``` HEADERS (flags = END_HEADERS) :method = POST :scheme = http :path = /google.pubsub.v2.PublisherService/CreateTopic :authority = pubsub.googleapis.com grpc-timeout = 1S content-type = application/grpc+proto grpc-encoding = gzip authorization = Bearer y235.wef315yfh138vh31hv93hv8h3v DATA (flags = END_STREAM) ``` **Response** ``` HEADERS (flags = END_HEADERS) :status = 200 grpc-encoding = gzip content-type = application/grpc+proto DATA HEADERS (flags = END_STREAM, END_HEADERS) grpc-status = 0 # OK trace-proto-bin = jher831yy13JHy3hc ``` #### User Agents While the protocol does not require a user-agent to function it is recommended that clients provide a structured user-agent string that provides a basic description of the calling library, version & platform to facilitate issue diagnosis in heterogeneous environments. The following structure is recommended to library developers ``` User-Agent → "grpc-" Language ?("-" Variant) "/" Version ?( " (" *(AdditionalProperty ";") ")" ) ``` E.g. ``` grpc-java/1.2.3 grpc-ruby/1.2.3 grpc-ruby-jruby/1.3.4 grpc-java-android/0.9.1 (gingerbread/1.2.4; nexus5; tmobile) ``` #### Idempotency and Retries Unless explicitly defined to be, gRPC Calls are not assumed to be idempotent. Specifically: * Calls that cannot be proven to have started will not be retried. * There is no mechanism for duplicate suppression as it is not necessary. * Calls that are marked as idempotent may be sent multiple times. #### HTTP2 Transport Mapping ##### Stream Identification All GRPC calls need to specify an internal ID. We will use HTTP2 stream-ids as call identifiers in this scheme. NOTE: These ids are contextual to an open HTTP2 session and will not be unique within a given process that is handling more than one HTTP2 session nor can they be used as GUIDs. ##### Data Frames DATA frame boundaries have no relation to **Length-Prefixed-Message** boundaries and implementations should make no assumptions about their alignment. ##### Errors When an application or runtime error occurs during an RPC a **Status** and **Status-Message** are delivered in **Trailers**. In some cases it is possible that the framing of the message stream has become corrupt and the RPC runtime will choose to use an **RST_STREAM** frame to indicate this state to its peer. RPC runtime implementations should interpret RST_STREAM as immediate full-closure of the stream and should propagate an error up to the calling application layer. The following mapping from RST_STREAM error codes to GRPC error codes is applied. HTTP2 Code|GRPC Code ----------|----------- NO_ERROR(0)|INTERNAL - An explicit GRPC status of OK should have been sent but this might be used to aggressively lameduck in some scenarios. PROTOCOL_ERROR(1)|INTERNAL INTERNAL_ERROR(2)|INTERNAL FLOW_CONTROL_ERROR(3)|INTERNAL SETTINGS_TIMEOUT(4)|INTERNAL STREAM_CLOSED|No mapping as there is no open stream to propagate to. Implementations should log. FRAME_SIZE_ERROR|INTERNAL REFUSED_STREAM|UNAVAILABLE - Indicates that no processing occurred and the request can be retried, possibly elsewhere. CANCEL(8)|Mapped to call cancellation when sent by a client.Mapped to CANCELLED when sent by a server. Note that servers should only use this mechanism when they need to cancel a call but the payload byte sequence is incomplete. COMPRESSION_ERROR|INTERNAL CONNECT_ERROR|INTERNAL ENHANCE_YOUR_CALM|RESOURCE_EXHAUSTED ...with additional error detail provided by runtime to indicate that the exhausted resource is bandwidth. INADEQUATE_SECURITY| PERMISSION_DENIED … with additional detail indicating that permission was denied as protocol is not secure enough for call. ##### Security The HTTP2 specification mandates the use of TLS 1.2 or higher when TLS is used with HTTP2. It also places some additional constraints on the allowed ciphers in deployments to avoid known-problems as well as requiring SNI support. It is also expected that HTTP2 will be used in conjunction with proprietary transport security mechanisms about which the specification can make no meaningful recommendations. ##### Connection Management ###### GOAWAY Frame Sent by servers to clients to indicate that they will no longer accept any new streams on the associated connections. This frame includes the id of the last successfully accepted stream by the server. Clients should consider any stream initiated after the last successfully accepted stream as UNAVAILABLE and retry the call elsewhere. Clients are free to continue working with the already accepted streams until they complete or the connection is terminated. Servers should send GOAWAY before terminating a connection to reliably inform clients which work has been accepted by the server and is being executed. ###### PING Frame Both clients and servers can send a PING frame that the peer must respond to by precisely echoing what they received. This is used to assert that the connection is still live as well as providing a means to estimate end-to-end latency. If a server initiated PING does not receive a response within the deadline expected by the runtime all outstanding calls on the server will be closed with a CANCELLED status. An expired client initiated PING will cause all calls to be closed with an UNAVAILABLE status. Note that the frequency of PINGs is highly dependent on the network environment, implementations are free to adjust PING frequency based on network and application requirements. ###### Connection failure If a detectable connection failure occurs on the client all calls will be closed with an UNAVAILABLE status. For servers open calls will be closed with a CANCELLED status. ### Appendix A - GRPC for Protobuf The service interfaces declared by protobuf are easily mapped onto GRPC by code generation extensions to protoc. The following defines the mapping to be used. * **Service-Name** → ?( {_proto package name_} "." ) {_service name_} * **Message-Type** → {_fully qualified proto message name_} * **Content-Type** → "application/grpc+proto" grpc-1.30.2/doc/PROTOCOL-WEB.md000066400000000000000000000114541370425124100154770ustar00rootroot00000000000000# gRPC Web gRPC-Web provides a JS client library that supports the same API as gRPC-Node to access a gRPC service. Due to browser limitation, the Web client library implements a different protocol than the [native gRPC protocol](PROTOCOL-HTTP2.md). This protocol is designed to make it easy for a proxy to translate between the protocols as this is the most likely deployment model. This document lists the differences between the two protocols. To help tracking future revisions, this document describes a delta with the protocol details specified in the [native gRPC protocol](PROTOCOL-HTTP2.md). # Design goals For the gRPC-Web protocol, we have decided on the following design goals: * adopt the same framing as “application/grpc” whenever possible * decouple from HTTP/2 framing which is not, and will never, be directly exposed by browsers * support text streams (e.g. base64) in order to provide cross-browser support (e.g. IE-10) While the new protocol will be published/reviewed publicly, we also intend to keep the protocol as an internal detail to gRPC-Web. More specifically, we expect the protocol to * evolve over time, mainly to optimize for browser clients or support web-specific features such as CORS, XSRF * become optional (in 1-2 years) when browsers are able to speak the native gRPC protocol via the new [whatwg streams API](https://github.com/whatwg/streams) # Protocol differences vs [gRPC over HTTP2](PROTOCOL-HTTP2.md) Content-Type 1. application/grpc-web * e.g. application/grpc-web+[proto, json, thrift] * the sender should always specify the message format, e.g. +proto, +json * the receiver should assume the default is "+proto" when the message format is missing in Content-Type (as "application/grpc-web") 2. application/grpc-web-text * text-encoded streams of “application/grpc-web” * e.g. application/grpc-web-text+[proto, thrift] --- HTTP wire protocols 1. support any HTTP/*, with no dependency on HTTP/2 specific framing 2. use lower-case header/trailer names 3. use EOF (end of body) to close the stream --- HTTP/2 related behavior (specified in [gRPC over HTTP2](PROTOCOL-HTTP2.md)) 1. stream-id is not supported or used 2. go-away is not supported or used --- Message framing (vs. [http2-transport-mapping](PROTOCOL-HTTP2.md#http2-transport-mapping)) 1. Response status encoded as part of the response body * Key-value pairs encoded as a HTTP/1 headers block (without the terminating newline), per https://tools.ietf.org/html/rfc7230#section-3.2 ``` key1: foo\r\n key2: bar\r\n ``` 2. 8th (MSB) bit of the 1st gRPC frame byte * 0: data * 1: trailers ``` 10000000b: an uncompressed trailer (as part of the body) 10000001b: a compressed trailer ``` 3. Trailers must be the last message of the response, as enforced by the implementation 4. Trailers-only responses: no change to the gRPC protocol spec. Trailers may be sent together with response headers, with no message in the body. --- User Agent * Do NOT use User-Agent header (which is to be set by browsers, by default) * Use X-User-Agent: grpc-web-javascript/0.1 (follow the same format as specified in [gRPC over HTTP2](PROTOCOL-HTTP2.md)) --- Text-encoded (response) streams 1. The client library should indicate to the server via the "Accept" header that the response stream needs to be text encoded e.g. when XHR is used or due to security policies with XHR * Accept: application/grpc-web-text 2. The default text encoding is base64 * Note that “Content-Transfer-Encoding: base64” should not be used. Due to in-stream base64 padding when delimiting messages, the entire response body is not necessarily a valid base64-encoded entity * While the server runtime will always base64-encode and flush gRPC messages atomically the client library should not assume base64 padding always happens at the boundary of message frames. That is, the implementation may send base64-encoded "chunks" with potential padding whenever the runtime needs to flush a byte buffer. # Other features Retries, caching * Will spec out the support after their respective gRPC spec extensions are finalized * Safe retries: PUT * Caching: header encoded request and/or a web specific spec --- Keep-alive * HTTP/2 PING is not supported or used * Will not support send-beacon (GET) --- Bidi-streaming, with flow-control * Pending on [whatwg fetch/streams](https://github.com/whatwg/fetch) to be finalized and implemented in modern browsers * gRPC-Web client will support the native gRPC protocol with modern browsers --- Versioning * Special headers may be introduced to support features that may break compatibility. --- Browser-specific features * For features that are unique to browser or HTML clients, check the [spec doc](https://github.com/grpc/grpc-web/blob/master/BROWSER-FEATURES.md) published in the grpc/grpc-web repo. grpc-1.30.2/doc/binary-logging.md000066400000000000000000000052241370425124100165310ustar00rootroot00000000000000# Binary Logging ## Format The log format is described in [this proto file](/src/proto/grpc/binary_log/v1alpha/log.proto). It is intended that multiple parts of the call will be logged in separate files, and then correlated by analysis tools using the rpc\_id. ## API The binary logger will be a separate library from gRPC, in each language that we support. The user will need to explicitly call into the library to generate logs. The library will provide the ability to log sending or receiving, as relevant, the following on both the client and the server: - Initial metadata - Messages - Status with trailing metadata from the server - Additional key/value pairs that are associated with a call but not sent over the wire The following is an example of what such an API could look like in C++: ```c++ // The context provides the method_name, deadline, peer, and metadata contents. // direction = CLIENT_SEND LogRequestHeaders(ClientContext context); // direction = SERVER_RECV LogRequestHeaders(ServerContext context); // The context provides the metadata contents // direction = CLIENT_RECV LogResponseHeaders(ClientContext context); // direction = SERVER_SEND LogResponseHeaders(ServerContext context); // The context provides the metadata contents // direction = CLIENT_RECV LogStatus(ClientContext context, grpc_status_code code, string details); // direction = SERVER_SEND LogStatus(ServerContext context, grpc_status_code code, string details); // The context provides the user data contents // direction = CLIENT_SEND LogUserData(ClientContext context); // direction = SERVER_SEND LogUserData(ServerContext context); // direction = CLIENT_SEND LogRequestMessage(ClientContext context, uint32_t length, T message); // direction = SERVER_RECV LogRequestMessage(ServerContext context, uint32_t length, T message); // direction = CLIENT_RECV LogResponseMessage(ClientContext context, uint32_t length, T message); // direction = SERVER_SEND LogResponseMessage(ServerContext context, uint32_t length, T message); ``` In all of those cases, the `rpc_id` is provided by the context, and each combination of method and context argument type implies a single direction, as noted in the comments. For the message log functions, the `length` argument indicates the length of the complete message, and the `message` argument may be only part of the complete message, stripped of sensitive material and/or shortened for efficiency. ## Language differences In other languages, more or less data will need to be passed explicitly as separate arguments. In some languages, for example, the metadata will be separate from the context-like object and will need to be passed as a separate argument. grpc-1.30.2/doc/c-style-guide.md000066400000000000000000000055171370425124100163010ustar00rootroot00000000000000GRPC C STYLE GUIDE ===================== Background ---------- Here we document style rules for C usage in the gRPC Core library. General ------- - Layout rules are defined by clang-format, and all code should be passed through clang-format. A (docker-based) script to do so is included in [tools/distrib/clang\_format\_code.sh](../tools/distrib/clang_format_code.sh). Header Files ------------ - Public header files (those in the include/grpc tree) should compile as pedantic C89. - Public header files should be includable from C++ programs. That is, they should include the following: ```c #ifdef __cplusplus extern "C" { # endif /* ... body of file ... */ #ifdef __cplusplus } # endif ``` - Header files should be self-contained and end in .h. - All header files should have a `#define` guard to prevent multiple inclusion. To guarantee uniqueness they should be based on the file's path. For public headers: `include/grpc/grpc.h` → `GRPC_GRPC_H` For private headers: `src/core/lib/channel/channel_stack.h` → `GRPC_CORE_LIB_CHANNEL_CHANNEL_STACK_H` Variable Initialization ----------------------- When declaring a (non-static) pointer variable, always initialize it to `NULL`. Even in the case of static pointer variables, it's recommended to explicitly initialize them to `NULL`. C99 Features ------------ - Variable sized arrays are not allowed. - Do not use the 'inline' keyword. - Flexible array members are allowed (https://en.wikipedia.org/wiki/Flexible_array_member). Comments -------- Within public header files, only `/* */` comments are allowed. Within implementation files and private headers, either single line `//` or multi line `/* */` comments are allowed. Only one comment style per file is allowed however (i.e. if single line comments are used anywhere within a file, ALL comments within that file must be single line comments). Symbol Names ------------ - Non-static functions must be prefixed by `grpc_` - Static functions must *not* be prefixed by `grpc_` - Typenames of `struct`s , `union`s, and `enum`s must be prefixed by `grpc_` if they are declared in a header file. They must not be prefixed by `grpc_` if they are declared in a source file. - Enumeration values and `#define` names must be uppercase. All other values must be lowercase. - Enumeration values or `#define` names defined in a header file must be prefixed with `GRPC_` (except for `#define` macros that are being used to substitute functions; those should follow the general rules for functions). Enumeration values or `#define`s defined in source files must not be prefixed with `GRPC_`. - Multiple word identifiers use underscore as a delimiter, *never* camel case. E.g. `variable_name`. Functions ---------- - The use of [`atexit()`](http://man7.org/linux/man-pages/man3/atexit.3.html) is in forbidden in libgrpc. grpc-1.30.2/doc/command_line_tool.md000066400000000000000000000137341370425124100173100ustar00rootroot00000000000000# gRPC command line tool ## Overview This document describes the command line tool that comes with gRPC repository. It is desirable to have command line tools written in other languages roughly follow the same syntax and flags. At this point, the tool needs to be built from source, and it should be moved out to grpc-tools repository as a stand alone application once it is mature enough. ## Core functionality The command line tool can do the following things: - Send unary rpc. - Attach metadata and display received metadata. - Handle common authentication to server. - Infer request/response types from server reflection result. - Find the request/response types from a given proto file. - Read proto request in text form. - Read request in wire form (for protobuf messages, this means serialized binary form). - Display proto response in text form. - Write response in wire form to a file. The command line tool should support the following things: - List server services and methods through server reflection. - Fine-grained auth control (such as, use this oauth token to talk to the server). - Send streaming rpc. ## Code location To use the tool, you need to get the grpc repository and make sure your system has the prerequisites for building grpc from source, given in the [installation instructions](../BUILDING.md). In order to build the grpc command line tool from a fresh clone of the grpc repository, you need to run the following command to update submodules: ``` git submodule update --init ``` You also need to have the gflags library installed on your system. gflags can be installed with the following command: Linux: ``` sudo apt-get install libgflags-dev ``` Mac systems with Homebrew: ``` brew install gflags ``` Once the prerequisites are satisfied, you can build with cmake: ``` $ mkdir -p cmake/build $ cd cmake/build $ cmake -DgRPC_BUILD_TESTS=ON ../.. $ make grpc_cli ``` The main file can be found at https://github.com/grpc/grpc/blob/master/test/cpp/util/grpc_cli.cc ## Prerequisites Most `grpc_cli` commands need the server to support server reflection. See guides for [Java](https://github.com/grpc/grpc-java/blob/master/documentation/server-reflection-tutorial.md#enable-server-reflection) , [C++](https://github.com/grpc/grpc/blob/master/doc/server_reflection_tutorial.md) and [Go](https://github.com/grpc/grpc-go/blob/master/Documentation/server-reflection-tutorial.md) Local proto files can be used as an alternative. See instructions [below](#Call-a-remote-method). ## Usage ### List services `grpc_cli ls` command lists services and methods exposed at a given port - List all the services exposed at a given port ```sh $ grpc_cli ls localhost:50051 ``` output: ```none helloworld.Greeter grpc.reflection.v1alpha.ServerReflection ``` The `localhost:50051` part indicates the server you are connecting to. - List one service with details `grpc_cli ls` command inspects a service given its full name (in the format of \.\). It can print information with a long listing format when `-l` flag is set. This flag can be used to get more details about a service. ```sh $ grpc_cli ls localhost:50051 helloworld.Greeter -l ``` `helloworld.Greeter` is full name of the service. output: ```proto filename: helloworld.proto package: helloworld; service Greeter { rpc SayHello(helloworld.HelloRequest) returns (helloworld.HelloReply) {} } ``` ### List methods - List one method with details `grpc_cli ls` command also inspects a method given its full name (in the format of \.\.\). ```sh $ grpc_cli ls localhost:50051 helloworld.Greeter.SayHello -l ``` `helloworld.Greeter.SayHello` is full name of the method. output: ```proto rpc SayHello(helloworld.HelloRequest) returns (helloworld.HelloReply) {} ``` ### Inspect message types We can use `grpc_cli type` command to inspect request/response types given the full name of the type (in the format of \.\). - Get information about the request type ```sh $ grpc_cli type localhost:50051 helloworld.HelloRequest ``` `helloworld.HelloRequest` is the full name of the request type. output: ```proto message HelloRequest { optional string name = 1; } ``` ### Call a remote method We can send RPCs to a server and get responses using `grpc_cli call` command. - Call a unary method Send a rpc to a helloworld server at `localhost:50051`: ```sh $ grpc_cli call localhost:50051 SayHello "name: 'gRPC CLI'" ``` output: `sh message: "Hello gRPC CLI"` `SayHello` is (part of) the gRPC method string. Then `"name: 'world'"` is the text format of the request proto message. For information on more flags, look at the comments of `grpc_cli.cc`. - Use local proto files If the server does not have the server reflection service, you will need to provide local proto files containing the service definition. The tool will try to find request/response types from them. ```sh $ grpc_cli call localhost:50051 SayHello "name: 'world'" \ --protofiles=examples/protos/helloworld.proto ``` If the proto file is not under the current directory, you can use `--proto_path` to specify a new search root. Note that the tool will always attempt to use the reflection service first, falling back to local proto files if the service is not found. Use `--noremotedb` to avoid attempting to use the reflection service. - Send non-proto rpc For using gRPC with protocols other than protobuf, you will need the exact method name string and a file containing the raw bytes to be sent on the wire. ```bash $ grpc_cli call localhost:50051 /helloworld.Greeter/SayHello \ --input_binary_file=input.bin \ --output_binary_file=output.bin ``` On success, you will need to read or decode the response from the `output.bin` file. grpc-1.30.2/doc/compression.md000066400000000000000000000134461370425124100161670ustar00rootroot00000000000000## gRPC Compression The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC 2119](http://www.ietf.org/rfc/rfc2119.txt). ### Intent Compression is used to reduce the amount of bandwidth used between peers. The compression supported by gRPC acts _at the individual message level_, taking _message_ [as defined in the wire format document](PROTOCOL-HTTP2.md). The implementation supports different compression algorithms. A _default compression level_, to be used in the absence of message-specific settings, MAY be specified for during channel creation. The ability to control compression settings per call and to enable/disable compression on a per message basis MAY be used to prevent CRIME/BEAST attacks. It also allows for asymmetric compression communication, whereby a response MAY be compressed differently, if at all. ### Specification Compression MAY be configured by the Client Application by calling the appropriate API method. There are two scenarios where compression MAY be configured: + At channel creation time, which sets the channel default compression and therefore the compression that SHALL be used in the absence of per-RPC compression configuration. + At response time, via: + For unary RPCs, the {Client,Server}Context instance. + For streaming RPCs, the {Client,Server}Writer instance. In this case, configuration is reduced to disabling compression altogether. ### Compression Method Asymmetry Between Peers A gRPC peer MAY choose to respond using a different compression method to that of the request, including not performing any compression, regardless of channel and RPC settings (for example, if compression would result in small or negative gains). If a client message is compressed by an algorithm that is not supported by a server, the message WILL result in an `UNIMPLEMENTED` error status on the server. The server will then include a `grpc-accept-encoding` response header which specifies the algorithms that the server accepts. If the client message is compressed using one of the algorithms from the `grpc-accept-encoding` header and an `UNIMPLEMENTED` error status is returned from the server, the cause of the error MUST NOT be related to compression. If a server sent data which is compressed by an algorithm that is not supported by the client, an `INTERNAL` error status will occur on the client side. Note that a peer MAY choose to not disclose all the encodings it supports. However, if it receives a message compressed in an undisclosed but supported encoding, it MUST include said encoding in the response's `grpc-accept-encoding` header. For every message a server is requested to compress using an algorithm it knows the client doesn't support (as indicated by the last `grpc-accept-encoding` header received from the client), it SHALL send the message uncompressed. ### Specific Disabling of Compression If the user (through the previously described mechanisms) requests to disable compression the next message MUST be sent uncompressed. This is instrumental in preventing BEAST/CRIME attacks. This applies to both the unary and streaming cases. ### Compression Levels and Algorithms The set of supported algorithm is implementation dependent. In order to simplify the public API and to operate seamlessly across implementations (both in terms of languages but also different version of the same one), we introduce the idea of _compression levels_ (such as "low", "medium", "high"). Levels map to concrete algorithms and/or their settings (such as "low" mapping to "gzip -3" and "high" mapping to "gzip -9") automatically depending on what a peer is known to support. A server is always aware of what its clients support, as clients disclose it in the Message-Accept-Encoding header as part of the RPC. A client doesn't a priori (presently) know which algorithms a server supports. This issue can be addressed with an initial negotiation of capabilities or an automatic retry mechanism. These features will be implemented in the future. Currently however, compression levels are only supported at the server side, which is aware of the client's capabilities through the incoming Message-Accept-Encoding header. ### Propagation to child RPCs The inheritance of the compression configuration by child RPCs is left up to the implementation. Note that in the absence of changes to the parent channel, its configuration will be used. ### Test cases 1. When a compression level is not specified for either the channel or the message, the default channel level _none_ is considered: data MUST NOT be compressed. 1. When per-RPC compression configuration isn't present for a message, the channel compression configuration MUST be used. 1. When a compression method (including no compression) is specified for an outgoing message, the message MUST be compressed accordingly. 1. A message compressed by a client in a way not supported by its server MUST fail with status `UNIMPLEMENTED`, its associated description indicating the unsupported condition as well as the supported ones. The returned `grpc-accept-encoding` header MUST NOT contain the compression method (encoding) used. 1. A message compressed by a server in a way not supported by its client MUST fail with status `INTERNAL`, its associated description indicating the unsupported condition as well as the supported ones. The returned `grpc-accept-encoding` header MUST NOT contain the compression method (encoding) used. 1. An ill-constructed message with its [Compressed-Flag bit](PROTOCOL-HTTP2.md#compressed-flag) set but lacking a [grpc-encoding](PROTOCOL-HTTP2.md#message-encoding) entry different from _identity_ in its metadata MUST fail with `INTERNAL` status, its associated description indicating the invalid Compressed-Flag condition. grpc-1.30.2/doc/compression_cookbook.md000066400000000000000000000146321370425124100200530ustar00rootroot00000000000000# gRPC (Core) Compression Cookbook ## Introduction This document describes compression as implemented by the gRPC C core. See [the full compression specification](compression.md) for details. ### Intended Audience Wrapped languages developers, for the purposes of supporting compression by interacting with the C core. ## Criteria for GA readiness 1. Be able to set compression at [channel](#per-channel-settings), [call](#per-call-settings) and [message](#per-message-settings) level. In principle this API should be based on _compression levels_ as opposed to algorithms. See the discussion [below](#level-vs-algorithms). 1. Have unit tests covering [the cases from the spec](https://github.com/grpc/grpc/blob/master/doc/compression.md#test-cases). 1. Interop tests implemented and passing on Jenkins. The two relevant interop test cases are [large_compressed_unary](https://github.com/grpc/grpc/blob/master/doc/interop-test-descriptions.md#large_compressed_unary) and [server_compressed_streaming](https://github.com/grpc/grpc/blob/master/doc/interop-test-descriptions.md#server_compressed_streaming). ## Summary Flowcharts The following flowcharts depict the evolution of a message, both _incoming_ and _outgoing_, irrespective of the client/server character of the call. Aspects still not symmetric between clients and servers (e.g. the [use of compression levels](https://github.com/grpc/grpc/blob/master/doc/compression.md#compression-levels-and-algorithms)) are explicitly marked. The in-detail textual description for the different scenarios is described in subsequent sections. ## Incoming Messages ![image](images/compression_cookbook_incoming.png) ## Outgoing Messages ![image](images/compression_cookbook_outgoing.png) ## Levels vs Algorithms As mentioned in [the relevant discussion on the spec document](https://github.com/grpc/grpc/blob/master/doc/compression.md#compression-levels-and-algorithms), compression _levels_ are the primary mechanism for compression selection _at the server side_. In the future, it'll also be at the client side. The use of levels abstracts away the intricacies of selecting a concrete algorithm supported by a peer, on top of removing the burden of choice from the developer. As of this writing (Q2 2016), clients can only specify compression _algorithms_. Clients will support levels as soon as an automatic retry/negotiation mechanism is in place. ## Per Channel Settings Compression may be configured at channel creation. This is a convenience to avoid having to repeatedly configure compression for every call. Note that any compression setting on individual [calls](#per-call-settings) or [messages](#per-message-settings) overrides channel settings. The following aspects can be configured at channel-creation time via channel arguments: #### Disable Compression _Algorithms_ Use the channel argument key `GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET` (from [`grpc/impl/codegen/compression_types.h`](https://github.com/grpc/grpc/blob/master/include/grpc/impl/codegen/compression_types.h)), takes a 32 bit bitset value. A set bit means the algorithm with that enum value according to `grpc_compression_algorithm` is _enabled_. For example, `GRPC_COMPRESS_GZIP` currently has a numeric value of 2. To enable/disable GZIP for a channel, one would set/clear the 3rd LSB (eg, 0b100 = 0x4). Note that setting/clearing 0th position, that corresponding to `GRPC_COMPRESS_NONE`, has no effect, as no-compression (a.k.a. _identity_) is always supported. Incoming messages compressed (ie, encoded) with a disabled algorithm will result in the call being closed with `GRPC_STATUS_UNIMPLEMENTED`. #### Default Compression _Level_ **(currently, Q2 2016, only applicable for server side channels. It's ignored for clients.)** Use the channel argument key `GRPC_COMPRESSION_CHANNEL_DEFAULT_LEVEL` (from [`grpc/impl/codegen/compression_types.h`](https://github.com/grpc/grpc/blob/master/include/grpc/impl/codegen/compression_types.h)), valued by an integer corresponding to a value from the `grpc_compression_level` enum. #### Default Compression _Algorithm_ Use the channel argument key `GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM` (from [`grpc/impl/codegen/compression_types.h`](https://github.com/grpc/grpc/blob/master/include/grpc/impl/codegen/compression_types.h)), valued by an integer corresponding to a value from the `grpc_compression_level` enum. ## Per Call Settings ### Compression **Level** in Call Responses The server requests a compression level via initial metadata. The `send_initial_metadata` `grpc_op` contains a `maybe_compression_level` field with two fields, `is_set` and `compression_level`. The former must be set when actively choosing a level to disambiguate the default value of zero (no compression) from the proactive selection of no compression. The core will receive the request for the compression level and automatically choose a compression algorithm based on its knowledge about the peer (communicated by the client via the `grpc-accept-encoding` header. Note that the absence of this header means no compression is supported by the client/peer). ### Compression **Algorithm** in Call Responses **Server should avoid setting the compression algorithm directly**. Prefer setting compression levels unless there's a _very_ compelling reason to choose specific algorithms (benchmarking, testing). Selection of concrete compression algorithms is performed by adding a `(GRPC_COMPRESS_REQUEST_ALGORITHM_KEY, )` key-value pair to the initial metadata, where `GRPC_COMPRESS_REQUEST_ALGORITHM_KEY` is defined in [`grpc/impl/codegen/compression_types.h`](https://github.com/grpc/grpc/blob/master/include/grpc/impl/codegen/compression_types.h)), and `` is the human readable name of the algorithm as given in [the HTTP2 spec](https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md) for `Message-Encoding` (e.g. gzip, identity, etc.). See [`grpc_compression_algorithm_name`](https://github.com/grpc/grpc/blob/master/src/core/lib/compression/compression.c) for the mapping between the `grpc_compression_algorithm` enum values and their textual representation. ## Per Message Settings To disable compression for a specific message, the `flags` field of `grpc_op` instances of type `GRPC_OP_SEND_MESSAGE` must have its `GRPC_WRITE_NO_COMPRESS` bit set. Refer to [`grpc/impl/codegen/compression_types.h`](https://github.com/grpc/grpc/blob/master/include/grpc/impl/codegen/compression_types.h)), grpc-1.30.2/doc/connection-backoff-interop-test-description.md000066400000000000000000000065221370425124100243270ustar00rootroot00000000000000Connection Backoff Interop Test Descriptions =============================================== This test is to verify the client is reconnecting the server with correct backoffs as specified in [the spec](https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md). The test server has a port (control_port) running a rpc service for controlling the server and another port (retry_port) to close any incoming tcp connections. The test has the following flow: 1. The server starts listening on control_port. 2. The client calls Start rpc on server control_port. 3. The server starts listening on retry_port. 4. The client connects to server retry_port and retries with backoff for 540s, which translates to about 13 retries. 5. The client calls Stop rpc on server control port. 6. The client checks the response to see whether the server thinks the backoffs are conforming the spec or do its own check on the backoffs in the response. Client and server use [test.proto](https://github.com/grpc/grpc/blob/master/src/proto/grpc/testing/test.proto). Each language should implement its own client. The C++ server is shared among languages. Client ------ Clients should accept these arguments: * --server_control_port=PORT * The server port to connect to for rpc. For example, "8080" * --server_retry_port=PORT * The server port to connect to for testing backoffs. For example, "8081" The client must connect to the control port without TLS. The client must connect to the retry port with TLS. The client should either assert on the server returned backoff status or check the returned backoffs on its own. Procedure of client: 1. Calls Start on server control port with a large deadline or no deadline, waits for its finish and checks it succeeded. 2. Initiates a channel connection to server retry port, which should perform reconnections with proper backoffs. A convenient way to achieve this is to call Start with a deadline of 540s. The rpc should fail with deadline exceeded. 3. Calls Stop on server control port and checks it succeeded. 4. Checks the response to see whether the server thinks the backoffs passed the test. 5. Optionally, the client can do its own check on the returned backoffs. Server ------ A C++ server can be used for the test. Other languages do NOT need to implement a server. To minimize the network delay, the server binary should run on the same machine or on a nearby machine (in terms of network distance) with the client binary. A server implements the ReconnectService to its state. It also opens a tcp server on the retry_port, which just shuts down all incoming tcp connections to simulate connection failures. The server will keep a record of all the reconnection timestamps and return the connection backoffs in the response in milliseconds. The server also checks the backoffs to see whether they conform the spec and returns whether the client passes the test. If the server receives a Start call when another client is being tested, it finishes the call when the other client is done. If some other host connects to the server retry_port when a client is being tested, the server will log an error but likely would think the client fails the test. The server accepts these arguments: * --control_port=PORT * The port to listen on for control rpcs. For example, "8080" * --retry_port=PORT * The tcp server port. For example, "8081" grpc-1.30.2/doc/connection-backoff.md000066400000000000000000000040471370425124100173530ustar00rootroot00000000000000GRPC Connection Backoff Protocol ================================ When we do a connection to a backend which fails, it is typically desirable to not retry immediately (to avoid flooding the network or the server with requests) and instead do some form of exponential backoff. We have several parameters: 1. INITIAL_BACKOFF (how long to wait after the first failure before retrying) 1. MULTIPLIER (factor with which to multiply backoff after a failed retry) 1. JITTER (by how much to randomize backoffs). 1. MAX_BACKOFF (upper bound on backoff) 1. MIN_CONNECT_TIMEOUT (minimum time we're willing to give a connection to complete) ## Proposed Backoff Algorithm Exponentially back off the start time of connection attempts up to a limit of MAX_BACKOFF, with jitter. ``` ConnectWithBackoff() current_backoff = INITIAL_BACKOFF current_deadline = now() + INITIAL_BACKOFF while (TryConnect(Max(current_deadline, now() + MIN_CONNECT_TIMEOUT)) != SUCCESS) SleepUntil(current_deadline) current_backoff = Min(current_backoff * MULTIPLIER, MAX_BACKOFF) current_deadline = now() + current_backoff + UniformRandom(-JITTER * current_backoff, JITTER * current_backoff) ``` With specific parameters of MIN_CONNECT_TIMEOUT = 20 seconds INITIAL_BACKOFF = 1 second MULTIPLIER = 1.6 MAX_BACKOFF = 120 seconds JITTER = 0.2 Implementations with pressing concerns (such as minimizing the number of wakeups on a mobile phone) may wish to use a different algorithm, and in particular different jitter logic. Alternate implementations must ensure that connection backoffs started at the same time disperse, and must not attempt connections substantially more often than the above algorithm. ## Reset Backoff The back off should be reset to INITIAL_BACKOFF at some time point, so that the reconnecting behavior is consistent no matter the connection is a newly started one or a previously disconnected one. We choose to reset the Backoff when the SETTINGS frame is received, at that time point, we know for sure that this connection was accepted by the server. grpc-1.30.2/doc/connectivity-semantics-and-api.md000066400000000000000000000154311370425124100216330ustar00rootroot00000000000000gRPC Connectivity Semantics and API =================================== This document describes the connectivity semantics for gRPC channels and the corresponding impact on RPCs. We then discuss an API. States of Connectivity ---------------------- gRPC Channels provide the abstraction over which clients can communicate with servers.The client-side channel object can be constructed using little more than a DNS name. Channels encapsulate a range of functionality including name resolution, establishing a TCP connection (with retries and backoff) and TLS handshakes. Channels can also handle errors on established connections and reconnect, or in the case of HTTP/2 GO_AWAY, re-resolve the name and reconnect. To hide the details of all this activity from the user of the gRPC API (i.e., application code) while exposing meaningful information about the state of a channel, we use a state machine with five states, defined below: CONNECTING: The channel is trying to establish a connection and is waiting to make progress on one of the steps involved in name resolution, TCP connection establishment or TLS handshake. This may be used as the initial state for channels upon creation. READY: The channel has successfully established a connection all the way through TLS handshake (or equivalent) and protocol-level (HTTP/2, etc) handshaking, and all subsequent attempt to communicate have succeeded (or are pending without any known failure). TRANSIENT_FAILURE: There has been some transient failure (such as a TCP 3-way handshake timing out or a socket error). Channels in this state will eventually switch to the CONNECTING state and try to establish a connection again. Since retries are done with exponential backoff, channels that fail to connect will start out spending very little time in this state but as the attempts fail repeatedly, the channel will spend increasingly large amounts of time in this state. For many non-fatal failures (e.g., TCP connection attempts timing out because the server is not yet available), the channel may spend increasingly large amounts of time in this state. IDLE: This is the state where the channel is not even trying to create a connection because of a lack of new or pending RPCs. New RPCs MAY be created in this state. Any attempt to start an RPC on the channel will push the channel out of this state to connecting. When there has been no RPC activity on a channel for a specified IDLE_TIMEOUT, i.e., no new or pending (active) RPCs for this period, channels that are READY or CONNECTING switch to IDLE. Additionally, channels that receive a GOAWAY when there are no active or pending RPCs should also switch to IDLE to avoid connection overload at servers that are attempting to shed connections. We will use a default IDLE_TIMEOUT of 300 seconds (5 minutes). SHUTDOWN: This channel has started shutting down. Any new RPCs should fail immediately. Pending RPCs may continue running till the application cancels them. Channels may enter this state either because the application explicitly requested a shutdown or if a non-recoverable error has happened during attempts to connect communicate . (As of 6/12/2015, there are no known errors (while connecting or communicating) that are classified as non-recoverable.) Channels that enter this state never leave this state. The following table lists the legal transitions from one state to another and corresponding reasons. Empty cells denote disallowed transitions.
From/To CONNECTING READY TRANSIENT_FAILURE IDLE SHUTDOWN
CONNECTING Incremental progress during connection establishment All steps needed to establish a connection succeeded Any failure in any of the steps needed to establish connection No RPC activity on channel for IDLE_TIMEOUT Shutdown triggered by application.
READY Incremental successful communication on established channel. Any failure encountered while expecting successful communication on established channel. No RPC activity on channel for IDLE_TIMEOUT
OR
upon receiving a GOAWAY while there are no pending RPCs.
Shutdown triggered by application.
TRANSIENT_FAILURE Wait time required to implement (exponential) backoff is over. Shutdown triggered by application.
IDLE Any new RPC activity on the channel Shutdown triggered by application.
SHUTDOWN
Channel State API ----------------- All gRPC libraries will expose a channel-level API method to poll the current state of a channel. In C++, this method is called GetState and returns an enum for one of the five legal states. It also accepts a boolean `try_to_connect` to transition to CONNECTING if the channel is currently IDLE. The boolean should act as if an RPC occurred, so it should also reset IDLE_TIMEOUT. ```cpp grpc_connectivity_state GetState(bool try_to_connect); ``` All libraries should also expose an API that enables the application (user of the gRPC API) to be notified when the channel state changes. Since state changes can be rapid and race with any such notification, the notification should just inform the user that some state change has happened, leaving it to the user to poll the channel for the current state. The synchronous version of this API is: ```cpp bool WaitForStateChange(grpc_connectivity_state source_state, gpr_timespec deadline); ``` which returns `true` when the state is something other than the `source_state` and `false` if the deadline expires. Asynchronous- and futures-based APIs should have a corresponding method that allows the application to be notified when the state of a channel changes. Note that a notification is delivered every time there is a transition from any state to any *other* state. On the other hand the rules for legal state transition, require a transition from CONNECTING to TRANSIENT_FAILURE and back to CONNECTING for every recoverable failure, even if the corresponding exponential backoff requires no wait before retry. The combined effect is that the application may receive state change notifications that appear spurious. e.g., an application waiting for state changes on a channel that is CONNECTING may receive a state change notification but find the channel in the same CONNECTING state on polling for current state because the channel may have spent infinitesimally small amount of time in the TRANSIENT_FAILURE state. grpc-1.30.2/doc/core/000077500000000000000000000000001370425124100142245ustar00rootroot00000000000000grpc-1.30.2/doc/core/combiner-explainer.md000066400000000000000000000115371370425124100203400ustar00rootroot00000000000000# Combiner Explanation ## Talk by ctiller, notes by vjpai Typical way of doing critical section ``` mu.lock() do_stuff() mu.unlock() ``` An alternative way of doing it is ``` class combiner { run(f) { mu.lock() f() mu.unlock() } mutex mu; } combiner.run(do_stuff) ``` If you have two threads calling combiner, there will be some kind of queuing in place. It's called `combiner` because you can pass in more than one do_stuff at once and they will run under a common `mu`. The implementation described above has the issue that you're blocking a thread for a period of time, and this is considered harmful because it's an application thread that you're blocking. Instead, get a new property: * Keep things running in serial execution * Don't ever sleep the thread * But maybe allow things to end up running on a different thread from where they were started * This means that `do_stuff` doesn't necessarily run to completion when `combiner.run` is invoked ``` class combiner { mpscq q; // multi-producer single-consumer queue can be made non-blocking state s; // is it empty or executing run(f) { if (q.push(f)) { // q.push returns true if it's the first thing while (q.pop(&f)) { // modulo some extra work to avoid races f(); } } } } ``` The basic idea is that the first one to push onto the combiner executes the work and then keeps executing functions from the queue until the combiner is drained. Our combiner does some additional work, with the motivation of write-batching. We have a second tier of `run` called `run_finally`. Anything queued onto `run_finally` runs after we have drained the queue. That means that there is essentially a finally-queue. This is not guaranteed to be final, but it's best-effort. In the process of running the finally item, we might put something onto the main combiner queue and so we'll need to re-enter. `chttp2` runs all ops in the run state except if it sees a write it puts that into a finally. That way anything else that gets put into the combiner can add to that write. ``` class combiner { mpscq q; // multi-producer single-consumer queue can be made non-blocking state s; // is it empty or executing queue finally; // you can only do run_finally when you are already running something from the combiner run(f) { if (q.push(f)) { // q.push returns true if it's the first thing loop: while (q.pop(&f)) { // modulo some extra work to avoid races f(); } while (finally.pop(&f)) { f(); } goto loop; } } } ``` So that explains how combiners work in general. In gRPC, there is `start_batch(..., tag)` and then work only gets activated by somebody calling `cq::next` which returns a tag. This gives an API-level guarantee that there will be a thread doing polling to actually make work happen. However, some operations are not covered by a poller thread, such as cancellation that doesn't have a completion. Other callbacks that don't have a completion are the internal work that gets done before the batch gets completed. We need a condition called `covered_by_poller` that means that the item will definitely need some thread at some point to call `cq::next` . This includes those callbacks that directly cause a completion but also those that are indirectly required before getting a completion. If we can't tell for sure for a specific path, we have to assumed it is not covered by poller. The above combiner has the problem that it keeps draining for a potentially infinite amount of time and that can lead to a huge tail latency for some operations. So we can tweak it by returning to the application if we know that it is valid to do so: ``` while (q.pop(&f)) { f(); if (control_can_be_returned && some_still_queued_thing_is_covered_by_poller) { offload_combiner_work_to_some_other_thread(); } } ``` `offload` is more than `break`; it does `break` but also causes some other thread that is currently waiting on a poll to break out of its poll. This is done by setting up a per-polling-island work-queue (distributor) wakeup FD. The work-queue is the converse of the combiner; it tries to spray events onto as many threads as possible to get as much concurrency as possible. So `offload` really does: ``` workqueue.run(continue_from_while_loop); break; ``` This needs us to add another class variable for a `workqueue` (which is really conceptually a distributor). ``` workqueue::run(f) { q.push(f) eventfd.wakeup() } workqueue::readable() { eventfd.consume(); q.pop(&f); f(); if (!q.empty()) { eventfd.wakeup(); // spray across as many threads as are waiting on this workqueue } } ``` In principle, `run_finally` could get starved, but this hasn't happened in practice. If we were concerned about this, we could put a limit on how many things come off the regular `q` before the `finally` queue gets processed. grpc-1.30.2/doc/core/epoll-polling-engine.md000066400000000000000000000232171370425124100205730ustar00rootroot00000000000000# `epoll`-based pollset implementation in gRPC Sree Kuchibhotla (sreek@) [May - 2016] (Design input from Craig Tiller and David Klempner) > Status: As of June 2016, this change is implemented and merged. > * The bulk of the functionality is in: [ev_epollsig_linux.c](https://github.com/grpc/grpc/blob/master/src/core/lib/iomgr/ev_epollsig_linux.c) > * Pull request: https://github.com/grpc/grpc/pull/6803 ## 1. Introduction The document talks about the proposed changes to `epoll`-based implementation of pollsets in gRPC. Section-2 gives an overview of the current implementation, Section-3 talks about the problems in the current implementation and finally Section-4 talks about the proposed changes. ## 2. Current `epoll`-based implementation in gRPC ![image](images/old_epoll_impl.png) **Figure 1: Current implementation** A gRPC client or a server can have more than one completion queue. Each completion queue creates a pollset. The gRPC core library does not create any threads[^1] on its own and relies on the application using the gRPC core library to provide the threads. A thread starts to poll for events by calling the gRPC core surface APIs `grpc_completion_queue_next()` or `grpc_completion_queue_pluck()`. More than one thread can call `grpc_completion_queue_next()`on the same completion queue[^2]. A file descriptor can be in more than one completion queue. There are examples in the next section that show how this can happen. When an event of interest happens in a pollset, multiple threads are woken up and there are no guarantees on which thread actually ends up performing the work i.e executing the callbacks associated with that event. The thread that performs the work finally queues a completion event `grpc_cq_completion` on the appropriate completion queue and "kicks" (i.e wakes ups) the thread that is actually interested in that event (which can be itself - in which case there is no thread hop) For example, in **Figure 1**, if `fd1` becomes readable, any one of the threads i.e *Threads 1* to *Threads K* or *Thread P*, might be woken up. Let's say *Thread P* was calling a `grpc_completion_queue_pluck()` and was actually interested in the event on `fd1` but *Thread 1* woke up. In this case, *Thread 1* executes the callbacks and finally kicks *Thread P* by signalling `event_fd_P`. *Thread P* wakes up, realizes that there is a new completion event for it and returns from `grpc_completion_queue_pluck()` to its caller. ## 3. Issues in the current architecture ### _Thundering Herds_ If multiple threads concurrently call `epoll_wait()`, we are guaranteed that only one thread is woken up if one of the `fds` in the set becomes readable/writable. However, in our current implementation, the threads do not directly call a blocking `epoll_wait()`[^3]. Instead, they call `poll()` on the set containing `[event_fd`[^4]`, epoll_fd]`. **(see Figure 1)** Considering the fact that an `fd` can be in multiple `pollsets` and that each `pollset` might have multiple poller threads, it means that whenever an `fd` becomes readable/writable, all the threads in all the `pollsets` (in which that `fd` is present) are woken up. The performance impact of this would be more conspicuous on the server side. Here are a two examples of thundering herds on the server side. Example 1: Listening fds on server * A gRPC server can have multiple server completion queues (i.e completion queues which are used to listen for incoming channels). * A gRPC server can also listen on more than one TCP-port. * A listening socket is created for each port the gRPC server would be listening on. * Every listening socket's fd is added to all the server completion queues' pollsets. (Currently we do not do any sharding of the listening fds across these pollsets). This means that for every incoming new channel, all the threads waiting on all the pollsets are woken up. Example 2: New Incoming-channel fds on server * Currently, every new incoming channel's `fd` (i.e the socket `fd` that is returned by doing an `accept()` on the new incoming channel) is added to all the server completion queues' pollsets [^5]). * Clearly, this would also cause all thundering herd problem for every read onthat fd There are other scenarios especially on the client side where an fd can end up being on multiple pollsets which would cause thundering herds on the clients. ## 4. Proposed changes to the current `epoll`-based polling implementation: The main idea in this proposal is to group 'related' `fds` into a single epoll-based set. This would ensure that only one thread wakes up in case of an event on one of the `fds` in the epoll set. To accomplish this, we introduce a new abstraction called `polling_island` which will have an epoll set underneath (See **Figure 2** below). A `polling_island` contains the following: * `epoll_fd`: The file descriptor of the underlying epoll set * `fd_set`: The set of 'fds' in the pollset island i.e in the epoll set (The pollset island merging operation described later requires the list of fds in the pollset island and currently there is no API available to enumerate all the fds in an epoll set) * `event_fd`: A level triggered _event fd_ that is used to wake up all the threads waiting on this epoll set (Note: This `event_fd` is added to the underlying epoll set during pollset island creation. This is useful in the pollset island merging operation described later) * `merged_to`: The polling island into which this one merged. See section 4.2 (case 2) for more details on this. Also note that if `merged_to` is set, all the other fields in this polling island are not used anymore In this new model, only one thread wakes up whenever an event of interest happens in an epoll set. ![drawing](images/new_epoll_impl.png) **Figure 2: Proposed changes** ### 4.1 Relation between `fd`, `pollset` and `polling_island:` * An `fd` may belong to multiple `pollsets` but belongs to exactly one `polling_island` * A `pollset` belongs to exactly one `polling_island` * An `fd` and the `pollset(s`) it belongs to, have same `polling_island` ### 4.2 Algorithm to add an `fd` to a `pollset` There are two cases to check here: * **Case 1:** Both `fd` and `pollset` already belong to the same `polling_island` * This is straightforward and nothing really needs to be done here * **Case 2:** The `fd `and `pollset` point to different `polling_islands`: In this case we _merge_ both the polling islands i.e: * Add all the `fds` from the smaller `polling_island `to the larger `polling_island` and update the `merged_to` pointer on the smaller island to point to the larger island. * Wake up all the threads waiting on the smaller `polling_island`'s `epoll_fd` (by signaling the `event_fd` on that island) and make them now wait on the larger `polling_island`'s `epoll_fd` * Update `fd` and `pollset` to now point to the larger `polling_island` ### 4.3 Directed wakeups: The new implementation, just like the current implementation, does not provide us any guarantees that the thread that is woken up is the thread that is actually interested in the event. So the thread that woke up executes the callbacks and finally has to 'kick' the appropriate polling thread interested in the event. In the current implementation, every polling thread also had a `event_fd` on which it was listening to and hence waking it up was as simple as signaling that `event_fd`. However, using an `event_fd` also meant that every thread has to use a `poll()` (on `event_fd` and `epoll_fd`) instead of doing an `epoll_wait()` and this resulted in the thundering herd problems described above. The proposal here is to use signals and kicking a thread would just be sending a signal to that thread. Unfortunately there are only a few signals available on POSIX systems and most of them have pre-determined behavior leaving only a few signals `SIGUSR1`, `SIGUSR2` and `SIGRTx (SIGRTMIN to SIGRTMAX)` for custom use. The calling application might have registered other signal handlers for these signals. `We will provide a new API where the applications can "give a signal number" to gRPC library to use for this purpose. ``` void grpc_use_signal(int signal_num) ``` If the calling application does not provide a signal number, then the gRPC library will relegate to using a model similar to the current implementation (where every thread does a blocking `poll()` on its `wakeup_fd` and the `epoll_fd`). The function` psi_wait() `in figure 2 implements this logic. **>> **(**NOTE**: Or alternatively, we can implement a turnstile polling (i.e having only one thread calling `epoll_wait()` on the epoll set at any time - which all other threads call poll on their `wakeup_fds`) in case of not getting a signal number from the applications. ## Notes [^1]: Only exception is in case of name-resolution [^2]: However, a `grpc_completion_queue_next()` and `grpc_completion_queue_pluck()` must not be called in parallel on the same completion queue [^3]: The threads first do a blocking` poll()` with `[wakeup_fd, epoll_fd]`. If the `poll()` returns due to an event of interest in the epoll set, they then call a non-blocking i.e a zero-timeout `epoll_wait()` on the `epoll_fd` [^4]: `event_fd` is the linux platform specific implementation of `grpc_wakeup_fd`. A `wakeup_fd` is used to wake up polling threads typically when the event for which the polling thread is waiting is already completed by some other thread. It is also used to wake up the polling threads in case of shutdowns or to re-evaluate the poller's interest in the fds to poll (the last scenario is only in case of `poll`-based (not `epoll`-based) implementation of `pollsets`). [^5]: See more details about the issue here https://github.com/grpc/grpc/issues/5470 and for a proposed fix here: https://github.com/grpc/grpc/pull/6149 grpc-1.30.2/doc/core/grpc-client-server-polling-engine-usage.md000066400000000000000000000042421370425124100242720ustar00rootroot00000000000000# Polling Engine Usage on gRPC client and Server _Author: Sree Kuchibhotla (@sreecha) - Sep 2018_ This document talks about how polling engine is used in gRPC core (both on client and server code paths). ## gRPC client ### Relation between Call, Channel (sub-channels), Completion queue, `grpc_pollset` - A gRPC Call is tied to a channel (more specifically a sub-channel) and a completion queue for the lifetime of the call. - Once a _sub-channel_ is picked for the call, the file-descriptor (socket fd in case of TCP channels) is added to the pollset corresponding to call's completion queue. (Recall that as per [grpc-cq](grpc-cq.md), a completion queue has a pollset by default) ![image](../images/grpc-call-channel-cq.png) ### Making progress on Async `connect()` on sub-channels (`grpc_pollset_set` usecase) - A gRPC channel is created between a client and a 'target'. The 'target' may resolve in to one or more backend servers. - A sub-channel is the 'connection' from a client to the backend server - While establishing sub-channels (i.e connections) to the backends, gRPC issues async [`connect()`](https://github.com/grpc/grpc/blob/v1.15.1/src/core/lib/iomgr/tcp_client_posix.cc#L296) calls which may not complete right away. When the `connect()` eventually succeeds, the socket fd is make 'writable' - This means that the polling engine must be monitoring all these sub-channel `fd`s for writable events and we need to make sure there is a polling thread that monitors all these fds - To accomplish this, the `grpc_pollset_set` is used the following way (see picture below) ![image](../images/grpc-client-lb-pss.png) ## gRPC server - The listening fd (i.e., the socket fd corresponding to the server listening port) is added to each of the server completion queues. Note that in gRPC we use SO_REUSEPORT option and create multiple listening fds but all of them map to the same listening port - A new incoming channel is assigned to some server completion queue picked randomly (note that we currently [round-robin](https://github.com/grpc/grpc/blob/v1.15.1/src/core/lib/iomgr/tcp_server_posix.cc#L231) over the server completion queues) ![image](../images/grpc-server-cq-fds.png) grpc-1.30.2/doc/core/grpc-cq.md000066400000000000000000000051111370425124100161000ustar00rootroot00000000000000# gRPC Completion Queue _Author: Sree Kuchibhotla (@sreecha) - Sep 2018_ Code: [completion_queue.cc](https://github.com/grpc/grpc/blob/v1.15.1/src/core/lib/surface/completion_queue.cc) This document gives an overview of completion queue architecture and focuses mainly on the interaction between completion queue and the Polling engine layer. ## Completion queue attributes Completion queue has two attributes - Completion_type: - GRPC_CQ_NEXT: grpc_completion_queue_next() can be called (but not grpc_completion_queue_pluck()) - GRPC_CQ_PLUCK: grpc_completion_queue_pluck() can be called (but not grpc_completion_queue_next()) - GRPC_CQ_CALLBACK: The tags in the queue are function pointers to callbacks. Also, neither next() nor pluck() can be called on this - Polling_type: - GRPC_CQ_NON_POLLING: Threads calling completion_queue_next/pluck do not do any polling - GRPC_CQ_DEFAULT_POLLING: Threads calling completion_queue_next/pluck do polling - GRPC_CQ_NON_LISTENING: Functionally similar to default polling except for a boolean attribute that states that the cq is non-listening. This is used by the grpc-server code to not associate any listening sockets with this completion-queue’s pollset ## Details ![image](../images/grpc-cq.png) ### **grpc\_completion\_queue\_next()** & **grpc_completion_queue_pluck()** APIS ``` C++ grpc_completion_queue_next(cq, deadline)/pluck(cq, deadline, tag) { while(true) { \\ 1. If an event is queued in the completion queue, dequeue and return \\ (in case of pluck() dequeue only if the tag is the one we are interested in) \\ 2. If completion queue shutdown return \\ 3. In case of pluck, add (tag, worker) pair to the tag<->worker map on the cq \\ 4. Call grpc_pollset_work(cq’s-pollset, deadline) to do polling \\ Note that if this function found some fds to be readable/writable/error, \\ it would have scheduled those closures (which may queue completion events \\ on SOME completion queue - not necessarily this one) } } ``` ### Queuing a completion event (i.e., "tag") ``` C++ grpc_cq_end_op(cq, tag) { \\ 1. Queue the tag in the event queue \\ 2. Find the pollset corresponding to the completion queue \\ (i) If the cq is of type GRPC_CQ_NEXT, then KICK ANY worker \\ i.e., call grpc_pollset_kick(pollset, nullptr) \\ (ii) If the cq is of type GRPC_CQ_PLUCK, then search the tag<->worker \\ map on the completion queue to find the worker. Then specifically \\ kick that worker i.e call grpc_pollset_kick(pollset, worker) } ``` grpc-1.30.2/doc/core/grpc-error.md000066400000000000000000000130031370425124100166250ustar00rootroot00000000000000# gRPC Error ## Background `grpc_error` is the c-core's opaque representation of an error. It holds a collection of integers, strings, timestamps, and child errors that related to the final error. always present are: * GRPC_ERROR_STR_FILE and GRPC_ERROR_INT_FILE_LINE - the source location where the error was generated * GRPC_ERROR_STR_DESCRIPTION - a human readable description of the error * GRPC_ERROR_TIME_CREATED - a timestamp indicating when the error happened An error can also have children; these are other errors that are believed to have contributed to this one. By accumulating children, we can begin to root cause high level failures from low level failures, without having to derive execution paths from log lines. grpc_errors are refcounted objects, which means they need strict ownership semantics. An extra ref on an error can cause a memory leak, and a missing ref can cause a crash. This document serves as a detailed overview of grpc_error's ownership rules. It should help people use the errors, as well as help people debug refcount related errors. ## Clarification of Ownership If a particular function is said to "own" an error, that means it has the responsibility of calling unref on the error. A function may have access to an error without ownership of it. This means the function may use the error, but must not call unref on it, since that will be done elsewhere in the code. A function that does not own an error may explicitly take ownership of it by manually calling GRPC_ERROR_REF. ## Ownership Rules There are three rules of error ownership, which we will go over in detail. * If `grpc_error` is returned by a function, the caller owns a ref to that instance. * If a `grpc_error` is passed to a `grpc_closure` callback function, then that function does not own a ref to the error. * if a `grpc_error` is passed to *any other function*, then that function takes ownership of the error. ### Rule 1 > If `grpc_error` is returned by a function, the caller owns a ref to that > instance.* For example, in the following code block, error1 and error2 are owned by the current function. ```C grpc_error* error1 = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Some error occurred"); grpc_error* error2 = some_operation_that_might_fail(...); ``` The current function would have to explicitly call GRPC_ERROR_UNREF on the errors, or pass them along to a function that would take over the ownership. ### Rule 2 > If a `grpc_error` is passed to a `grpc_closure` callback function, then that > function does not own a ref to the error. A `grpc_closure` callback function is any function that has the signature: ```C void (*cb)(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error); ``` This means that the error ownership is NOT transferred when a functions calls: ```C c->cb(exec_ctx, c->cb_arg, err); ``` The caller is still responsible for unref-ing the error. However, the above line is currently being phased out! It is safer to invoke callbacks with `GRPC_CLOSURE_RUN` and `GRPC_CLOSURE_SCHED`. These functions are not callbacks, so they will take ownership of the error passed to them. ```C grpc_error* error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Some error occurred"); GRPC_CLOSURE_RUN(exec_ctx, cb, error); // current function no longer has ownership of the error ``` If you schedule or run a closure, but still need ownership of the error, then you must explicitly take a reference. ```C grpc_error* error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Some error occurred"); GRPC_CLOSURE_RUN(exec_ctx, cb, GRPC_ERROR_REF(error)); // do some other things with the error GRPC_ERROR_UNREF(error); ``` Rule 2 is more important to keep in mind when **implementing** `grpc_closure` callback functions. You must keep in mind that you do not own the error, and must not unref it. More importantly, you cannot pass it to any function that would take ownership of the error, without explicitly taking ownership yourself. For example: ```C void on_some_action(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { // this would cause a crash, because some_function will unref the error, // and the caller of this callback will also unref it. some_function(error); // this callback function must take ownership, so it can give that // ownership to the function it is calling. some_function(GRPC_ERROR_REF(error)); } ``` ### Rule 3 > if a `grpc_error` is passed to *any other function*, then that function takes > ownership of the error. Take the following example: ```C grpc_error* error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Some error occurred"); // do some things some_function(error); // can't use error anymore! might be gone. ``` When some_function is called, it takes over the ownership of the error, and it will eventually unref it. So the caller can no longer safely use the error. If the caller needed to keep using the error (or passing it to other functions), if would have to take on a reference to it. This is a common pattern seen. ```C void func() { grpc_error* error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Some error"); some_function(GRPC_ERROR_REF(error)); // do things some_other_function(GRPC_ERROR_REF(error)); // do more things some_last_function(error); } ``` The last call takes ownership and will eventually give the error its final unref. When **implementing** a function that takes an error (and is not a `grpc_closure` callback function), you must ensure the error is unref-ed either by doing it explicitly with GRPC_ERROR_UNREF, or by passing the error to a function that takes over the ownership. grpc-1.30.2/doc/core/grpc-polling-engines.md000066400000000000000000000245761370425124100206070ustar00rootroot00000000000000# Polling Engines _Author: Sree Kuchibhotla (@sreecha) - Sep 2018_ ## Why do we need a 'polling engine' ? Polling engine component was created for the following reasons: - gRPC code deals with a bunch of file descriptors on which events like descriptor being readable/writable/error have to be monitored - gRPC code knows the actions to perform when such events happen - For example: - `grpc_endpoint` code calls `recvmsg` call when the fd is readable and `sendmsg` call when the fd is writable - ` tcp_client` connect code issues async `connect` and finishes creating the client once the fd is writable (i.e when the `connect` actually finished) - gRPC needed some component that can "efficiently" do the above operations __using the threads provided by the applications (i.e., not create any new threads)__. Also by "efficiently" we mean optimized for latency and throughput ## Polling Engine Implementations in gRPC There are multiple polling engine implementations depending on the OS and the OS version. Fortunately all of them expose the same interface - Linux: - **`epollex`** (default but requires kernel version >= 4.5), - `epoll1` (If `epollex` is not available and glibc version >= 2.9) - `poll` (If kernel does not have epoll support) - Mac: **`poll`** (default) - Windows: (no name) - One-off polling engines: - NodeJS : `libuv` polling engine implementation (requires different compile `#define`s) ## Polling Engine Interface ### Opaque Structures exposed by the polling engine The following are the **Opaque** structures exposed by Polling Engine interface (NOTE: Different polling engine implementations have different definitions of these structures) - **grpc_fd:** Structure representing a file descriptor - **grpc_pollset:** A set of one or more grpc_fds that are ‘polled’ for readable/writable/error events. One grpc_fd can be in multiple `grpc_pollset`s - **grpc_pollset_worker:** Structure representing a ‘polling thread’ - more specifically, the thread that calls `grpc_pollset_work()` API - **grpc_pollset_set:** A group of `grpc_fd`s, `grpc_pollset`s and `grpc_pollset_set`s (yes, a `grpc_pollset_set` can contain other `grpc_pollset_set`s) ### Polling engine API #### grpc_fd - **grpc\_fd\_notify\_on\_[read|write|error]** - Signature: `grpc_fd_notify_on_(grpc_fd* fd, grpc_closure* closure)` - Register a [closure](https://github.com/grpc/grpc/blob/v1.15.1/src/core/lib/iomgr/closure.h#L67) to be called when the fd becomes readable/writable or has an error (In grpc parlance, we refer to this act as “arming the fd”) - The closure is called exactly once per event. I.e once the fd becomes readable (or writable or error), the closure is fired and the fd is ‘unarmed’. To be notified again, the fd has to be armed again. - **grpc_fd_shutdown** - Signature: `grpc_fd_shutdown(grpc_fd* fd)` - Any current (or future) closures registered for readable/writable/error events are scheduled immediately with an error - **grpc_fd_orphan** - Signature: `grpc_fd_orphan(grpc_fd* fd, grpc_closure* on_done, int* release_fd, char* reason)` - Release the `grpc_fd` structure and call `on_done` closure when the operation is complete - If `release_fd` is set to `nullptr`, then `close()` the underlying fd as well. If not, put the underlying fd in `release_fd` (and do not call `close()`) - `release_fd` set to non-null in cases where the underlying fd is NOT owned by grpc core (like for example the fds used by C-Ares DNS resolver ) #### grpc_pollset - **grpc_pollset_add_fd** - Signature: `grpc_pollset_add_fd(grpc_pollset* ps, grpc_fd *fd)` - Add fd to pollset > **NOTE**: There is no `grpc_pollset_remove_fd`. This is because calling `grpc_fd_orphan()` will effectively remove the fd from all the pollsets it’s a part of - **grpc_pollset_work** - Signature: `grpc_pollset_work(grpc_pollset* ps, grpc_pollset_worker** worker, grpc_millis deadline)` > **NOTE**: `grpc_pollset_work()` requires the pollset mutex to be locked before calling it. Shortly after calling `grpc_pollset_work()`, the function populates the `*worker` pointer (among other things) and releases the mutex. Once `grpc_pollset_work()` returns, the `*worker` pointer is **invalid** and should not be used anymore. See the code in `completion_queue.cc` to see how this is used. - Poll the fds in the pollset for events AND return when ANY of the following is true: - Deadline expired - Some fds in the pollset were found to be readable/writable/error and those associated closures were ‘scheduled’ (but not necessarily executed) - worker is “kicked” (see `grpc_pollset_kick` for more details) - **grpc_pollset_kick** - Signature: `grpc_pollset_kick(grpc_pollset* ps, grpc_pollset_worker* worker)` - “Kick the worker” i.e Force the worker to return from grpc_pollset_work() - If `worker == nullptr`, kick ANY worker active on that pollset #### grpc_pollset_set - **grpc\_pollset\_set\_[add|del]\_fd** - Signature: `grpc_pollset_set_[add|del]_fd(grpc_pollset_set* pss, grpc_fd *fd)` - Add/Remove fd to the `grpc_pollset_set` - **grpc\_pollset\_set_[add|del]\_pollset** - Signature: `grpc_pollset_set_[add|del]_pollset(grpc_pollset_set* pss, grpc_pollset* ps)` - What does adding a pollset to a pollset_set mean ? - It means that calling `grpc_pollset_work()` on the pollset will also poll all the fds in the pollset_set i.e semantically, it is similar to adding all the fds inside pollset_set to the pollset. - This guarantee is no longer true once the pollset is removed from the pollset_set - **grpc\_pollset\_set_[add|del]\_pollset\_set** - Signature: `grpc_pollset_set_[add|del]_pollset_set(grpc_pollset_set* bag, grpc_pollset_set* item)` - Semantically, this is similar to adding all the fds in the ‘bag’ pollset_set to the ‘item’ pollset_set #### Recap: __Relation between grpc_pollset_worker, grpc_pollset and grpc_fd:__ ![image](../images/grpc-ps-pss-fd.png) __grpc_pollset_set__ ![image](../images/grpc-pss.png) ## Polling Engine Implementations ### epoll1 ![image](../images/grpc-epoll1.png) Code at `src/core/lib/iomgr/ev_epoll1_posix.cc` - The logic to choose a designated poller is quite complicated. Pollsets are internally sharded into what are called `pollset_neighborhood` (a structure internal to `epoll1` polling engine implementation). `grpc_pollset_workers` that call `grpc_pollset_work` on a given pollset are all queued in a linked-list against the `grpc_pollset`. The head of the linked list is called "root worker" - There are as many neighborhoods as the number of cores. A pollset is put in a neighborhood based on the CPU core of the root worker thread. When picking the next designated poller, we always try to find another worker on the current pollset. If there are no more workers in the current pollset, a `pollset_neighborhood` listed is scanned to pick the next pollset and worker that could be the new designated poller. - NOTE: There is room to tune this implementation. All we really need is good way to maintain a list of `grpc_pollset_workers` with a way to group them per-pollset (needed to implement `grpc_pollset_kick` semantics) and a way randomly select a new designated poller - See [`begin_worker()`](https://github.com/grpc/grpc/blob/v1.15.1/src/core/lib/iomgr/ev_epoll1_linux.cc#L729) function to see how a designated poller is chosen. Similarly [`end_worker()`](https://github.com/grpc/grpc/blob/v1.15.1/src/core/lib/iomgr/ev_epoll1_linux.cc#L916) function is called by the worker that was just out of `epoll_wait()` and will have to choose a new designated poller) ### epollex ![image](../images/grpc-epollex.png) Code at `src/core/lib/iomgr/ev_epollex_posix.cc` - FDs are added to multiple epollsets with EPOLLEXCLUSIVE flag. This prevents multiple worker threads from waking up from polling whenever the fd is readable/writable - A few observations: - If multiple pollsets are pointing to the same `Pollable`, then the `pollable` MUST be either empty or of type `PO_FD` (i.e single-fd) - A multi-pollable has one-and-only-one incoming link from a pollset - The same FD can be in multiple `Pollable`s (even if one of the `Pollable`s is of type PO_FD) - There cannot be two `Pollable`s of type PO_FD for the same fd - Why do we need `Pollable` of type PO_FD and PO_EMPTY ? - The main reason is the Sync client API - We create one new completion queue per call. If we didn’t have PO_EMPTY and PO_FD type pollables, then every call on a given channel will effectively have to create a `Pollable` and hence an epollset. This is because every completion queue automatically creates a pollset and the channel fd will have to be put in that pollset. This clearly requires an epollset to put that fd. Creating an epollset per call (even if we delete the epollset once the call is completed) would mean a lot of sys calls to create/delete epoll fds. This is clearly not a good idea. - With these new types of `Pollable`s, all pollsets (corresponding to the new per-call completion queue) will initially point to PO_EMPTY global epollset. Then once the channel fd is added to the pollset, the pollset will point to the `Pollable` of type PO_FD containing just that fd (i.e it will reuse the existing `Pollable`). This way, the epoll fd creation/deletion churn is avoided. ### Other polling engine implementations (poll and windows polling engine) - **poll** polling engine: gRPC's `poll` polling engine is quite complicated. It uses the `poll()` function to do the polling (and hence it is for platforms like osx where epoll is not available) - The implementation is further complicated by the fact that poll() is level triggered (just keep this in mind in case you wonder why the code at `src/core/lib/iomgr/ev_poll_posix.cc` is written a certain/seemingly complicated way :)) - **Polling engine on Windows**: Windows polling engine looks nothing like other polling engines - Unlike the grpc polling engines for Unix systems (epollex, epoll1 and poll) Windows endpoint implementation and polling engine implementations are very closely tied together - Windows endpoint read/write API implementations use the Windows IO API which require specifying an [I/O completion port](https://docs.microsoft.com/en-us/windows/desktop/fileio/i-o-completion-ports) - In Windows polling engine’s grpc_pollset_work() implementation, ONE of the threads is chosen to wait on the I/O completion port while other threads wait on a condition variable (much like the turnstile polling in epollex/epoll1) grpc-1.30.2/doc/core/images/000077500000000000000000000000001370425124100154715ustar00rootroot00000000000000grpc-1.30.2/doc/core/images/new_epoll_impl.png000066400000000000000000001507031370425124100212120ustar00rootroot00000000000000PNG  IHDR?A)߫f k2]NWvuj}:[}~`!s{yY"+%uw>9͟G\LФCʺy+|.9l(LpWe2@)$ǽrozej4T Q.;^R # }Z \.m*T uਫ4]& B<`^T2Pd+T$?z $@b"mp<48D5s;"SZ5إ}T,Vt  E' P bA-JCTC!v Ҋft1\AH'~jHlE` @Q,m!P*b4>Րk+#1(>~!!JPimtZTCWXYIhI܆g: lscVw[J%%:,tc=E-(T+H WOr ۋdm$mny>(64{Zg-B0NY ڲw>Wķr{L}BSl&BBЖٲc8m6Qu~9H`[LS+TCGD|W1IBh}_XG]v3 ÙKǵ {< @f)a  (\Z|E:hcy}(ey՗멤}gvE;2<#6X/+!ѶT"ݔ{%[&La7bF-[2@(S ٳM^*/4d1nlǻfDle`ŇQw8b`\D%ڸzWܗ.>$q( ڑn}iWBQ_D&.gC/zlHX/F;W#o~39~W"wmp.;z0liْ4NEHNh49,T F t){gy/rw_A\b;{Oaf>6GƲӅ#uAid^Z owبPNƴy^5m>N;8ǝJD؋6]8Khb#Ƭ~K!]r^!1t |I"\('<,nA=u{d+Fhۃ̞λ&ٷ̘}vݯ6˒DBPF<+=N8!6c mA(1\wcwLԄ›&] -;l,7G"z=}A̶y@z2v-J^0#Ց e~WW̪ms~kCXnA0ZDtnoBn&/9l^KξH`R}<: ycvic G5M0NMq:R>9:uyR yĩWn_}#B $,|<[T@ Qkӥ܌8玀ٶA:ﰀY52oU? ];c@$58[/Yc?ctDdPwİVk}Pwf IcFǜ]3w*Y zww(d%)Qb]cbPjh]Enwsr+AձF췡[:/ /@YR@`*nAfƨؤ XezA+Ϩ@h0/0fWH,̹A<2rίT/0k _?%@/Xб$N 9DՂB9v T9 m_Zޅs+{[,vL3/o-3`u]k~M]9n9n-{}%Ʈۜ9؇S*_u;Tv:PiBԡ#tNǎxR)5 ݒ2ϞeJl{|ޔhg`6K;hE".r.wIo 7 ~"KebzM+G-l8IG4Z`qDY%Bĝ߲~3W}eOꭅ Ii ORtmGC #@A)T4GU 0v*n `݈['pA0F e@0X|X4u8pl9"F^-F@`٧ r~hC.s!5jJ a Z4ZRO㎠D A5ͥ!q>m v9]w΄͠vo 2-j&JgXLW6tjՎ_5:9[kAҸ".hR? So`d$?[,RS!R[^H]BEJ;Փrӭsu;vZW73CqPZ["V4:ZX0CyN>`;ngF[|.GלSQx 􇇡/A0v g)[MDA[wc'B4t- {Ro=17`T|IJ-fD|wҢ` ۉ(izk%L”Q=D]*QKZӔSETg4gLBy;h֩`IBb6N8lQ+Q.yg׵{Oa6%/ zȌ :ݣ/%i$AܜJ--m#B`A3pսk}:Ðz=$=.YG_/s*Ms0:PtlTnf_.!6iPٙkQ0҉[܌uK^)zT<xء.Nkl<=sJ4r[]  o_rBߍ!ݲj[Z;șU^gK& ^">#e2{F]hI{W8jHP;UV u @rtpwus~ @ 2"qFjDUrSot-{̶E*N:nJmjVUd=zeÈƭރx>C2.񠝞%^!*˷,?h7}NA=X vx>CxX>>[Lx0TKfM4RWG]yH9ک_|_|K__8M3{}ʟ(JW FX:F3>/?z_ tI[vw|PQctQu/ܡ4t@0fL02-zÈ`L }EӚR&j@0fP02,ܑѳK5QK* 14KdvHcD.s=!a,`;MٽO5tyR FbGX,-s@?j%*BG}SoFb! [xe;f^$UsgE:`%$Pϟ{yIZԲLUE" `^C c1X?k 9ܜ̀]#!LdPFbØf`)s@?ьkേ6($B0sԃWfX'DUSyA!qI#1A@A)h\3 Qm1/0U`D0B!1@&җnN=e=F?0>7 .790BA0`.A8俫TE/K* qRw s!6@A)=uj.nP F#bŹW{@)?G c>ƪR@`!{-X@;wRP#alZo`t;QFE01sn{zbٱwZ%[?Uƞ5c{&N`!D.KTGW-ު/)4H-xarsyX/xK #@Aڒ TMT#p*Ɩ]5⻽`܍m+a?z/C xF9ecc$XN'.B> yc5BR!#.ʀv O-yw[lt:<PsF/MuS쉱v?@'&F]+t?F cq O^H+W~wV%ͳ)r$^ OYN' ø"գg%P`nZk֙[؏.1i4ЩZB/C|UlLļNU s蒪VŒѴ*}pwN?p+O%~ ^F` 3b#9>Ǭ>JJs 9˿?f:cq;a3&.7gʪ=T$I꒧֎YVG@0f!q$qxU&mpgxdzq vڄ=<=TVׂ7$,xs3Ou[:9uIUJz MeOx ]Md#p{aM=b1t8LuZ.ghb'2OpY&Bڗd2&`؄zk<1}w뼾O\"aM= 1"9a =.PWwLvk P+in0l0@A05Q&rrOtŌ = ,8) uw-9KlzL~5ߊsIAfpW .oLuwmfLci=h Z_Hi$;ԕMcΥNAZM*/~_c;~ hܦ4?ƞ){"UP aFup 7k)T]"{eX1Q]0u O9-34#jbuI ]M0ا 1<`j@0L0 I^YUݘXd7Lf7M0>$1ڑ#s&ƴƊݓQ:~loUܔOP;8r?Y]B}9UMƞ^]8 x ZrT1Qc4USuLx/X|vNȸWvV$8Ah@*!"y=-;F@ c dK1iP > uO4Qc#ԝ!{LZMN cZIF/HS =Z4;qgRL]++m dBǤI viI)u1"4D``?jn*0}|?xBq+O?N{:SaaK cq1ʞgr ClmdkQk{N?,yFڳ $u߿Vqb SjIy|hXEc+?忈c;#⡫U≴fD YE#X;4Pxfg0,EB=Co |{l>8{i+Mp%LTAݕgz]Om93  nmwϥ6EҤ=ym_RMsfǫ5mza`-5aթ!e~bɽB1~%_|̕`o~Yf~{dW}\s1jkuS Bs. 25P `\h?%祟Tr:ҁ[f&)6gd|jM:\zWWԒzwa6%=30f\R?Vgy^gg 1q\)*R5tȜu0%[.cu>􁨻2a.sΎSqn/LLpSyo4 σOCx:u5c!^mkZj(=tܶDz#Nftż;,:~bMp D8Tw{+u 1\IGc!5:$YvEÈ=D+{Fj#{j}$u߭33PHƅ,{^-Ka[P#"vn#sЍhZ6Ou^J2!dRe^K@ZV F{.5IGK&CZ ߈-XJVN IEq#❠m[-Z[XJܗ9V;WZ Eװߢ μ#._: 5WwZn=tSWRuz`[ߧw v/ ?q>#?TCW/!,ߕ!n F%ٵ op{s3ցܓl"!iaq}i< `p-e~fs˙=Z"xsuۡs<3(v|ˎk#P{l~0\ץ5u^ض} ϥqBWRrܸ=/Ԭgv%qsg׀1@ cyGPβ|Cn1+Ѕh%̤Gs(_B}Д ̅9b U ˧T,^K|WnF뤩2)a4CisَPdD||.,动VWd8 ǒ@BNFPtw2EuZgN[,W~jb8 ^D\պm݂9SR-gvj7*t4/5gVv!:cӧkt?1$ɒjܢ'^2̱wͽ}IV41L`'0@n 1ۼ rYaᄉʃ[N Wב5e }7 ֿz i'_zϽ궼WƱ׎ēM`7'zGxOt(i[,ZWkizJ?w!PH cPEa&C&vG^R8GNn/,q.RK٠٩`Ԭc86#V\wWw~{,A6Om{{K;d>.0fU_3&Cmx$!Poj`l_0S*${Ʊw(DS&]skg J.M1Kv_:mc{Ȓ--GЈ+q:oMܕZ ,;yBFW|+CGU0.7'H}뼰ZtԻF ̘ }ySV' cn}5[u#*WٳK>Iǖ{oCNg湎%1؃u1_7mVKHqkC;oDQk}w)5 a~پ_uBzF^dpV!oNJ:mi!2q^DT,h8+];`͵D mCg̻jQS=s!I#WqL>?ob_[\`-pw+7Ll=i"Bfu~ƶ{/=ȩ+]vҶuiJTnRohj#O_q уvɘivf͜SkSJD*|ou,vM4DyҘ gXn:B kHŗ7rk{#R;q^/5Dڃx+G ΂urKizK` bfMݽ64a/h^Hͺ8o""qy*j!{`bvVꭍRo xdFoJ(W9`׈sN<69;mYL,b .^]d/16/zϭXzڲpzb(✃{c,O} 9{1H F$5͑(6㋣feD])jf>F1tM\,7`BloDǘ#lU;ʖ-? 5WIgѣTjQV{R^([X]wx.5቉1G8,a6.s\AٵZUz\wÐ-/xhbxL-8a\B # nj^ngxn؏yIz?MO!O>.\Gv#Ny10umȄ1v޳n[6HZev C{o˸SmvھA # / ޥ̉ yBiIO47dye4mΙh [E0Xy~XyMt%-.Mm`T0jG^G3TjiqLdpzB͇ < yhE]g#p;y~Iz 46e{VcTS.<f?j.9i;OUNBm+O #ABV`uCD0R33|W9qG4\Xg<*\s@0Y~O;>, ƽ- f>w <>Ԃ]B0 y. sq 8d&YTէ/ = 1u[gd^6`'_nsInȭ`lqv_4o$*Ș&;TXc n_.J7i%\Mc1nt^QNU`L8J0ÛG~v@@0B0jb#/b؎&nDnH8}49QFX8艹͹s޶)n,ZvS&`uDMY:`ַ+k[>rӰ9:a0_0I>,s54`Ų*Bn~5;g_ oa |[WK[nq;`31LԖ/[<:A?~A)bVH 4 yI` KF3v5эMfOϥ>#.mƵڨnlhMtSMFtU7`6Qn V+y6pm+|Ɔ\&t=[akުǀKmW^c }0R?#bVLHMbeInZ#gL Q+Ԭ~  @rEϰ#^GRȉ,s~wck'wl)8EyF&6$B OHi\+[;ϒԼ:VL,:=t1! c{Ƿ {\\S%BR}۠Sީ`mX'&a:;tMxcImc+-vLHͲ$),}Le6l8YzX}4J PjVg&uS;awJ-%[L;wl$g4.$}ÂQ;"AxZb8Ի\{X%tywImTwz.[ ='6*Xu\׸An:t-ٱ4FEn 2:OqFXos&Gz^X8g 'Ҟlv9\sȺuj|0B048vwVg@!Qv%,ӏń$>aIibFN-b/*e>3ީ`tʼ [c:cCCjwR+m1@8ZܴYw+ mkJf{Uw}gB;I?pxx7Ȭ 7dBS `̯`TawcܺaMtm%B1 ưG;+]Bo8c (SI 1aQw:_WO۽a˜&$ܫ[ #ZW$9s(6#TAN m88=f%R-RxG|O-ὟpZgs$z͇1Ezn5lvALuF9vC oن_Nm̅:nқr9A3,[8X-}/89*k՚y1 F1xGw Do/l*,s?@nbڠѾud[ o7 7}A;g)9AI`S,sGS7=9()b .X@ΤR Lq*CuoHn8aƒ:gȾr8pO FعKElq{'^s|+ӾӎQ_K_3TEOёK!$ꚪYO=1XnN3 dFN|qkAhhzev]Q =`5zBq'(_nL.yY@=M)WZDcHwk&9eiyշd '&DZ{Ĵ7:sf :Z( 骋@쮩 6\zͪ$[`&vY'm !T 7=u.TC:.ok7'.۳jv̋oQ+ZD] AFY<*:g:o 拓Bkf==cn}ǔׅhLz3h*b遤9IzʩWvF) jӪ?I}hӛETK-;:=@3U_N;u%0BkZV?=)L:}̹uUr+@Y{o!Σ0W5CA_s?D7z ʚG;uC*G;jedd$CPt…p?͓tiR=k; VV@^TbcT{Xd*V3j\N 4A(g F;>ǜhqpt䚪Sf ]S=O=i4#S+Vk;s}uܣbC S \Sn?Pd*ꋼngX-jƥЪ]cj}Qe\S `pMzO0~+K^yzs+n[K@@V~a@ѹIjyA5Ck?kO,7Ze4Z5inYOLzUuP ʏiZA-T+d{ 졖 {"!>wM;+o-o5R3۸{1Yeܞ2sd[a,S 3TO$YDQ7=E-޼%dQjIXE ,?&Vas3~K]7pIJ+C<-"Q- 0W*|9ٟzï?& WOiF/~_B׿xkStZvLzO`ߖbyA'3J2wbjn)~V Lfi M]SltΥ03K_%u9u8ρ.mP5w+}[0K2L[PQZg&:Zi?i6l9;F5tN@I}uYj.fXW#~tN2dm,D`LL0*Y|6h8㲵U[[qڶ}(oOF $H0XwGCڡw'-F'7oZW`D0&mRkݲ[=;#xrryW'_W+#.ECc`D0&.jT0D0^s澳w]:?t?7u#KXe@#j`dIs`cA FcQQkIqvS DIபqypI7%ܿʿh_N ]#1!#6`ܖz3tdJir~~B5 1af\XGiCj[Pe' gsb.X[gh<:uemd%U e֒|ݷw+Y #eA㒉?$[q~;}\y>SYC0ml^ #ѷ5LA`D0&/U??[WWK~Qw3&K^]Ig {H`T[uj27 M: {.ڽ`[N{`1ܧFc+c#-[NW ƽ+I / F\:xֺMjE0D[+ wp>z\ F s!VQ`L^0+@HNAѵiEFuJ$FJ fUQf!Cr|/m8S F#1!\j.T⏎ܕ8кZ ö|FYAL䚭#Q:;^+,D[/B~ ٮƴ QMx?U%J}fܜ"HX$ [v.hBٜK- UH|I!U, a'uH]_ݶ[œpk!?/W2pd? ׯrZ ^3_~f }[ah:9@9^'^G@PSuCe$+I~B5 ĊkQxWƨHML nT퐼&s~~N2'\kW&4U!Y%PL>IW㏧-{yyY \UbB&B*jeNUP<裩vӤ8^yFj,~.UiF'sUw̩õh:>$N EVX Vŭ8G:AVPEZY?}Q8 B~Q'`N }BEkB~<]"'|2P=M㻧#s*nTdY4ye[ k5jDcuS{'a`2C#<+SO0j!Duyg*OQ4ϏP5^GP}kS>@n?P{ d_,j&:n'4#wVf9UP5^O>!IqA7Wܥ* Z:g_ CT@g10o Iv$I}RZ=SY,r=#PƓAg?tn^"KP[,_a;|ɄW/5wE_z$~|611*"Of*OIIm4^"Q§yca. hjgL^FU$å'1L daTTj'̊?m"UST$q:" ^,?= U|$+<׉轿 ڏSJYY?\{:z$sDbom_lqLX|m` %55 s>kpO{q8P@4r4/P_xqшFlP*ЩuYZ}K-[ [(5h!8@9!oMTl=4qQz@0겟M4JjV;(+㠝t`jĘ+o7k.uc91j/pCھk%SvN}_ UPJ(4duDM+t@2B 8?񝷋= X -W81qDh[ 9"Yh;*fjrsaGDmh*mFW^G(xܩS NE#/8}p ㌉s{G7@ ]{knnvD+nn ״%յ6zך\iF]!q A䏀Q"F mI%Bxc?G Q#}׾29#?=?f^̙̜4;S#IzB}?)ljYG;N'mg+ИB)uC ^v$Ǟs֟L0:y#sGy&ݨUZӅpL"!'  cF;MT8)q>" |Ia>98 WL0{޾{聂BH|M$RR~wߍAcpTv#s{p͍);ߌ+$vo?0߼Yu aгM՜-w+SL"M3R iC0nY5C0)2O`Bsq%c_SaOG*w5s?b[Ef) !DZX)=roޕhܳŢmG.励ႺcFxxK `QmNq7!xCyQӂ~ "A.z8}Gy%|z4^MW i1w8h 6ZF7\EP'&RTyQA' FB!(5L vDѮ& ]t K X 굆y9]ЉE|(IAsĹGcEG*60=KEz"YR #Oʪ0_s1Cۛ=43qJwCt,x,:S1kGKB!GXfWB߆} ~~knuIgGV\B!`8vڏϙ]X===dJ|<'?KU2!BĎT~_/J;v͞+~,zqǺDFdB!M)ߏhp%ԏ]5|sjWr 䙫B!o{3+2A]aqA! W\wڗvS~9G\n@+!BWlÚ`C]\|_b'{d;Bs}|}$YQgOJB!f 2+X,?oi&s]aiy-~L?*<B!s>n罞{ dۨ+.3FbώEt'DXy+ JT.:4Xǜ ž ).s¾ q}̱B!ۈyy54@>%\a'gߩy~obXQ0^@ ۃXl9he)v̦ u 2 {>D06GV8B!cSjC?kߴ]EnX; ;g?c1-ԫ91*3%u*:+;,"BNs# wf׾yߋ +Jw/Y.ߞzrh.3W&Olm:xvB0҂PF^`jkbu~oNH0 B wfӮyއ8 i_Kp{rr̂o&q$6t;w w(  W F+LæMs!؆e|OS$-Y܈'z߳)Mmp87_G y1QXW^0zvN87c6Yظo&y|zsY?7aˈ3!B> X脫SS@@pס)Mѵ &)EejIQE?ov|"-s}!bWe9$B>}ivՇd~rc"Xpe~LEey|}tǎHrtB`,AI8"v%TQ{O0R,8$r#>vj`JHj/B!S` [zvؑγ=8k,N ˋQ_zϘf4ҟ -1y!2)jHD[#/=21=O0!By[vo=:f]4j#Bw2wXhl8%B!;/_ (S0RQ0&O Z$B!csjG%_6{3os1c;{} EB!2n>[ 7C֎LHF EB!2Ir=W{빿F6}]#l@ӔTB!B&οs? F 6 FB!Bvj=GS0B!2vo εMB; ð~OFs=[=L) !By;jp`6Ժ B!{AȌˊv qeG W˕WӰkM!f+Ee[ _]? w|q?0[0/_֟#7d,۬=?۸lkZ?SB!!ـ,KQhimCpYduN h#vw"suo".Im{0?|wqݿ~k>77wj?=h&`٠s?`$B!$)IV Cu wz5E_tRSR4/GCφ p# F;ZF(=WŸI9_?FЬ8zߍ6,+FgޟڑI98Q.LYq׆8Q 諿~whoҺCf_]B!#aֹ1'qsV*3- l7V6+朘pю|Yd,Z+HȚ+#|Z Z{vsՉ0l6 IoE(oazo;No#Mg/S0B!o{5WNG]e~F Cݲ s dVo¦&v//gk F+v2`tbю MLOZ*C=v=#!Bh!{F]t ڿ;(ŗwuqb-1Z?p\PJZ;Z0.\m>k_|E0ZFinrAfaj;`#V4JA:hRhZ,FB!B!e]Ik q 6DpM0+yΗ=᷁0#^yڪ8.y¨{vT̎8:;=?Zѳ?kG9_rT;e.8cñ#S7?5F돵#zŸ鼵S0\iߠ}6l^cePG) !BM&A(Is\HA&[4L0:'[ZXQe fIVpYak%{ vdS`$B!d|oE&񽸷L_=| FB!BF' ?`2[ &=")ݠQq (o`$B!P0R0R0B!B>`PNI%B!P0RQ0B!B())) !B``dB!P0R02| FB!B~KO~~/B!B!B!B!B!R&\ssk0nf3!B! O1ٵ1½;`B!B>3\NKAqܞ/?sڂqe<`׌眍KvY2}B!BgĊmcmL0Ų 1kh&Ê=E\_~Eh^m-右.ls0k;&2IH!B!B qWXXAYm/)@w_Y0Jf99GB!OϞ F؜kC(:XS!-[?^Q0V![2NH( !B!$v4qf^-`qs+ FҎ ~P0B!BHv=!w!*[ L&}!5U/(\|&raL₲ߒZOv#3ڢ9B!n@HmUĹ VOh]M s vUӮ F@[C&6;]uռ kS_Hn:!B!+Q@B!B!_-.*B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!dz.\#g{\2 챶LveSI>|E&B!7 kĸ6sg=׌ n ws=&kK'Ϻvit3}G^-,z!B2sz{ AT \G0jqov̂#lOI0vFcevב-59sf2t<B!|9!|fCϭAj~XŽ0XGc;u"{n!Ub^7 k`"Ki"njk^ ~Ѱ% /Shxo?הё@̉gτB"17.+5IavB!KqcV4Ƣpew'´°N-!Vg b ~M(ǔ1 v"WuxƵFL+J ]8WhXk.D:/!V(>H9?|De䅎7ki584u3[B:[}LU{M%%6¨Nssr(/}?x « !D݄-u)eS\mi;g4g&#ҥ*K v򙸎,LPE+rD'ǰqAǬONi<{{<[MB!|9L+HLXEw3)?)mqNr%ӭ0jV Mɽ Fj}ޥ9 tk>Ʌ˶ sE!h4[ ҚiL/-`T* ?/gL0Z@YGc"D@=o<*dE M̵z|`teaCF"cKf UzOwV=WβB!S1 ZteQ6U㲈kL8]`LCtXtOCY~$l<~6IlAkp6E{W3l^ՔԴE6E~= GQ3%S %J T1k65D=mFe#v)<'&!Ԃ)),Ģcμ9V0Κ`;NHTB!|2`t 6{l hwD~$O 4%XR8?38֊^;q%~)oJ5v4d'"$qڊ'`l8vv1ƅaъ) "MǻӶDóN M(xy`܎HGCaΘEyWz`$Bȗ'F0:#V`( G0o|Ѡ#!㾺H#)!}ND 1eJlz<`jț,~/!M"'p~ Foh&D\7CoOgŒzF;i([M"ϦLAB?:Z&'J76:`dQQ f؎$= byF0mJo FB!P0zDa[I +;BߗA9)O&XqgDMɔ67UszƯk 0Id:~O{lڎQSؾ³b#4Ic ܳNa]_`p8!-B;&Xp$%vBD}M_C!JEY6rǴIeC%UH5ə*3+¶y5:MbM(n{"Vnųu&\g(eMQMJSgi2/:B5Q };-rq(B!OMӠ,42s&zч .ΥЭU (&No>%ܛ/3^)l§NSTHz(C+k!?)ˣGFLǨol [aﴧLkk|~3b'͐˩6<Ү*bcLD)4&xFfR&zD8KOƓU83|eB!2:M&ӂ'B!hMH CUM >B!ʂB+B!B!B!B!BbMosvt?&|EAa'ZB a=!B!3#=cОӿ!@@&P"y&!BqR(v=8|;aW:`&~ amFa15mew [kB!$`b=1l73\+G!Ȏ+M. zm`~}p6aڶD;3"ӁzۄY/^6p#v.OD[+˱+e^ p}eҷ1cR#_)OGM_B!э 4Jh;΅г^4`܆SpV( Յʚ9!yƱ4&|T {! )=}yY"+6-6!ZKƫ+MG sm =a!8ied/ !혃P.Y0.Npv[ l?i4 SQ>ѩx 6-'pm{H|]>p>Co1`AÆO.չ*cl$ OGm3¶Q>peK-딧:#!BHG^Q49>9+qLE{OĽ i+DyU,åJaKMy+:"ΏB(Dy(Hw<@tDo)a&M-Q0ʑӒ{ #ՉJPdqvLێĭ 42ՆYLD\R0B!+S@r(SR݈\]5Z+ ` 4!>ƮvFV\#B0FwGWqFoF ;*E]Zᗋlwi! ujOk17$".JLIe_[%o=ern#Bx`tSȿJk_zcS(_0λ*}Jߒy9zAH!Lo!Px HݸtK4ъ9=6;`#Akzgr_:ľa Sێ DNwacՓ~ńQ/@|x`L._9z|!ęskC ;)jLh#ʢΏ( :AŏN<4ՓڶsuڑG0CoӼ)B!1uZ0HǢQ)={c#C!@ )]#4Ѷ&>.p}s?:{):ʖ}!PHc#8]3ߢѲ G|F0ΚߣԐQ~27Ϳ{Q26J0*;wDͶ/)_hՖ0U0lNp.j^.HOH!\0JaKȊkG0n#5۠?^@-(AaºUB~{)lhl9g!&lxWTݒ&(lRXA] 'M:l`D8n6o*͙`a)x6EYr9XǤ!5iuظ˧{ؖ ȫcز'Db`tD'ҳ<쐢y ?jB\FwQ[Ku;*?"Oz1mqM]fmAO`%bOicu!W!B (eРLU##~˅D8ۇq aU#+d 'iMBJ#i_ 4W>"^nRfK]A4[0tpU i|DFwEާiO:+X!*QW&AzڀgfG0cm|e\ /穠<5gƼ}W !Byol2yJH!B!BܸiL)y!B!OI3±B!B!B!B!BȘ$3ܦ?!ULsSC؜"6Ϯ8be6d B!dtAl^q(⾝?!Y~nu'#2_b 6kfH1!ByƷ\ !7H0~4 ƆGޙS0j1gEqz7`d|eW{L}qX r~Lv%UVB!w'(׹:~sJ0n@HJ5ؐmVJH8Mm{nn`q.-*Ѱd~^ör;֯Ccq Ǧ鼰[ڷlPdʬGM*^+֓e*8jFUDE,!N :#>$B!1B c; :!vrN'"7&tw?+" B8UDNh\Bh!@k"U? ֞MF8i6{u.Y}K"&~?_Ax+M="ϚH5 0;ƽc-0Q6"~sB$=B0O!qYGM0"I!h2# ƪ{Ѱ$syye-/Y=B! khU<%2mkț]ChXפ!7먰3,rzhM.aQ{ħ!6ھ0Nac" #X-BxI["}pR {VoqGiGH=D0`ӎkm~7D4#K?%ʔ%n F-".!B$9H|`\לQW0wJj oq1bjћ]?hkN~ƼuV0.->-TfB![!#GX7íڂ8ʉ#|4@+`_G+XjN<+(`Aюڑs)pn7b1+vBʥqB`^))WEo@Bl"pcOiV=GzcFw4E i){ܹ9.9t 4M0Rbus~S5|#mؠv 7MʹB!V3rF ې/hށίLĹbB"mriR~<*A 24(PMBaqnhiBTCʂ;_ 9: !B! AI@!B!DV B!B!B!B!B!B!7fm$g*E!] &|IEڄo@(cB!>|vo@]A~4@@HܞX\ Ê!KB >ʾ3O$g$ B{ϭ'}оs|15{KWaxw&'Sj~y;};2;!h G !B"m>y>7E73`\Q<7~>QAc=cc﷛o854ᇛ; UDCՉuq>}[&܁󎹞v]m[T65pb,#=W(SO*\YvE:eۦfϵVL̪?D݃i~0½W* FB!hXиF D[N"}T 244HSZ"&KO =:AR=E)B3S!CDs]' 'aq~_m_^qe>0]B8HC[oqNWB+# S CETw 錋wﳘnՈON<^gQD:<"RnH|p| MVEcNOg :ҳi}wZ C&spr@mYp=7qnB!$`@x4=1QgwoАL彺oO ƪY)Ѱbx{PO5Cȉc; Ƽ6s O{;i!x=;A*m[82Bl5#f6mVm%"4Ƈ8Y+s nWEl4I#B0ބgUG8;G%rwy9z<`yY2Sٲ`Uz&){Lk Ƽx)uo v;S*,,! FB!|I9c>;D8P:gQ)F VnZFF-n7`C!$Z9֐GV]@<B\ rfLFk#6Ѹ!Z$p܈_#Zr; u̠ ŗn`xʸ/D}P tc6TrЗ{CbJň:suw2L)ų- FB!|U |nj݄;$iKY FxѷS0>4H-4Mpr!!Xܔ"Do $#Q /`Lc&7.jSOD|t!K/`\t z4wV˗vcLO'P/=(m c ? SN9ٳLH!_𹩩]Xs{$S']x/L0 ,« [/ni#ѸwBo35`\brp]8k"<xWq|40舼Y@ZA3(X#fJ 9O}[=e:Ae,:&2%]^H!8@0 ]:/^ry=)< )քGHFσFF`t4R0B!5H*I0Zh٪}u*RL74D 6ͫcVD| 3woGl8/ޣsr.=Ey?=H5` SôrWf!ӢQ!^7#~6+e^N0wnҳh(h tַ?J0.1[W%fzWPFWJg`K Ƿ͘u ۪,mt;e,UHcG.%ܿy!B7naA 77z 9_`7P0 I%/^|MMf<1B?q~&|q:F)Һ131m"i.NՈ'i$,r6B!El.b#B!7i^G3%sA!B!cG!nID!B!B!B!B!_iW|uuE]@f-2m!B!d=^rzX|2at&: ŴQEBwAM!BI({F`Ү Ǝݰr̂h^nT?IFNc.gW!qb#}+lϝB!w&!1ƶzZ Ǭ\94qh`gۆ p N# -8؍Ƶl[եlK Gb޷a-oP0B!&1SS`B(dG +bqM[Nu_-;p-S;r XBG4+"^n=)3[sbExFرsֿfw9\ t"nni?.X.Maχpe1S˥K-`g{Iٕ _wnB!Whkzc3voUI P MrhL79\[Q G)OiYB\q.~sQ5%ulQfGyGG"}蠐Y@qMB3y c^s R*y\B!U@`tM0grJd][W9`) F=oC%GѯGii?"9_`z=c;U$9I1ʶA>{ncg3p) !Bk1-Q%sSS&$@| c;M]5ȋBVXmjL q<3fh2B2 VD\[1{7ʿQ/3/Dds0rҽ`m+ cy^ o$sB!'sSS51 F;5N;<ӂR'siE`CL=z»4;| z/B^VeTҷp&؋>]>lJ1%о[Q&[vM0I7*w{\ؾ}?UjCl{7Da"kŋVG8m@ZMƀܤül琶H_׸k on)gwn[4W 羙N06qj;Aw#q#BזfXD9 хbYι|3mzWU4܋x]@^gw[y=quT̡\9wCX&7’ D(>`kP6A{ݣ ؕ%4eV<gq ®Oyq&leE[Wp Y紈=3%ei95 8EgϢSm~N? F\ݾbaӰgA폪n[~#ʯ~^]R.F.ͪH \laf`Õ]nru\ 6ߛx.xoPu|J=3c~Ytl/înrϿ|$tǵe"lk#쵐N082:3~ZCw2TL0eS{:!#F+fx\V&ĹZBx\^ ߔb 1-7ަxTFFj! "^fiqXP=apny\U!xAj_(!7% !S/}(4/b)fY4ҢzE1 ] [KlkL=)ܜ^e48)Ő~R}4?%u[uJ1aY9KِqKљϙI_6p Ҩꊖc~DĎjE 0'ʷkֆF4M0[$?`U[2q/Z@rvTTuʉ(wuUN+Ӱ)'&&QaTVGξrswmH&~eV>+Y Ż OM?9Uۢ# 1 ƜJu]Sيtır]`,ͨgū!gLEO+ߓDȇM욐o#`B4Jx\)`1^I< x *:H06њQ|;&Hzy*g6nF6AcQu2f!"o|_3☯á5F 1|b@k)a^HPnې|ِ~c3D0 hF(1hxot[EZL!)֔\.(1<` }q}`Lyꄽc3,PC\ukM\1*|߷[cۣN IA06}7ul<@i'w&XWoEN8:`TB=lTRd^C0l#Sh[TtHfo RE#C0JN0YW35OU.`\temg@p:3fMb).#]i6G:$itrl2c-wL%Ǫ1,^UN aߙKWBvM]YOJ 1=1S1 f;|=*\xfLQR4Oϫˮ琉}UOE0lkzEӁ%WUq+,KcqFØ{ҊǹqMEo/GX.P)7=};ne]}ҋڅwzXOp/jKpBpoHnz*Ԗ{L݋FryJA}/MpY`\p%p J}se#ǮDpCV]Wqim%ga[@)lg 1o_̄A+>#n+, !wT{:a3_O~ip<1+z6ijq<^3ʥ^ehrSQ#Qשׂ6\YLsi;BM(-2Q6!rgb.vqvH1`,!QѸ f>%.bk=QU>u퀺azJmϽʄj\@Bp5"wصu:\'# imϨf٦*îhw;%[Eꅵx]kH+Wl"lۍmO=N:eD=&X:WE]ywq]1;X& !0Sؗ# LU)A$/3dgM(-6JpϨMqt(xGQLe1l8LA>J,s7x ~l'xF'B1"S8&h[>F=Ş+ܛPWVV~$ !3'O T覿O36ȶIY.<|3h"}3gG~EiWIs-y{lCh!fMvf24Vܻ}p-aDoD!$n(;eN]zǶu%uQ6LNX2'uFn?+_0ońB!BR4?f B!B!B!B}hJ1Ee{ `0\aOz!dR=P7aL47B!Ͻ MArZ5wMkK'-a vit3}H2ďȓ޻- Q{4e By,A,>D &,7`l0&mHw^A̽'b^n.q&aяƐUXvIc 79㈼zn'ݪ+3B!d(АC?]oHXi!>v!X)OC:!l&nʚP +\snWrK}m$؝Q8NI q1m<|g#l#ʪ+Wx.d2*o/B0fp ¹B-򻊲y7 ]:T- Pw^mUir l*ᙙ7]!W g;kAQƹ-:?a{S;u 6>x.Y}%q~C!Y>w"zRqU<*?3HYS8"_yB` #`{By[F^`̛`4ۥ`<4/G1:hl983^e+QDCv!į4}NY4c *&.;aZ4QWm4xUhHu&' O>"M2TH|49E^dPFnŹ5țAqO['J48d ϊr;΅hS`V1<Dꜩ!~\8ߎmT^I0+WE9J֍#B65'!eO-*Q)O0Cّ'ik`yw0q"c 6<@{cgx`l*n9nnjlgg4W߹fD8TeꤦcƖ%7zY`, Dɚ`oUˊ#!BHAߌMR0Zl>9O#6c^q9RW0oRQ0nQTyh`.L0n9(JJטHq$M3hmcZ}}zю]wrCwLT-7J=S *tv·w7eߍܬ#.*3ry [ĩxif`3uӭ!zT!K){;ҧ*/>&]\ɗ{koLtk2λpRʾ'0<~ KLfZgQv\]fGRgWԧ&É=Wkn KltmܿP0ʰuQJ֋9q-Qo˺7-'\Fo fMs˽kkjP`G-D,(۶DLN}qϒxӧ0D׃qCX9hP?lܼGwѺ[\jSn^udIHGy*Gf=߮~=H L0릦1`uwx(Mo\#ʪ`Zvum!:}UfN ᜋxPmyQ!{) Ӊ:vEQ `\Ry/P/GeǖhD@NMrA WԂA9QH*%tbIUch1 xԔm^/>'n}Dtb\xXZnLʊiS3F}iI Y+@ڤƬ[G4#-ՠXTPy'K5NRPLJ0fUyS~dP/ωU 8Zv.rq=aSI؛9B0>#ogBк<ur!Èzk[ӢǸQ?Okh0kNsaEHAP#s&Rˊ!O%.ޝrTX9?%J0TQ4/#a֮zQQL\WagK$UǗ^MU[ MOe(_O1J0.qgi n֬xH<~{; /`ECuώ3AЃ&ʗ vS]Ȑi^(Z0C\-EA㦧(^=/ohz_ etkUCnp,J bSvb ƴ n?mqRiP02IF-<1c-B0rUgUD] wkzD 3z'\/!'4 /U׉)Wc\{csq#Dh^ly": {֍y9&=ϾV0UGlehc`ǻH{NAmnaۂҶqxq.o߈ჰ6$ƀ:S3o)wBOoaG0"lw/ z$21_ /LB0Bk>PcFA~STF2VRRqHS/a݈3z'ѐH 6Hb.`/: bFEV4ԽW.-z'㟾x" G|D^90J0 iOyi$!On)3¨<; ۨS'0F kB!`_n%N׀iF \;[p5MaW-#=.4%Js4d!Y_z ':a.i47c/qBiɉr_Lp_EW9nGQo-vvSB!dLݑUDgI4ZxǶ/Eؽɬ%B!B!B!Bx w?}i!B!|Rj&z*RHp!B!O.F\яB!B^ ;{؜mjW3=wg~9{s>^'=7~ŵ˞sc_(`oFiO[U6ҀG-vq?7ovz|RiY6=ΐ=I!Byk9Bm@Xѳ d<%w AVŵb^yc ig`ÔǍ0MᴻoA(y| qkeIgo4 !B!o32V@CK{3L+wF9quܵq%nZy(0梜w}O.I9O+V]>_O"t˜Z%61_3$nUfm~gx`K}ּw^If’IENDB`grpc-1.30.2/doc/core/images/old_epoll_impl.png000066400000000000000000001304361370425124100212000ustar00rootroot00000000000000PNG  IHDR9?IDATx|dYY}'3S3f4hdDb%@OQ qͮY6ox]F6h޵e[7=Cdmql{꽿sN[u޺~|R{֭s=(E!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!|&iI=){tH?a?C] q(8IN:'7!gk?褎cIj<3ʥvӨ}l6INJn1!a^5Xv(3~%̢c ָ+sRhz:Mi0q|\^/dL L"k0ҮjIBi+9k08?]f6K"q_[ {7D ;/Z}rވub{MU[RWE]f[3nւ_cR9=t w]z iPwT`9UhJ uT4mD}N/̲"QE$ك kfW07E[Nl]99h&?fLY'l[U,{7eAs^V"y'rY挜k]19˒Wk"I~lɽ*ɣ"H':r%ܤݒ%,Ҹq^~%sKRr"Əg$H0g:k:dp:FAHhM2łA;+¥Wަ; h7/͋QrX1!D; he_1o򙜈8ma-9ʧgHˆ4޿"Ueyu뒧;|Iy}͸/BXRogf=WUe-FAuAU!o+/ aEeW^Chzt]ϔ~DLyWE ]pk"h )oH{"DԞ".4-ypU өZ3ϩXc"jVn: unJDk,[[5jkrJU[@gDߣ$B9+.>qgBUEIpEU,pR:*AjE!3׻)KWd-9~!ں,B*>hv+P&o굁77co%"h\!NϪ.9zRVt_"TL!$VBA[g }r[H5ꦈNjD]Ok)Bi s]bl;byzm`A>9CIriucO[1C|kyRUڑߔ_GOecA|ϒ*ڇDCs0!t=̆X0#?BM D0t9:~UYg9K=Ռ٩*7CL귦=Ljࠜ{LC_kD_V.׌kMZSՖ\kŸ^QU[P{y^t~i18i%ǮGOb[[PI"!^Tm~DGˆ:F;t\ѝX B!P= ҳ!!B2\V^ v@b\50! nP rޔKKu\R6]Yk|/ɔGߎѽ,W}[9-, 1.̈́}c$,-ybtS&fs!lLe>'(5_?Ygn !ӡޖ]Ƹ+k)=Qҩ覚:bv?z_0^OY}iݥ⏨j }XwC$/ȵ", xZ;ou\U_G eiw{`ԟe)!v]DkahHæMH@*csrүy`ŊѿtGǖr%c/,.°WUUiV%I"t<*S2@71UqQծ~Zv=e( +S[y.e7r5}4R~(qNm̨vKywxԭyCt}9)GDj-4ΰ.?S-O"qS&Tҥa_oFx@YCȎX&͠o)GdPO,w[IgqUm_s⹠֘w/KbIqCAj>{)oˬݪz e7bO1&')>e*z-ͬK,ZO4$EUY僧דfּQǭ\u嬲.07eoj:4å{Dl.(]F!$= a,bcW^.4dd^sD\>sM}E6yZhڔڴld{ w^)2ƾ`^/EhNK՚ŴܻݣrWҊ9-;7=97?&kS! $u*T=q/Z°C"8_O1ӆw[ tw1~h}똪v<%߹iNJ͋\"(F^jE}<.qU1lP%W'qYʪ5.׽'ڵ8— aU{3Q۷~z@֬=YU;˲&hYcTe-!qO+oqi[3RT.]Rq{h_1qwEtkv$1KtZW%j Hڕ{]5t7D{(J-~|y-"uH{v, rIupݡp^]TÈ)oܳ- ϩWV1)pޥNt3Ug/ZmUﮃv{zEUb~%ؚQ'T%\ Cp@uYeXTA:,{B!I沌-'D_<.cN-t83)D$i!@w亣Ѱ,%`"fETvʵ\D:ܨ\OYbq㷭k+5iUYϧv ]#߮X[M$$nJ@cy举i1Ү%urq5B! GђE#I0D,J =YѰ*.Un8HUxWאXp)up11ғ낪Hɳ*ѵUWs 99fM\S(}F譸m1`.z{ѥɩJP|ݒoݤ_U<UL<CB!$+$`@AEhMU l'd 3* z$0T6'B!bwoya{ ב@+U|-c"q[7t{rxF>{ITe~&yyxSA+T ""qET:Rde!6Y0\5SP KCh :{j14 Et[Xubg{Z7"Ȗ,1& ׬̪`3npx>ި0vi<# }>{|PK]^;r|\#MHp!!ƏcI4$kƘlOxmUob1Λqg x^Ut ~٧0ܒK>cnK|sؘ\OP 1C1,ZB=u<| °S[qnCTŕ2'0rYw[yլ0taKu8\os\m'B‡!Ư[/#YUx4e<.bs9c2jm Ђ9yװMYbn5+'r%2kMBAo%jw֜-GkIS{FFHty78}!bF3mw)BU[ {k 4o>K|[P76~c\׸u::Y|q!ܜrPhfVqoƐBH""E3=[A[)]Μ)$1$[F:S=OWӚא BHv囐Ҏ"څ-)zO`y!!$M!BH B!B!B!kE! oBR ׊BaA -߄B!--B!$rV钲!#nU2b=f7vmFBkE!a-V_H;`Љ^7od<ϸ5f|< :) X|5AIU<9<}YfO0pl 8zjFkj:{Z5;0o廻joĆ:eYuxgXGvxZ5t|uX&a (~뽕(&jZh(NSO|Y3ϕ:#^ww>?oIN`A!1/%iD7}CituG.̦\gF:%9f~~ţX֍m]r頇m=.׿tq_oy:,_k,}{;r6l9cбd Ze0$318[\r]g8OeJڐ.iSEܞzaǺ'IV s>0궾FD֌m*%cm[uHlW]MZmA3:<ю8oI:.kLYFNN_ƤNoπmuGɽϯsވ(3ۜui@dh>}RVYs/gBO&AWsm= eKݽMڼ:hc1tagF~Pg)XqҁYT#6s20'ng`-SF1MUq ]0E.7awlE-5YfT}EuyfjMLY>kZj2q/n2;sk2Aww(.YuyʨK߷sVp1)(5d_lah38.yԱVo[uaX_u_ >u{qžX϶ߍ1䀑TB#GJZNzAqp֥ C# C?k 1Ze9~v8?жjLen~U?L+m HWpZ ڀ0|&On)l>U;ȒK;vxaRO:|/} ֓VZ@p7) AOzϻ]]- }UYKaH W}4W3]kFئG&AWۚa xvgu;: Cg?VGnu [-I.0$=6m r6 3e<{,A'bV\ږ1Ϡ&~6iÚZ0.Z[̫JeisVbEQ~[Fİic|EbH]py:7}m[lUgbF~in1Y]-wY5 TlJO}:sޢ""\?tvY ɚ*2nO  &.Z@acvIMmp^`&sM"qmx^duN7}W71VmBɉ (` ܹ/hao='u0vd{>)ǺQSW- iM&F bBaHR6q'-0Xk " 1ൃp\IaD>F}1eס-c"duԙwnC5LUuLԃK)( !J a C6&U9R,0,A\cpaaXo+qzy]b1= &-C/V;d0i2m߯Zw%B CB2/ Nn O( J>Uk ) mah7nAsVࢪt`k0$dZ(`3;( ) [z?tVSea{raa#4t"f f=ڹfG[+w[ {o稼Lf"k:U hsB( I9,BaHaJvP#rl CrH CRЛ5?˟°~CoA=) RALQgSR d>Aq{r!!00$$A`E˟YAaHa2̱\cHaH( ) Iljì` C Öc)dA1k ) IJ *}.OO( 70-S\o {R-NtEU0Ip!!!᥷ ,BaHa2gH{r!!p%\@aHaHH Ut` C V{y?k ) |`KaHaHV9˟PRoɠ:=) ^)>' 'Q) IJ gח !aFNG3 mQ10$$HGǬ` C ævR=0{&g^+)eV !oɺ+e=0{pA=R( ) ) I"¤Qfv !a~#eTS596c*s=) MIC CRУSeY'jtm)Dk,n^°[D_pS_0)(qHaXJ$#RIeЃAڒ~C,BaHah^ƒ\bنqk ' Wp:!!!)OH>` C C#`AڮL ZqUvb6命!f3*)꬞` !!-ŝYE˟Pf{hA%T6"t'7KVUKƐP!' X0k a;% 6N0 Qhkf80< 7D ndnv55~'qkp]bhՈ;hgLa慡FP³PH( !h':^pIEV]Ģ.Qh(ᅠ2 °ŒE) ) IЕyT`'a-Lx1+Do;E%2!/4v=.\cHaH( m̚s*?0̊0Ėˬ2-LqHa# RB4Ǚ,BaaKKhKIPR QpRq?0̊0Dp-M^MK!!!&x00$@W6'DQ'YطpϨbV~=⾙x&80ML ƼHƐPfƚ2DKS0u_8Nz`vV3D-|ݪuDAi-BaGt]2=) }BDk ) ,<wqRIT02Gf DCDI\d CL00$$ jUqhn?oXi3,Ba-RἢʖB7 al!XS'mrxłJuX̌k ) ( Қ2&]1gR4(DKf?'р`( (^'4ciIݥ00l LV^X}?I-1X0pXq QL_KK80^>f°aΪP;)a`M  ,Ba=a_o?mH,QC (ؕ23mC.0 m`tCx?)'lr0zD0=) o^r!alH?}v]D\< f?0̒05c/Ƃ+6CMIpnB C Ö'eb ܓ4GX°=R芃<MA803M-!!;3+X0j,BbTy6R;8{RSRƐ0 0IMyD( "0>Ŭ` Ô C+DoG}IfTB80 tJh "RF˰~J<0;gv aaBBssm*GlBZDqHaxL4^IN6I5Dާ˟PCB!tʡڼI_srBZqHaxكG \{] C C_lY GaqY0pE:fr%$jC COpAE[IR (Q f"N4LO( ( J "5\GImq=) }K0!^U_Gڎ5Wi^|x|Iپ3k'k00VuKDSkQ5 a0/X hҒ=) p1zOzb^^?QmAc'} Bp CB5=CX$1s `YX] Ғ=) 3.s׭aik3 heh}ЕNyEk"0L0<&u5uZ}f4١#_°a^kÿD%Ot3Ux /&ϊ0Du`d)=,BaOa#jV[XY+;"~UH 9M;b_|L|Ϝe)V< \P.3>?Cax6= Kر&˟PSB-FAbs{HBZqHaIUټ@9T٢gn6 !w]JI f{?00L;D(UQ7*LörC ÚU"P|g%c=]I}Ǚ ,Ba#al 5AƉ&"^#IPRFUpCKo_ZFa7cvY'1 1p~Yc8"W$jC *:3> 'QFD*[z8m2:Ƭ`  C6%:%NxNKKl80M|/,SR":dc?00q'z[Z;Ez,80L;'PRfHUquK$ Ju'gX0^0/eXnq:u~UV/p+10lgVT>ya$Rv'1pS[1L T]GMF(80Tkk ) `\R[S'X`s+˟PI: k- "acD!>@9G!!azJ+Z'Daޕ=i3m˟AaSa8"cr=1l80=y%L+oLˬeAW`f ?00>NgDqŨI%=) ~bBRF^c0 @En,BagaAt^kYŨI{R '/-k ) zn0cmc||( 3. <eMin$2P5i ˟PEbpۮ$8ji uC Ö00̺0$!CW|R'i2PEZE1L'qHa2l10rdHrM( #!17ɬ`  CהufI/qHaR?%e'w910,sh[ΰaW ,Ba@aQA[H%=) V{XC޻G! "P$$60L.˟Oa4a؈( Vtŝ80l<° FtRmE?qXpЕuU!, 9r$t\+w!pa tC}.VϗT B'pf˟uy"0{aFI^5QlՀ0`֯'$FvE5$=3:0Wɶr! /:-+J?!1:_ni |ÌsTysnz ̒G"$6` A( VX%]axNaM0qКV4EJ:7,B"tlgnrp(sC vRo $սZۂP -F,l:|J С\~~AvWCA=9t!VϗT.ep1-Ƹư8#GJXnݱ 㤿W<W.' nXЛ\S:rk>3Xt (%4YZ|q=c*֗ 즀;9r3NuЬ\P񷦓X@#S`RWe>Ba.a/pKqmEHM=rЛEP7i0[=H˟0dahӮSU^q!MҵQ AR߱. C(u2sh^yNz|vTeÍS&fď0u{|=s, CX`1Dgg\j֬ 5}°KS$]pY3鲮yN-I~!Cғ( & yNصˌBHcLeJj"nAOwG'c°F6\K{5l5$/BϏ0Āa CD"\ mXoC n( WI3n9關׹,ݗea15iRO.g7Cur0 a8&Q_?VxH Vג0W Ga5{;R!$vМ]Vt][=C28Qx,F צ10$qw5 "րvc뗴]SzyNYnٸ/7aXn_n?wϲ0VXD[QIfz/2[d]x a+0<Ȝ՟N9Uŕt蘇dPi2^y1ژ᝶E^0$mdQՎ*j zJ7i1W\3p1Udy+ZnBBYw C3&_wED=3԰04mtb]!r٭Ǚ 18gv Cf-tSRΗP6ζ:VHaIE< 5+ ;ebeY+"xZSա[4lQaǭfni׏K}*YL7QUqAט%9*MyBޟQ45uIn>#,<}k~Wའ%LvZDBhpKMxYa82Ё `s3Pc2ƶm$ ;]\7lN4&cO؏*b_7"X;B*:C> Cn1z"QUưKUf5I9CUZAk _[`¬'ŖQPIU<[6"A(`sKU,.}M-ҪUs+5 2{G 6{p9a={cE?k 'p0$Q@aNweѭu!ğ0~s=*) d@cV;/pFG)8mU C3S& m7a\_[>i.~v܄aEj TnGcuc|ޏ0;\P ψ}5 :nT%ȅCr옏kkbpD@1*LJ}qR&\S3aJ#gRJa]&q?Hu]Pz vk߯UNϳe\y>߃yW?km5Xp !]IfQR?jm}ԃ*[J[ ? !a=Y} 6Z(ڥZ8tmA&LZl]g֨kŨYkFaaS雊=4M<&<0,ij) m5EϬAw!kA,'[׺a`Wj'}RU`@ZD¨t3R/0eI{~7Ss[OHu^v0@SF( [Vb}@cuI}OwS{X ðZ(%'RImyךR n[[fZo ʛe L)0G]N:Qf}E8B7Yu?v?Y,y-"lیM CNjǤ)eE/ Vє:Juy7dW84Q4UG) s.VA[Ϲ:ǿ!ukNK!qX3. =fqs7Ppo(b%4,ƴ~F+࿐=#.U A I]hSPAW]-ʝJg=o~4#?*|V@%GrK_O.qdۅsV]wTyb.}XŅwcDS۟\62KJ)UzBU[t欁r3uOD* 7ju=KHoT0e}Ѿ3g\;}O;9:iQh1̂2{i<};ۡ:Y}2Fx KF Xuã;v)N%M>+{LaQ}ޓ+!?1CP?g;|沓NDycR쌢D]j=OJ6lZ^3O!-QT,q{  ! O"5Aӧ۽^yTPwJEaƳa:1v!q}O&`:!jwXRy N"$?p;At$| pЕ=(c2f> b6m$/q9Qe k B;ZXrf:AK.2%'U #k9= g)u1Y`&8ȖHWQ}+WL%VuYU/GT,ڞqe/<ԟo3<{կ~a ,}~ SavUu(Yc.g{>D) \VÊShi$<ۄ4A^X0Bw4he$$`k۴n*ܧ0H\#zD%4f2qZ]߉^٫kIքPk%t S5~Cڰ¶uӲd! 2:ȢVk`„L 6!G ]~:Nhi#hԹƖV/1q#n:DKYDkLҞ,Þ'Ys YN(YBjxnLXHU'WYDa$$j)29֜>hu=>r BjNgPу<6̎s Gȍ$-83yI@P' S!cN~Lq8_Q/aI(+95g~ٓ$#w_ Kv <_v҇~Ug!!DƜ u2#&-'$}I 1s  ץ2&1{<1u7͏Y˭\]^W}iyy+?ݧc;a|>0y{@t_q@5y5vcs5Ƴ{ы^t/x0Gy7=ڡ1p, _"nBԟϰ8- z_w:%noAH<N:sNz3K7=>8,Lӄj; Nz;4P$sta\a) ID[1Hq繘LI*{`5zN`xS.B\0>ON֟d#f+3ύ$OvbJ-K̊ [JkROﲓ }BO֟r =-[\0# CX_TO|IKm'$ip]a(,Xdfx{X J6?ӧOA4k!$P?'t=[N_oGrdu;~$+'='v}yq0wg2(;, Î xؖ{;;tѣ׳;ѣwzmގoM\,{_(e1=-`(Aպ►}'>`sA3ؠdX^sr(+;;:c!磚 1ũ,9(u00000̄0D'3[~``yB,ri C C?:=gRg_@aHaHaHaHaza(Cc_QKD!i$I'7RRx6.\r@aHaAwJ?7wG*DaHaJJ+GCC'ۘZu 2 Ku\>N:$C{o3?~ È!i<خe% d[ 7}z?00 j}`qn_'Ne+Ja08U۷ŕbpc0-Π!t玺`vܯ7+L4/]=C. az\ YJC/+]} gn6sr0~ЩcXs!$fvIl( #h!xꄆW;{ fP}>![B0? 10%~"lA>S"BbG3przv$?zR<`-^c xC|`_1bTD( # aস3x1vLaHa\a p%5'*0@4[ɪ0{t k.p$cra, Vh 7# 1 m/; "tXޢ=yC0*I̎LĮʘ-4 C@x `a _QE8 =z=<4 psmJZ ;n( :Aδֱ8 CqmPԓ{?[[Wz-v?Ey?zc59<[۶N&N:%0p#d s7 [Ti?.x3?}hݮ}X ??KCxLm_6׌xO=8ga!ڕ } cJ)R -tͤ{EGD3&^ޙhP_-&Yu4'JڮcZ㷛{Y*|CÇ:Tz'ݮ >CAv'sԙPJR"v{~iUP'7aS҅:[%uvj3c0.@Ln͌*G(]p [؈!S̴xGCauQ44(ihv xu':$y$f 0[_tMObAGGa']wE! * )n^8 I܄aRR;!uӍ^[zm^u8Q/Ma.5i>W]XW~yt}z- Q5z F-Mls7`-D,pV"A˜P.;K׏&F\xj b)!:e_ äOvU$^;1mZ!21瀱i6H7Kp 6mA6CQCR30r%eTDPI+x0`T[D! udG̺@)𿽷Z=CIӳFzwM\WsL0D'Eyb Y%k k=Xq_Gc|[lP8tAUu.)T=+u=~yQ7a/n~kAl5ۿuf;!P>:PFS2$BiܼR?a CX0B_X 8}bk=n1 bI`}M$CoŠfb^}Teۢ  ⬴i$ a [63<frw^ OP7wj:YVIt|aE@Ƀ!" CkEk[d`}&E {iD#MDǼ_0!&@^^"O'8b)(ocX[8?V,\ؤRRZ0בUMxi'˂0֔0" |a!X똹~L0f:Vk; vP#!vHõk ^bٶ gU9XL_([d֍8hapi+&[Dɶ˿؏0xa(r;Np[׆-,d5;0I05FbIm#\&ZK^ J@\I) ۓ[v[P$^J5K(N:-F\"H'T<ݧ nazI CXpN[نIN̂Ipl&Ba|!_{a0 J vPG~Q @i)L(FHSd H֒˵oi+[4bO]C%SXMN0e=4p Z0uEfT_We7alS?>̉U۪?Ò XKVaZ;>j1d_GχsvqZb@`nvX#8N !u{aNanaWM:fvBc5%=tghac/ysTo0|_@a iYJ7&|G_X n{Y\$9l0kʑ hZs_- :p aԩSX!~0 +ʹf0b u׳zgZbapCNu%.zB*XOaWҨw}u0L+iajхގ7#pS|  * 3, 7φ0u /XF04lq( ) 4◺F000l{ڟl)N^KRG4\Tm^Sb=>2(>kZ( ! 6:[Yb 1JVÇȑܕԧ\빃im[']s>j]9tg3QW|;8G`rSRR˼*I4t;;䌱r;.H"=UޟuIq!!Ss C C>#r!`UٟsUdY=a(bPD]!Al eI'"cNzA .YJn y5 $EscO|??=={`C޳ ,cN^I-qI%02KCFsnyaϽ ؗU9L{\kq_>r8 UU^[xU^Hb7AX Ǚm%/&"KÆ=BHb8nᘼ*)FaCr@&i a׽7* >ҿ.Wzq?=uy5^p+/ҿz=~ف)'uaM.J+/zn5ݥ~hިʛ:^(0>|U00Q̀?~aV Is["SOފS.9l9X\]Pt쌪z|ؠ0ACz@l;c?WGp\n"W'O^0|I_U彻" C C Cv CBH r7%"޴,ժ^AwSU$ Y! :ͪJقEޚ˽M .lPį0%D/L;{f3CkD=`54->tp2~o遻*tW~w}˨3J}} dc! (!!!~!>AWˬxFqX% |yV톤K"@lR>X~OD[]TNC0aމ(a-kĘ)B^k)TZKB:h!UzC]UuJO||wu0pUVB C C C (!&Uud X0:߮߈eweB]٥UY77-BEuy׮9 axhrnczauXu#°C0! ΏgPsز( xk}e C Cw À@̃~VCBcHgR4+ oMy÷Tڧߔ|==HZ3ߤXsfkrL_[~5ɫ5uUřgqok^4A}]yд}mby{~,ݏ_KBސk E^U&pu:&܎f0pcBRS"/g(BoPۤ!f E0zM;!ļ nThaHZ[Q{_"Q5;ؿΏ|׷}۱VÅ= ^gc߿Nnu( cO5&T2!3SҾ\&͝00$12<%cD3B ruW:8^?7+ ehkՖ ~v!nBoWU󭫊{縪X:SV_[p) KɟV5+MǼLѷWdfz׻5׼ug<===g~wvv:W{]k!=OzKbqe/{NNNMozO-oy?~{!f°h\؏00lC5; 6y'eLC]s"V6 ܮ1c>a =P>܄L5PF`X--\Dk5,}w>mm+!0D}Ѩ;S FFaH[N*11e,qVLBNX0Ԯn vta`Z3,J3%(gLlʾֳRtąm1LZYU%UK+|b-!Υ0$qn 5-_GPu߮U^S°.X0Ww^~Dj^U,xH'~׸6UOasGEW)X) Ɛĭ!RFd]! N_7<=!!!!aL)Ie{5h|wWY/ş{FY6$V7e;?jp-{-V(/̢0̋-DjR21QG\{BqJ;]G#~=bm|pl6喥]M|OW{ƶ藶yE( ( ! wˢv NU{\ 37'PH]>/;S ~|~0Э]$LL!ZkѮkher) UN:nUc3}|&=#.׍60db0$4 CZ 7U|ۥ?EIe}ψ0Nz w .afNgAqa4@GKG)-%ʴ[_}p8DU#BCP$… =q]Pmo{[/~1!;<s`ukˀbLUk04ș>UeDQD^a8oXŰ!Ehi 172h07Q4ǽez͘Im&X !00$\cHaXmA_װXjρںPZdK@L/wBhTqk@px-kA4ocwιx},}ij) ߯?q1e1#?/$򬿿M{G [u8Rww-yE!% 0χĽA;Q6}^o@!Q k"o;up$@AWuCA] "..'bP*輪WD c90$r%`c;rG>j=nwW^֘%QC= -Pp Lq?A$At(za;BP:x a~) : .\HZ ח#| |pSzB a Ѽ|.j^r o8;} 3Y{ַZrp^ܗ(;6}rZᳰD꼅 Ѭ"Ƶ_s)! =Ngf 5SJU@0~Q) !8'~I;!\ :6 1x8Zb7F|A @P+h HuLhA2i EǜbAf-hM !,nx h ٿ׆4:7B .f>BAj--8-8õߣ-3k3=\> ʺz:d 13ݺY\kMpWt\( !xF' a!V"X`)B@,h!,Ix uVial|,DB.~<{=)8#d  k`Y1 *@h 600@ha100 *  .7078#pjϩSA|쏵>g=gﳷTMTԉ=DiϠN!%Zm%=1!%好"A) HtJ|{**<rN#*vվ:XaHR"u83h2# C2$%;q_/p4N2d-ai'y4"2v3"g^9&Aʷ~i e\&̓]? Nf}Tz*N>=E.P ׋PJ)Bz-}YLiJO-KD~_\ XN'БkE _/D4" .~+EHi+=y* ]XX#}Ex!&aPk?܆Q[{6gP,qIXbwZΒN+ysbI!yk?*)Rg`° EĩWH=Ki  86; %-/d!> G Oe67*)}[ٯG>ԟݑaa% d(wE9ar)␼f-!qď20K 6 "ayH|"4EJ~W CB.>a:=枲^처?]Rys, ͓Mf:%y~`yCa75~-)K4!O8}l;$k8p;uFg3W?6 {[!$JnG2Oz_NDaH!qB2갉#|nDU9$ʨ(5/]#d?LR{34rQ^ZbH567Z!kCc8r&NE.zck zQ@ {^q,#mr!?Ã6PGE>oEY(^0(z^0TY^ĝ#bʵNؔM,~] >M>q0$2WB!o0\&R<°n#c*Wr;`uD:V E8U#s2g[h!#V(#;6vn!=&j/&m-766_ol%-oeku`ҿp[8VBL-c Jgk˾F)\)slnV`4t,~|6nGҸ`vvʥl҇WL6sf¾3e3vh@=! ?ݶPe뎩k'170IDATi꺏klVqu;ֵ)>2!^TCA0Ps go  Cusqo~罌ٞ:Aў 9oe| B~VN{|Ta[~da5<졛B!Z}K9ani:Sbd ,a_٤"ާH8`;VϊB0L'8 =e°Bbꄡ \yoGP"!U ^xO㜷!UJOW9@>6!-[z)Vgs?Lo*xۉ?Hr=#Fuƈ=w}R CIw1A?o km-0TI/v0<1/r|ʡȽho#R?ֆe1! CՄȾ5wq:AGq\̛=׍Syp'0;C:uut9d68!C6L~;%Ap6&_'ɗO'xi% Jf~'W0⤋sybH&CP{FoN'"=gۇ=rm7Cϙ =w}D]sy}[H~*wC2YJ+"T8S&s]IIġv:z0!} Q}i45#n3OcRHCUW^ cӆ+=K'X=:񍝜yוG B!BѠ h # !B!鵪_=8#L[T? RgLB!B>5|UB|jH_COPe]0$B!zʶJB!B!B!B!By9ϕikǫ!Yn2|$J:txc COwi@ɢ-ߡM!BGMNA%3,^| [Q(kz|yQs'ܯcT?j!R)"w ^}ymQr,YHՐ,>O!B^M=) c.̎EDNLSA0,óa)_Q_FY5R Z$d'BEޕj^bq&ސ4a8넡z\a;0 ]"Mһc'm"GF @u^Ky!`}!}6Ji9•d:ma[JrIn7X B@1/=h0 CuęCY0D-8)W 't+H /8rb؝sj3unD:gٮCz݉ kޤKbDp ͐ a.ۡcmzRBpЭMupz UM>YQtU#(# yR~~Bh+c Nmp5%o߮g9fJW\{HĽ^&̅. e7[b!!B~;TV{ahoppաaG;S) cy:0ib7@V]oͱH>zbhg xBN~ Yq"q'n9W_ir{sB0 ԑã4Ս`6LGǴui騠0b3+:묱׳xVw_HhBθz9OB!/' Ց IoX7Nuʏ9S~SzoF*Iq09N^Cp!oy<0܄X^=Wc° kxp͕Ia8]Hy=<.c0z8C "m/r C-c\GuԗRNaؽh# lr {."CI^;;LgT՗V9_Di %>!!h:GqB2>Y2N^8o2LP $(F_iT\8%3[hj#LhgOk\,:80!vea쭈9!"dހ$-\'ks:Caw 6;zlTWWnWJkƭ28q^~oS wCljDlͧng=#>??G;Hԁ^FB^m_z0/pNaX87ҥpÿ04!}B'Za!\җFi@|W ;cJFC k,7n9TBz]~fL-flýH>a w Qyܳk{s% ~aw" ؐaS TXHq0DJO,B^U}3GQs:1䄡޿߮k͵aygT}UqΖ.+8iNΕ;Qnwi'q,AzV5\]D[2x7\Z8L׈ؔ.ArWHyY a'q‰Dض4Su_Mފq.%scg'^O /f[x|T!Smr(z!}B>1vgG#]8~m{%1: w{Whi/nqNKܿmu8vZqeݧ'lggs{=|^"y5i.essL>.JaH!Uaa!Ap a<P6{;$í0\윥ȃ:R3xObFp.g!EkPJ;`1q,9hl}{U܆`|_c)$/{XӰ89oqn{=8Q=7lpNiNw8jSW[#N#<пؼ4yo©6CzV]4fr9waOǨ3hƽ1a\B-ı^ִS oO MX56zjj_Z64kG}.E?xG*jtIۍIQ}k![Ecxg~O{9 +ا=nH6j ^zʹn^U˦?zNشp"?=*!!礈nn1$CJ|c80Tql\ѫa[uaaNɸ1NQ0l" ]#8yu{+g a|lGW3 G8*Njxo;D:4N, ! kwXb"̦ÊbHApj\*UL5:`:c8fWt cVQ1FkQtu{ωʺc'k g,a8qLuk)bt%$=%WD5Wwms%'2pbʬ3*ڊ nr0!l<}) oqsgC;l\&MeS!&WNt/6LkvHDv/s"u -\ό( !< 5<"N~!kO, sمs|0Mݦ0Cw]҄a/Άq|2HSCZ}>b 8r%~_mmNIk}HaX=wU$*fVC23#F\g0ݔϡ^]\?EaygRHxCo:D܊=.>Ml_+0E;Qa%<קia,a8#y# ?E Ieah_q°m02iw0< kH\ ^>oNrq/PHcݶ|"Zs(sϾX<( !!ߟQC"Ro?8!(;!c;06ES {&M{'}̜t`o3$CN@|aatZ7m C;AuΙJ:y1I#K9~iQf^;gt1dsC2tm0섇#QOn+=0 # cⷛS"m>c9nj7òmvB% F. -jeNigz:e'v9669wωeIoHˑ{22e90t/fq_YwQBy3Pwa_uF|fL8p΋F")={fN H7桾s# Y(uxf̓~?Y~t"E')"m!yqRc保+ 7 fGīkbN} yR̄S5ۼqoC|s'tAP!s2$դ uR Df8nbr ] o30v/8j|5!z1am["aj*  _rq=Blb_b-ZcD=0WZ+ U$M}dHs5" `Dž/v Q (||FN ]MW1tK BiHfnD^YqÉ!ʺ{`k2YPU \+ B^z9ZNyi{!UIqVur3<44mRLkܳ)<\p+8. 91e\1MKéqKUgӺm4Lj9>_YkUar6Nv>3.[Ξ:SelVW٪cבr{Hf[@8_NPh(%W:|-훦YVH&)C2J+d'mCMüc3-rH&i cFH&Qj8[1av\}X@N[B!B"B!酑^Zk V`]%B!|B2orOeaբJ@3B!Bޣglc4!B!B!B!B!B>vJYIiYr4uB!:,a|ύ|owm~ӷռ3x~5=kmPB!3o}ΐU"2>@lKՔk !2X0 g ߥ|iA*2V =i°3۴l*9guB!䷡בףS,o^LdKjJ8pE|KlvuħǗ2kif_ߧ}=z~0og͜68m/܎ךim쿁7m9s#]Fya4q#/qD|ZH MqV۝.=rս@7r**oB&=󰟁.uᐕ\鹻pxΑ)j!m8%y!bk v8_l-k&C -~{tl xh3Qk طu!p$+(CW7|4w{ -sǷeKp~WMzaH˄9kƱ&m[fiv=Nٿ eQ(2m&aʔyF=?8dʳp >&"n@)NLm@X+fsiuHziH{lxu60uR5Eg1 ~O}3mzcy)8k)ם!NF!meaUNaX}{ 巒CκuhQB!7H kvڨp9ogwd% Nyno # *~ d9<o0Q3kHU[> aVݹA/>G#0l S!B!#*Ej鄇h2h- !j# ws#MuߞJNEe a9<졫 ! !Z}K9^ݞB!V@ GfڤAm^Stb왅nHE*)7^^R,( cy&LCZ#.Up/ Gξ[~%+MFkC C?]:ahz>EŹi{'!B~ B2o ]8 E$n:ǦI f#R Lt# sD04SX\uNh# "ePYS]vHCwx\vyh:~ץ{*>01dҔigf|KI0P#Ypjɴ[#|a^v4MOMhG#C*"//NP~ExX0yN+ O ֈR>kbs܇uGeHai݃=fC2Wzi^|1v/؎~ [WPgNMUm}B!98gԉ>A˨8kňT񨓂 3QJ V;NdǴLڶq]˶k & !e*"ygڑ#io^MN2U0q݂q6#B5)W߸+IN:Niefl̚&}Aӹ^ttL[!uiGЉ ֩FM \M1<zX"Kl~|K<؈ʽ~s1cQ&)!<~kB,~G8轐 uD, p. 㞊G8!Յ2jx3>̓e3m2&=N#/(M=aUli@DUWyNazgL_=$k-9lL{eToH!, e[縕 ^WxP*j10.u7+Wa[;3^9쮓x8_9㴜%Dޣq[i~_'黀5-m4qv`Z&__=G8E9Գ{sn\]~õh7Y)QípĿ@ϡ^!Qw6rԇ!җϡ_[L~de۴)hGz9ri97m*bϜ{d!M_TmB08oqfʋ݇eʵG/Gũ 9ğ]Q9D~ )Ϗc< s .!8!u+ +d ϐq$ BRwaEFDv)9Ek+t3a-B0I{iWZu%Ɔ7كc!y^W4j|]e8SHǙ)Sֺ2 ȾN, ce7$~#;҇?/^Ϛt^ UتxV2r|Y\ؓNte%цM[wֶ%ؽw܉B C޺f5DDC;# ! jaw' ᬬif\0upgxZ5mд?gDSVay*Auf/[y6*FV݋ / O=0\Dݨ ^MԳwMW'Lw l2{Žk-#ѵ!s!{Qqt8iNI Ø`ڹq`9G{܃N~ [*?T{CpN:bKisyg 'NM;& 82" ;F]=~p4#`v [V#i3,,BOe9Emxu2(JխC'ͅu2@е]]fX.Gɨ°=4\DdvC+}1aGnO\^ ÄK[%{tUB|)$4݅1{vqv6B%+M>on߾*RǑ/-8W c7+;9+ ?`GH򤉳}Fܽ1pկ%#< ٹ{;t!;2>W!0GC3 Q}7պGD0p;&(FmGamaXKypѦbyJ?GZq[ax4=A°S zJm}8\/N<lD7HC#bHF'ح=0-#w \GIX Iu*tȬΞj IcJ|͆d9iIԗ6.[,:J'd! A;A>2Ԁ 5 : `=gme3lWvؼ{B/!>fC2L VCC{uRVJxH9dD >k7{ }NeS'mJ$^}k@ݐ̨krmb N!} l"bSV:{ihlB 漓޿t♅ {?[tX۷5B2u\7^/;Aqw&mҧǧLRkC! |'oZx2GN !BOiibB!xH9+#.i,a2e~&&B!B!B!B!B!B!B!B!B!B!B!B!B+/O׌IENDB`grpc-1.30.2/doc/core/moving-to-c++.md000066400000000000000000000066031370425124100170400ustar00rootroot00000000000000# Moving gRPC core to C++ Originally written by ctiller, markdroth, and vjpai in October 2017 Revised by veblush in October 2019 ## Background and Goal gRPC core was originally written in C89 for several reasons (possibility of kernel integration, ease of wrapping, compiler support, etc). Over time, this was changed to C99 as all relevant compilers in active use came to support C99 effectively. gRPC started allowing to use C++ with a couple of exceptions not to have C++ library linked such as `libstdc++.so`. (For more detail, see the [proposal](https://github.com/grpc/proposal/blob/master/L6-core-allow-cpp.md)) Finally gRPC became ready to use full C++11 with the standard library by the [proposal](https://github.com[/grpc/proposal/blob/master/L59-core-allow-cppstdlib.md). Throughout all of these transitions, the public header files are committed to remain in C89. The goal now is to make the gRPC core implementation true idiomatic C++ compatible with [Google's C++ style guide](https://google.github.io/styleguide/cppguide.html). ## Constraints - Most of features available in C++11 are allowed to use but there are some exceptions because gRPC should support old systems. - Should be built with gcc 4.8, clang 3.3, and Visual C++ 2015. - Should be run on Linux system with libstdc++ 6.0.9 to support [manylinux1](https://www.python.org/dev/peps/pep-0513). - This would limit us not to use modern C++11 standard library such as `filesystem`. You can easily see whether PR is free from this issue by checking the result of `Artifact Build Linux` test. - `thread_local` is not allowed to use on Apple's products because their old OSes (e.g. ios < 9.0) don't support `thread_local`. Please use `GPR_TLS_DECL` instead. - gRPC main libraries (grpc, grpc+++, and plugins) cannot use following C++ libraries: (Test and example codes are relatively free from this constraints) - ``. Use `grpc_core::Thread`. - ``. Use `grpc_core::CondVar`. - ``. Use `grpc_core::Mutex`, `grpc_core::MutexLock`, and `grpc_core::ReleasableMutexLock`. - `` - `` - `` - `` - `grpc_core::Atomic` is prefered over `std::atomic` in gRPC library because it provides additional debugging information. ## Roadmap - What should be the phases of getting code converted to idiomatic C++ - Opportunistically do leaf code that other parts don't depend on - Spend a little time deciding how to do non-leaf stuff that isn't central or polymorphic (e.g., timer, call combiner) - For big central or polymorphic interfaces, actually do an API review (for things like transport, filter API, endpoint, closure, exec_ctx, ...) . - Core internal changes don't need a gRFC, but core surface changes do - But an API review should include at least a PR with the header change and tests to use it before it gets used more broadly - iomgr polling for POSIX is a gray area whether it's a leaf or central - What is the schedule? - In Q4 2017, if some stuff happens opportunistically, great; otherwise ¯\\\_(ツ)\_/¯ - More updates as team time becomes available and committed to this project ## Implications for C++ API and wrapped languages - For C++ structs, switch to `using` when possible (e.g., Slice, ByteBuffer, ...) - The C++ API implementation might directly start using `grpc_transport_stream_op_batch` rather than the core surface `grpc_op`. grpc-1.30.2/doc/core/pending_api_cleanups.md000066400000000000000000000016661370425124100207260ustar00rootroot00000000000000There are times when we make changes that include a temporary shim for backward-compatibility (e.g., a macro or some other function to preserve the original API) to avoid having to bump the major version number in the next release. However, when we do eventually want to release a feature that does change the API in a non-backward-compatible way, we will wind up bumping the major version number anyway, at which point we can take the opportunity to clean up any pending backward-compatibility shims. This file lists all pending backward-compatibility changes that should be cleaned up the next time we are going to bump the major version number: - remove `GRPC_ARG_MAX_MESSAGE_LENGTH` channel arg from `include/grpc/impl/codegen/grpc_types.h` (commit `af00d8b`) (cannot be done until after next grpc release, so that TensorFlow can use the same code both internally and externally) - require a C++ runtime for all languages wrapping core. grpc-1.30.2/doc/core/transport_explainer.md000066400000000000000000000225241370425124100206560ustar00rootroot00000000000000# Transport Explainer @vjpai ## Existing Transports [gRPC transports](https://github.com/grpc/grpc/tree/master/src/core/ext/transport) plug in below the core API (one level below the C++ or other wrapped-language API). You can write your transport in C or C++ though; currently (Nov 2017) all the transports are nominally written in C++ though they are idiomatically C. The existing transports are: * [HTTP/2](https://github.com/grpc/grpc/tree/master/src/core/ext/transport/chttp2) * [Cronet](https://github.com/grpc/grpc/tree/master/src/core/ext/transport/cronet) * [In-process](https://github.com/grpc/grpc/tree/master/src/core/ext/transport/inproc) Among these, the in-process is likely the easiest to understand, though arguably also the least similar to a "real" sockets-based transport since it is only used in a single process. ## Transport stream ops In the gRPC core implementation, a fundamental struct is the `grpc_transport_stream_op_batch` which represents a collection of stream operations sent to a transport. (Note that in gRPC, _stream_ and _RPC_ are used synonymously since all RPCs are actually streams internally.) The ops in a batch can include: * send\_initial\_metadata - Client: initiate an RPC - Server: supply response headers * recv\_initial\_metadata - Client: get response headers - Server: accept an RPC * send\_message (zero or more) : send a data buffer * recv\_message (zero or more) : receive a data buffer * send\_trailing\_metadata - Client: half-close indicating that no more messages will be coming - Server: full-close providing final status for the RPC * recv\_trailing\_metadata: get final status for the RPC - Server extra: This op shouldn't actually be considered complete until the server has also sent trailing metadata to provide the other side with final status * cancel\_stream: Attempt to cancel an RPC * collect\_stats: Get stats The fundamental responsibility of the transport is to transform between this internal format and an actual wire format, so the processing of these operations is largely transport-specific. One or more of these ops are grouped into a batch. Applications can start all of a call's ops in a single batch, or they can split them up into multiple batches. Results of each batch are returned asynchronously via a completion queue. Internally, we use callbacks to indicate completion. The surface layer creates a callback when starting a new batch and sends it down the filter stack along with the batch. The transport must invoke this callback when the batch is complete, and then the surface layer returns an event to the application via the completion queue. Each batch can have up to 3 callbacks: * recv\_initial\_metadata\_ready (called by the transport when the recv\_initial\_metadata op is complete) * recv\_message\_ready (called by the transport when the recv_message op is complete) * on\_complete (called by the transport when the entire batch is complete) ## Timelines of transport stream op batches The transport's job is to sequence and interpret various possible interleavings of the basic stream ops. For example, a sample timeline of batches would be: 1. Client send\_initial\_metadata: Initiate an RPC with a path (method) and authority 1. Server recv\_initial\_metadata: accept an RPC 1. Client send\_message: Supply the input proto for the RPC 1. Server recv\_message: Get the input proto from the RPC 1. Client send\_trailing\_metadata: This is a half-close indicating that the client will not be sending any more messages 1. Server recv\_trailing\_metadata: The server sees this from the client and knows that it will not get any more messages. This won't complete yet though, as described above. 1. Server send\_initial\_metadata, send\_message, send\_trailing\_metadata: A batch can contain multiple ops, and this batch provides the RPC response headers, response content, and status. Note that sending the trailing metadata will also complete the server's receive of trailing metadata. 1. Client recv\_initial\_metadata: The number of ops in one side of the batch has no relation with the number of ops on the other side of the batch. In this case, the client is just collecting the response headers. 1. Client recv\_message, recv\_trailing\_metadata: Get the data response and status There are other possible sample timelines. For example, for client-side streaming, a "typical" sequence would be: 1. Server: recv\_initial\_metadata - At API-level, that would be the server requesting an RPC 1. Server: recv\_trailing\_metadata - This is for when the server wants to know the final completion of the RPC through an `AsyncNotifyWhenDone` API in C++ 1. Client: send\_initial\_metadata, recv\_message, recv\_trailing\_metadata - At API-level, that's a client invoking a client-side streaming call. The send\_initial\_metadata is the call invocation, the recv\_message collects the final response from the server, and the recv\_trailing\_metadata gets the `grpc::Status` value that will be returned from the call 1. Client: send\_message / Server: recv\_message - Repeat the above step numerous times; these correspond to a client issuing `Write` in a loop and a server doing `Read` in a loop until `Read` fails 1. Client: send\_trailing\_metadata / Server: recv\_message that indicates doneness (NULL) - These correspond to a client issuing `WritesDone` which causes the server's `Read` to fail 1. Server: send\_message, send\_trailing\_metadata - These correspond to the server doing `Finish` The sends on one side will call their own callbacks when complete, and they will in turn trigger actions that cause the other side's recv operations to complete. In some transports, a send can sometimes complete before the recv on the other side (e.g., in HTTP/2 if there is sufficient flow-control buffer space available) ## Other transport duties In addition to these basic stream ops, the transport must handle cancellations of a stream at any time and pass their effects to the other side. For example, in HTTP/2, this triggers a `RST_STREAM` being sent on the wire. The transport must perform operations like pings and statistics that are used to shape transport-level characteristics like flow control (see, for example, their use in the HTTP/2 transport). ## Putting things together with detail: Sending Metadata * API layer: `map` that is specific to this RPC * Core surface layer: array of `{slice, slice}` pairs where each slice references an underlying string * [Core transport layer](https://github.com/grpc/grpc/tree/master/src/core/lib/transport): list of `{slice, slice}` pairs that includes the above plus possibly some general metadata (e.g., Method and Authority for initial metadata) * [Specific transport layer](https://github.com/grpc/grpc/tree/master/src/core/ext/transport): - Either send it to the other side using transport-specific API (e.g., Cronet) - Or have it sent through the [iomgr/endpoint layer](https://github.com/grpc/grpc/tree/master/src/core/lib/iomgr) (e.g., HTTP/2) - Or just manipulate pointers to get it from one side to the other (e.g., In-process) ## Requirements for any transport Each transport implements several operations in a vtbl (may change to actual virtual functions as transport moves to idiomatic C++). The most important and common one is `perform_stream_op`. This function processes a single stream op batch on a specific stream that is associated with a specific transport: * Gets the 6 ops/cancel passed down from the surface * Pass metadata from one side to the other as described above * Transform messages between slice buffer structure and stream of bytes to pass to other side - May require insertion of extra bytes (e.g., per-message headers in HTTP/2) * React to metadata to preserve expected orderings (*) * Schedule invocation of completion callbacks There are other functions in the vtbl as well. * `perform_transport_op` - Configure the transport instance for the connectivity state change notifier or the server-side accept callback - Disconnect transport or set up a goaway for later streams * `init_stream` - Starts a stream from the client-side - (*) Server-side of the transport must call `accept_stream_cb` when a new stream is available * Triggers request-matcher * `destroy_stream`, `destroy_transport` - Free up data related to a stream or transport * `set_pollset`, `set_pollset_set`, `get_endpoint` - Map each specific instance of the transport to FDs being used by iomgr (for HTTP/2) - Get a pointer to the endpoint structure that actually moves the data (wrapper around a socket for HTTP/2) ## Book-keeping responsibilities of the transport layer A given transport must keep all of its transport and streams ref-counted. This is essential to make sure that no struct disappears before it is done being used. A transport must also preserve relevant orders for the different categories of ops on a stream, as described above. A transport must also make sure that all relevant batch operations have completed before scheduling the `on_complete` closure for a batch. Further examples include the idea that the server logic expects to not complete recv\_trailing\_metadata until after it actually sends trailing metadata since it would have already found this out by seeing a NULL’ed recv\_message. This is considered part of the transport's duties in preserving orders. grpc-1.30.2/doc/cpp-style-guide.md000066400000000000000000000006471370425124100166400ustar00rootroot00000000000000GRPC C++ STYLE GUIDE ===================== The majority of gRPC's C++ requirements are drawn from the [Google C++ style guide] (https://google.github.io/styleguide/cppguide.html). Additionally, as in C, layout rules are defined by clang-format, and all code should be passed through clang-format. A (docker-based) script to do so is included in [tools/distrib/clang_format_code.sh](../tools/distrib/clang_format_code.sh). grpc-1.30.2/doc/cpp/000077500000000000000000000000001370425124100140565ustar00rootroot00000000000000grpc-1.30.2/doc/cpp/pending_api_cleanups.md000066400000000000000000000021471370425124100205530ustar00rootroot00000000000000There are times when we make changes that include a temporary shim for backward-compatibility (e.g., a macro or some other function to preserve the original API) to avoid having to bump the major version number in the next release. However, when we do eventually want to release a feature that does change the API in a non-backward-compatible way, we will wind up bumping the major version number anyway, at which point we can take the opportunity to clean up any pending backward-compatibility shims. This file lists all pending backward-compatibility changes that should be cleaned up the next time we are going to bump the major version number: - remove `ServerBuilder::SetMaxMessageSize()` method from `include/grpc++/server_builder.h` (commit `6980362`) - remove `ClientContext::set_fail_fast()` method from `include/grpc++/impl/codegen/client_context.h` (commit `9477724`) - remove directory `include/grpc++` and all headers in it (commit `eb06572`) - make all `Request` and `Mark` methods in `grpc::Service` take a `size_t` argument for `index` rather than `int` (since that is only used as a vector index) grpc-1.30.2/doc/cpp/perf_notes.md000066400000000000000000000022111370425124100165400ustar00rootroot00000000000000# C++ Performance Notes ## Streaming write buffering Generally, each write operation (Write(), WritesDone()) implies a syscall. gRPC will try to batch together separate write operations from different threads, but currently cannot automatically infer batching in a single stream. If message k+1 in a stream does not rely on responses from message k, it's possible to enable write batching by passing a WriteOptions argument to Write with the buffer_hint set: ~~~{.cpp} stream_writer->Write(message, WriteOptions().set_buffer_hint()); ~~~ The write will be buffered until one of the following is true: - the per-stream buffer is filled (controllable with the channel argument GRPC_ARG_HTTP2_WRITE_BUFFER_SIZE) - this prevents infinite buffering leading to OOM - a subsequent Write without buffer_hint set is posted - the call is finished for writing (WritesDone() called on the client, or Finish() called on an async server stream, or the service handler returns for a sync server stream) ## Completion Queues and Threading in the Async API Right now, the best performance trade-off is having numcpu's threads and one completion queue per thread. grpc-1.30.2/doc/csharp/000077500000000000000000000000001370425124100145545ustar00rootroot00000000000000grpc-1.30.2/doc/csharp/server_reflection.md000066400000000000000000000036411370425124100206220ustar00rootroot00000000000000# gRPC C# Server Reflection This document shows how to use gRPC Server Reflection in gRPC C#. Please see [C++ Server Reflection Tutorial](../server_reflection_tutorial.md) for general information and more examples how to use server reflection. ## Enable server reflection in C# servers C# Server Reflection is an add-on library. To use it, first install the [Grpc.Reflection](https://www.nuget.org/packages/Grpc.Reflection/) Nuget package into your project. Note that with C# you need to manually register the service descriptors with the reflection service implementation when creating a server (this isn't necessary with e.g. C++ or Java) ```csharp // the reflection service will be aware of "Greeter" and "ServerReflection" services. var reflectionServiceImpl = new ReflectionServiceImpl(Greeter.Descriptor, ServerReflection.Descriptor); server = new Server() { Services = { // the server will serve 2 services, the Greeter and the ServerReflection ServerReflection.BindService(new GreeterImpl()), ServerReflection.BindService(reflectionServiceImpl) }, Ports = { { "localhost", 50051, ServerCredentials.Insecure } } }; server.Start(); ``` After starting the server, you can verify that the server reflection is working properly by using the [`grpc_cli` command line tool](https://github.com/grpc/grpc/blob/master/doc/command_line_tool.md): ```sh $ grpc_cli ls localhost:50051 ``` output: ```sh helloworld.Greeter grpc.reflection.v1alpha.ServerReflection ``` For more examples and instructions how to use the `grpc_cli` tool, please refer to the [`grpc_cli` documentation](../command_line_tool.md) and the [C++ Server Reflection Tutorial](../server_reflection_tutorial.md). ## Additional Resources The [Server Reflection Protocol](../server-reflection.md) provides detailed information about how the server reflection works and describes the server reflection protocol in detail. grpc-1.30.2/doc/environment_variables.md000066400000000000000000000163351370425124100202220ustar00rootroot00000000000000gRPC environment variables -------------------------- gRPC C core based implementations (those contained in this repository) expose some configuration as environment variables that can be set. * grpc_proxy, https_proxy, http_proxy The URI of the proxy to use for HTTP CONNECT support. These variables are checked in order, and the first one that has a value is used. * no_grpc_proxy, no_proxy A comma separated list of hostnames to connect to without using a proxy even if a proxy is set. These variables are checked in order, and the first one that has a value is used. * GRPC_ABORT_ON_LEAKS A debugging aid to cause a call to abort() when gRPC objects are leaked past grpc_shutdown(). Set to 1 to cause the abort, if unset or 0 it does not abort the process. * GOOGLE_APPLICATION_CREDENTIALS The path to find the credentials to use when Google credentials are created * GRPC_SSL_CIPHER_SUITES A colon separated list of cipher suites to use with OpenSSL Defaults to: ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384 * GRPC_DEFAULT_SSL_ROOTS_FILE_PATH PEM file to load SSL roots from * GRPC_POLL_STRATEGY [posix-style environments only] Declares which polling engines to try when starting gRPC. This is a comma-separated list of engines, which are tried in priority order first -> last. Available polling engines include: - epoll (linux-only) - a polling engine based around the epoll family of system calls - poll - a portable polling engine based around poll(), intended to be a fallback engine when nothing better exists - legacy - the (deprecated) original polling engine for gRPC * GRPC_TRACE A comma separated list of tracers that provide additional insight into how gRPC C core is processing requests via debug logs. Available tracers include: - api - traces api calls to the C core - bdp_estimator - traces behavior of bdp estimation logic - call_error - traces the possible errors contributing to final call status - cares_resolver - traces operations of the c-ares based DNS resolver - cares_address_sorting - traces operations of the c-ares based DNS resolver's resolved address sorter - cds_lb - traces cds LB policy - channel - traces operations on the C core channel stack - client_channel_call - traces client channel call batch activity - client_channel_routing - traces client channel call routing, including resolver and load balancing policy interaction - compression - traces compression operations - connectivity_state - traces connectivity state changes to channels - cronet - traces state in the cronet transport engine - eds_lb - traces eds LB policy - executor - traces grpc's internal thread pool ('the executor') - glb - traces the grpclb load balancer - handshaker - traces handshaking state - health_check_client - traces health checking client code - http - traces state in the http2 transport engine - http2_stream_state - traces all http2 stream state mutations. - http1 - traces HTTP/1.x operations performed by gRPC - inproc - traces the in-process transport - http_keepalive - traces gRPC keepalive pings - flowctl - traces http2 flow control - lrs_lb - traces lrs LB policy - op_failure - traces error information when failure is pushed onto a completion queue - pick_first - traces the pick first load balancing policy - plugin_credentials - traces plugin credentials - pollable_refcount - traces reference counting of 'pollable' objects (only in DEBUG) - priority_lb - traces priority LB policy - resource_quota - trace resource quota objects internals - round_robin - traces the round_robin load balancing policy - queue_pluck - server_channel - lightweight trace of significant server channel events - secure_endpoint - traces bytes flowing through encrypted channels - subchannel - traces the connectivity state of subchannel - subchannel_pool - traces subchannel pool - timer - timers (alarms) in the grpc internals - timer_check - more detailed trace of timer logic in grpc internals - transport_security - traces metadata about secure channel establishment - tcp - traces bytes in and out of a channel - tsi - traces tsi transport security - weighted_target_lb - traces weighted_target LB policy - xds_client - traces xds client - xds_resolver - traces xds resolver The following tracers will only run in binaries built in DEBUG mode. This is accomplished by invoking `CONFIG=dbg make ` - alarm_refcount - refcounting traces for grpc_alarm structure - metadata - tracks creation and mutation of metadata - combiner - traces combiner lock state - call_combiner - traces call combiner state - closure - tracks closure creation, scheduling, and completion - fd_trace - traces fd create(), shutdown() and close() calls for channel fds. Also traces epoll fd create()/close() calls in epollex polling engine traces epoll-fd creation/close calls for epollex polling engine - pending_tags - traces still-in-progress tags on completion queues - polling - traces the selected polling engine - polling_api - traces the api calls to polling engine - subchannel_refcount - queue_refcount - error_refcount - stream_refcount - workqueue_refcount - fd_refcount - cq_refcount - auth_context_refcount - security_connector_refcount - resolver_refcount - lb_policy_refcount - chttp2_refcount 'all' can additionally be used to turn all traces on. Individual traces can be disabled by prefixing them with '-'. 'refcount' will turn on all of the tracers for refcount debugging. if 'list_tracers' is present, then all of the available tracers will be printed when the program starts up. Example: export GRPC_TRACE=all,-pending_tags * GRPC_VERBOSITY Default gRPC logging verbosity - one of: - DEBUG - log all gRPC messages - INFO - log INFO and ERROR message - ERROR - log only errors * GRPC_TRACE_FUZZER if set, the fuzzers will output trace (it is usually suppressed). * GRPC_DNS_RESOLVER Declares which DNS resolver to use. The default is ares if gRPC is built with c-ares support. Otherwise, the value of this environment variable is ignored. Available DNS resolver include: - ares (default on most platforms except iOS, Android or Node)- a DNS resolver based around the c-ares library - native - a DNS resolver based around getaddrinfo(), creates a new thread to perform name resolution * GRPC_CLIENT_CHANNEL_BACKUP_POLL_INTERVAL_MS Default: 5000 Declares the interval between two backup polls on client channels. These polls are run in the timer thread so that gRPC can process connection failures while there is no active polling thread. They help reconnect disconnected client channels (mostly due to idleness), so that the next RPC on this channel won't fail. Set to 0 to turn off the backup polls. * GRPC_EXPERIMENTAL_DISABLE_FLOW_CONTROL if set, flow control will be effectively disabled. Max out all values and assume the remote peer does the same. Thus we can ignore any flow control bookkeeping, error checking, and decision making * grpc_cfstream set to 1 to turn on CFStream experiment. With this experiment gRPC uses CFStream API to make TCP connections. The option is only available on iOS platform and when macro GRPC_CFSTREAM is defined. grpc-1.30.2/doc/fail_fast.md000066400000000000000000000000601370425124100155420ustar00rootroot00000000000000Moved to [wait-for-ready.md](wait-for-ready.md) grpc-1.30.2/doc/fork_support.md000066400000000000000000000043021370425124100163520ustar00rootroot00000000000000# Background # In Python, multithreading is ineffective at concurrency for CPU bound tasks due to the GIL (global interpreter lock). Extension modules can release the GIL in CPU bound tasks, but that isn't an option in pure Python. Users use libraries such as multiprocessing, subprocess, concurrent.futures.ProcessPoolExecutor, etc, to work around the GIL. These modules call ```fork()``` underneath the hood. Various issues have been reported when using these modules with gRPC Python. gRPC Python wraps gRPC core, which uses multithreading for performance, and hence doesn't support ```fork()```. Historically, we didn't support forking in gRPC, but some users seemed to be doing fine until their code started to break on version 1.6. This was likely caused by the addition of background c-threads and a background Python thread. # Current Status # ## 1.11 ## The background Python thread was removed entirely. This allows forking after creating a channel. However, the channel must not have issued any RPCs prior to the fork. Attempting to fork with an active channel that has been used can result in deadlocks/corrupted wire data. ## 1.9 ## A regression was noted in cases where users are doing fork/exec. This was due to ```pthread_atfork()``` handler that was added in 1.7 to partially support forking in gRPC. A deadlock can happen when pthread_atfork handler is running, and an application thread is calling into gRPC. We have provided a workaround for this issue by allowing users to turn off the handler using env flag ```GRPC_ENABLE_FORK_SUPPORT=False```. This should be set whenever a user expects to always call exec immediately following fork. It will disable the fork handlers. ## 1.7 ## A ```pthread_atfork()``` handler was added in 1.7 to automatically shut down the background c-threads when fork was called. This does not shut down the background Python thread, so users could not have any open channels when forking. # Future Work # ## 1.13 ## The workaround when using fork/exec by setting ```GRPC_ENABLE_FORK_SUPPORT=False``` should no longer be needed. Following [this PR](https://github.com/grpc/grpc/pull/14647), fork handlers will not automatically run when multiple threads are calling into gRPC. grpc-1.30.2/doc/g_stands_for.md000066400000000000000000000044261370425124100162740ustar00rootroot00000000000000'g' stands for something different every gRPC release: - 1.0 'g' stands for ['gRPC'](https://github.com/grpc/grpc/tree/v1.0.x) - 1.1 'g' stands for ['good'](https://github.com/grpc/grpc/tree/v1.1.x) - 1.2 'g' stands for ['green'](https://github.com/grpc/grpc/tree/v1.2.x) - 1.3 'g' stands for ['gentle'](https://github.com/grpc/grpc/tree/v1.3.x) - 1.4 'g' stands for ['gregarious'](https://github.com/grpc/grpc/tree/v1.4.x) - 1.6 'g' stands for ['garcia'](https://github.com/grpc/grpc/tree/v1.6.x) - 1.7 'g' stands for ['gambit'](https://github.com/grpc/grpc/tree/v1.7.x) - 1.8 'g' stands for ['generous'](https://github.com/grpc/grpc/tree/v1.8.x) - 1.9 'g' stands for ['glossy'](https://github.com/grpc/grpc/tree/v1.9.x) - 1.10 'g' stands for ['glamorous'](https://github.com/grpc/grpc/tree/v1.10.x) - 1.11 'g' stands for ['gorgeous'](https://github.com/grpc/grpc/tree/v1.11.x) - 1.12 'g' stands for ['glorious'](https://github.com/grpc/grpc/tree/v1.12.x) - 1.13 'g' stands for ['gloriosa'](https://github.com/grpc/grpc/tree/v1.13.x) - 1.14 'g' stands for ['gladiolus'](https://github.com/grpc/grpc/tree/v1.14.x) - 1.15 'g' stands for ['glider'](https://github.com/grpc/grpc/tree/v1.15.x) - 1.16 'g' stands for ['gao'](https://github.com/grpc/grpc/tree/v1.16.x) - 1.17 'g' stands for ['gizmo'](https://github.com/grpc/grpc/tree/v1.17.x) - 1.18 'g' stands for ['goose'](https://github.com/grpc/grpc/tree/v1.18.x) - 1.19 'g' stands for ['gold'](https://github.com/grpc/grpc/tree/v1.19.x) - 1.20 'g' stands for ['godric'](https://github.com/grpc/grpc/tree/v1.20.x) - 1.21 'g' stands for ['gandalf'](https://github.com/grpc/grpc/tree/v1.21.x) - 1.22 'g' stands for ['gale'](https://github.com/grpc/grpc/tree/v1.22.x) - 1.23 'g' stands for ['gangnam'](https://github.com/grpc/grpc/tree/v1.23.x) - 1.24 'g' stands for ['ganges'](https://github.com/grpc/grpc/tree/v1.24.x) - 1.25 'g' stands for ['game'](https://github.com/grpc/grpc/tree/v1.25.x) - 1.26 'g' stands for ['gon'](https://github.com/grpc/grpc/tree/v1.26.x) - 1.27 'g' stands for ['guantao'](https://github.com/grpc/grpc/tree/v1.27.x) - 1.28 'g' stands for ['galactic'](https://github.com/grpc/grpc/tree/v1.28.x) - 1.29 'g' stands for ['gringotts'](https://github.com/grpc/grpc/tree/v1.29.x) - 1.30 'g' stands for ['gradius'](https://github.com/grpc/grpc/tree/v1.30.x) grpc-1.30.2/doc/grpc_release_schedule.md000066400000000000000000000045101370425124100201250ustar00rootroot00000000000000# gRPC Release Schedule Below is the release schedule for gRPC [Java](https://github.com/grpc/grpc-java/releases), [Go](https://github.com/grpc/grpc-go/releases) and [Core](https://github.com/grpc/grpc/releases) and its dependent languages C++, C#, Objective-C, PHP, Python and Ruby. Releases are scheduled every six weeks on Tuesdays on a best effort basis. In some unavoidable situations a release may be delayed or a language may skip a release altogether and do the next release to catch up with other languages. See the past releases in the links above. A six-week cycle gives us a good balance between delivering new features/fixes quickly and keeping the release overhead low. Releases are cut from release branches. For Core and Java repos, the release branch is cut two weeks before the scheduled release date. For Go, the branch is cut just before the release. An RC (release candidate) is published for Core and its dependent languages just after the branch cut. This RC is later promoted to release version if no further changes are made to the release branch. We do our best to keep head of master branch stable at all times regardless of release schedule. Daily build packages from master branch for C#, PHP, Python, Ruby and Protoc plugins are published on [packages.grpc.io](https://packages.grpc.io/). If you depend on gRPC in production we recommend to set up your CI system to test the RCs and, if possible, the daily builds. Names of gRPC releases are [here](https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md). Release |Scheduled Branch Cut|Scheduled Release Date --------|--------------------|------------- v1.17.0 |Nov 19, 2018 |Dec 4, 2018 v1.18.0 |Jan 2, 2019 |Jan 15, 2019 v1.19.0 |Feb 12, 2019 |Feb 26, 2019 v1.20.0 |Mar 26, 2019 |Apr 9, 2019 v1.21.0 |May 7, 2019 |May 21, 2019 v1.22.0 |Jun 18, 2019 |Jul 2, 2019 v1.23.0 |Jul 30, 2019 |Aug 13, 2019 v1.24.0 |Sept 10, 2019 |Sept 24, 2019 v1.25.0 |Oct 22, 2019 |Nov 5, 2019 v1.26.0 |Dec 3, 2019 |Dec 17, 2019 v1.27.0 |Jan 14, 2020 |Jan 28, 2020 v1.28.0 |Feb 25, 2020 |Mar 10, 2020 v1.29.0 |Apr 7, 2020 |Apr 21, 2020 v1.30.0 |May 19, 2020 |Jun 2, 2020 v1.31.0 |Jun 30, 2020 |Jul 14, 2020 v1.32.0 |Aug 11, 2020 |Aug 25, 2020 v1.33.0 |Sept 22, 2020 |Oct 6, 2020 v1.34.0 |Nov 3, 2020 |Nov 17, 2020 v1.35.0 |Dec 15, 2020 |Dec 29, 2020 v1.36.0 |Jan 26, 2021 |Feb 9, 2021 grpc-1.30.2/doc/grpc_security_audit.pdf000066400000000000000000005322021370425124100200430ustar00rootroot00000000000000%PDF-1.4 %äüöß 2 0 obj <> stream x]Kod;nׯv0`dw dddlG|SN`7#((՝9vy!ۈ_to翜[|9S|{n[ ς_s9=uAG/ ]_\VG ږ氵BvN)>O Wv<ĥݯEHj qa̙ DP*LTZ4Q&t h|ڬsfQ%7g<Ob2Bf+ -aA`|Θ(Z6#˴h$%mi%;%\0ZqY pV|5#1:A^;U%'2V)OI_ q8W䵀뼲F2 ;/_= wTW߁\0"V=PCs/qms,\D Lq8)y$2t Id` T "j!* CS_ϬdT{bU k #w"t0(&dYЄf?хu3W;@F^NLfSf!^E YՑ _`'ɒ @m f=$0-}Є1>\~G &Ip֩=Ya5!N\$Ɔݽs9# h;1ƒ#OaAfyW`8L0y8#Ĝ3}80V+Xq$GMձm} : +'ihRd*G8;NCFy5rV:&i;_zvv'`GYhLUGLes*TE [_“89AdWF4&ԨLf }NT~l:vCz4.F_;6a:P"8t8Y򣍡 i* @oR* 1j%@'0̍mU [` tMˣ}?4Oٻ<gLPچH4y RTq1dV&a(- ]\YfiWI]FY%GJY %2dE>C˪9Bp]Ya.JkV.0jH7Vɇ|/8aktTUCUQ>CyN!/ѪLDQK*HW'W%s8+A4{tu8="=.v2iAXV8|-4͇аi9@.,06LX|r,aظBs" TGmPtt]`0`n9z~ gX̎01=rʖ8eW|3DW,@YN%yӨ!EG qZ69Ǣ#D'Cʟ-NB%Jl|42AK9]]#*M3r,t+ 5k# C0h4t9WmpPޣHg\8E.Jde`3vENATr5|B2\%$5Y.7H~]G4i1(T}W sv_!/}b Kֹ~;~h1dPyPoNfО$l/c?P/.#"ܱxIke< ݻDڡJl.L,袈G'HxB}I)4Cte^.ʽQ>ɴZ$Պ/Y77;nKZ0dyԅĐ{sLx-aMX$毸&.[(μLxȇޥI=wVqrəT;* B/ pNin͟vZw@i{ry/vrjQY7,U/]Ջ-8FU[WzqN5NDٕZUBɣ.~{l308T]?AapX%@VyE&e*,!!,ӌS@77TwtzyUik #dyqH붤J, ^3k4oI(.:#S_@zh$N1 ڦKUT9iݡ}/ MwL]s_*`W%&)Q14wmPy9tqeI): G뮎`mk@吻}גkV"X7|yp;4t_i4ɪܫ3:Y޹ -꒦{ Ɉ*#NAD.-c^9\qlNaX) >SOBCQIRz3:3:LsFG_F&aK!KHS2u\F#a7'(>$ 3:ci)3&7*9Xh@:;ue&}Id2r|Amd]ajS;@趣- Dihiy(ib=e͐Y*(Mde^.KG;tq(x$r3e ~E2t9(6b6 O""YkP t Jlo3oze7B w@Њڻ\LhŕeK$&%@FE9l0(AFLg(L݉>6P1`ѽJ@.87+T_$eǁWBegW'?cDn2cALnEwK[TL%]?DZ\&9QiZyä$В.H&[V+@rW~?%L 0~s?BQ2>_mK/!2|(/VjX_"4뾾7wlJO,oam˿O~ۍlY8oH>c {X{8a-Xk|/騂D%PxAuFA7;T& Eqas=-n=Р`1l>D="yIǭ7S%9r"=ۏ ߖO d(/7jȅGjaazz;L_6TWK:*p " ܍: B~l-<|Im[(l={Y#o9G/YH: ;*6';[H-n[;%b[d 08:;N1!Q5>aTnJ2f?,= @#>fDzXӖrqN&|$asU \R_q^I|Gq A>:e0vzzJE}jH%.I4쇚S⒙4dFԄ;DKaXsWFE:64?Y]( Vyڛ %ȍɝe(4QյTRE<ϺI!;+93%~a}[qşw~: L~2 5bvj`.OW@6W͓W9)zHda,d/x~4;ȏUW}]V%<4$ydzd1@_ůΕxs}IMA6:!On7oRGb+o('w`+ qa,X 2FU$ rOt -6L޹)G\ w= >YI!5wQњYmVd9b`I4KU4P2Nti,UDלi"+Ә(,I()7; c>9, AE@]‰KW?vHO?Dtca&Ī]흇Mū]6QhB޽XmW:r%A8*.hߟ1P o6v;cnKu:M劣MU1Nb JhctzzW=J?MHFגh D,oGC2OuaMvI8@ؚVWe obo_BOR^bW8u3ȶ\}9,7f`|Oo2 ct)|1F;n+=i+ fx,BhKI>{K#ENPĄPnO vE%me >p8]]kT)dzFTWawfݞ(-R$ŨǷm0twOV_ ≉؆gwU]֬*5znrK ':[Gq“ p۲kѸZF{5Wd=3GS1/9;+c ksr<hYXP+ EvXKX$9xSRl}.[e&3MeU1.WN{]VS2xalr5tǻ m0]ETȱ: Y7b{~q :d(P݇(Ag9Q w|~g%nGSھ QΝ;v_ZORM endstream endobj 3 0 obj 6958 endobj 5 0 obj <> stream x]K$9nȳ*({ۀokS놑e`RDf^zE($")Rn__ Z{.kZ~ e{-ה?~{[ [ _B_kk~Lv]Q+ z^Jߏ I[CƴuBw?/KhmL|Lh4x~S91qʒRDK8r!TX U2-q9)/˘'8s+70dd"F}t/ :]D׆یj1Go@b8ЧVхli4|ޕ G×j{7oޮ2sF#$FizS(D=lo{BM8J3'r5 2$IcD]F 7 tV\T@{ +ЗNvUp M:frwDkŦO8:5bƇ h j #b%4bki_[`*Z`Eɛ<%vG/}I,D ef0EHλ7,\ Y`(϶kÃ329XTy¥ǻK?/`<l4P(&`dЂf;fƒ!#㟝U1.Oɯ0I֕Zz sƎ\AT :Gפu.Q  31վp"F"KٳM|Xzy2#Gs2hCWw 6`)jYV]d %C">݌GՠOy{ֿF$&]U?<MoX= PDU8lb#ӸA}mbujF4.~GCRЉ$ ]2lYDŽǨ0ۢ6]RdXlzdv} h4A$ ` e,8x#ABWZ2ts2s?.6X~h6E}q4̖U#CQ3\Y%g2}  A73_;#Ei *Uii4ِ"T7M1(*z(nOjP^EzHWh&o HW!u*A4Ыysu;Q.v}-4ͻа XӘC7.0*_E]i>drsqD Q> B ƊZ"t>C}v26wz1R$rDG#tORgdbHMK|@o*|43A0J@k~tSӈJ̴&K4PҕgE>/kfxI#!ɾ؈v-.|L:Q0#.eqv CҲPZ:Dn&3-bXtm1i +X`U[;dodi+*իRhJD{z] ^1! j5+wn9Zэ]ztz ~$+}L+T5bF7qLԩ-".sM;':(&FE!Ji+-IZ/HuFb۵r4?&tH2t8]wXHRE>g-+3<.0JyvYHQ [O#AM㥏 NzPmYwS :$-0t< z$|hس$E&;z7O͡7打 fRP%"qhsU liJ+ T!hav"Rf,q$G$6C(?;t>Fɉ/h3B+Js_b,s GNVw7>` YG+1rTZ|@9H(+#ӛVPȏ<]cB|Fͧrd]-#t)Bك{CW} zg}B7Euky1H˭AB 䥐N 8M?] 8+^yRĐwJ 3jq8m*_aҹ^PE ˻2os@@ hzŀ@!E!_!| 1xwzhy^>o<\ ' Hh1)X>D!d41{q#6No}'x=\$ 0}IA D,:./QACA7xsDžDcf *D[Dz\p` Eb\Wu_j0#/9FV6{ђP៴ -Kj;*_A?|]FgEg.bI$ Ϙ~{`--{M%VڅUtRl;/5- L{~Q1oC򴷲*ߤ;}o 0 iEث5!5e1dTNyCKòݞu&ƿxRk WK38.gVAGa8H?9ؿr ;E&S''ng.d! &ӌ@ (u+( >IW,s_ ذ4;2?37/;:coIupO^G\z)Dڧ/R6I뎶D^R>%@jj~nkEoVf߲|##༢j<*кlA=;naOԵ3~EZ%Z<7{X[On:8Wqan/nTAc5KN;{p3 G@ vRD%~XNNLXTBz2ꥍF$.d-.7>=k؎aٞ~o/%L3/7ϟn]Xu]l)s',}m1_i*'=@]q0l}<Ơu&M‡p@/4ۢ0/nJȈ/~Gl L'Yf*$[&uua.DI(9 +΢$pNwN|Ps7s@}-Y9Ugiz&\d H&$Q(y%xT;*U% #Oe1!>e'ܢE"Kb4W.uYjA{z5 2d8yUd u;`ADzա,?-}Os͹եZWx!zEmL&r54jӘC*iy@1mO>!q~W e\_lT'u5v15n?h֜0~qn$D/GЉS 9T(F'S'Z01τ͙U4Zث[scw/3|Yh.xr(#Tvkw&-Aq\"1@ՈuA\yil9o.ۓH LԼLGIG=ԧf4D&T$/:ї%q@2}'(Q O @P+q-EO#ajf"|t:߫ԾD1[Ri&Y4$IWs?3{Ǫ/ԥJHa3RJԥ\8)wKᒞ`.?ͅ<x& qxL,EG/ٹ/| ,mKtL89ǽ7wI¥Pb`s]:cC]<{9'O%ũlC02ᤤtA SKM 0unv.R/1qeXhEpOf8ڥraɴr0p KX)u 'K<:^YM Bˆ܆ӻ. vJBצ5;U=K9T&݄Fi]$n-NW` l#\q'R%B^Jv4 *n},|!?oRb*cu\"Y^9QxGekP t.8]Bس\[bT41g)+HhRǾ-vVPo P4O-C?Ud7 _ت]T7;\9HcW܉Ңv>wg~tT}ᣊ0u*"RY)ROًgS;h91OR>klܛڨH[ri0QK٭{$⚜ %' 5{bGI|w+vv (v DsN8.";-Xِ- |+ o:rd4Ǽ.pKc+ VTE Zo\lװE%U~XrZLGWd;YSw'8DbKG[ؾy=򌬁G|-%!vdGI,CJxpt9%r;i)q8E|% 3.ֺ[ W-G7|`K܄eԂ׍ƶMCZ64k<q8_[6'S5n)ZJS%tR%8K-ݹxs=\ʕ]64:>Ue3uy>\׿獮%^b]Ѡ뺆"\0 h/I33y-'bZezթGr3^eM;m;f wF&0GI,nH=`36x}ązF뺛OY-Z?WYsr7r͓e'v{R2|_ɥ;|{;\>=GNb"b6uwmlzD% 7r<;w ?C=}ZC*Mح@{v/ks_\6M5˅y)IE6gCqJ3Hi뉲2’]X?ʺ+8LĜ\M,m8]϶mE$fz))ʒ*t`r< ,hԟJ͇ηADt_+_}H7YN~7]<-wEw0gػ.N39D:ng{t\Rm,ѽk߂L՝orK"L$ܨYX`+[P ׋_W{oNx?1zJU,׌Y/ ;b7uq)ޙi ?]l! endstream endobj 6 0 obj 7864 endobj 8 0 obj <> stream x\K$9nU%Q@W? 6>,|J{02 ^[[ZXl (^^4]OvW5]]^5oes-_SW+5]V^1uE{ zDŽqFe }2߯_tqcDŽzYMqkq(\@ F_9XR R#.PẽE%Zu7:נ*$ ٳPnBֹͨ8hs#te4ϻ}(#LҔ,gl}5(wXX rA8!;"x3:ÀȀui ] (%KBF<Ӆ15!M4j {F#]P0,0 " }QMC~8|L"cB6̤nNXĞD(L` UO4[ ` c].'sP{Y,jF=Z,`K3Yq6%F7 b)hvnn~ѯ2l9I-bgF}"yX} k3 ztu\Y7ĵn\oH2HYvOQΥA~ې2c͂;R.0gMzxX EHUytG$1~}6: x<.t"6$ ,j/!Y#>O)>%$IՈ )'ևj ,kW}9V6OmLc+8YC#+L=\ F@nvvX٫G0O,b]G!DҜMsׇC`+h悜F1\0)H2CRuί^H3jK?HEK" |cpui<ˇ1TS݁«;+Ȃkte8:fV2)aCf-ǖy 2͈d9 CE71v"F3[p Wձص ЍGaT.)؇-j1tQT&x:dťP űQ9ۢDŽQ!/t ]OlۼA'б,ZyHey=`X@!NKݼ$M 0AU˛3E)R$"gEќF287<&4̈c팠%-ܪh!; ,)fTU@UP Uݠ sW勴(7ZE+9\@MU\NPh,vK>Թ͆P4{SAwghkl*]}M>٦\Mlu!5V*Α[9<:,acN9utegX]1-we-PI X^A׏Ja&2:w| z@-#4wY(ly3&(iQ7bZWz Pghhr>tBԵ&4͐ЅfhE<5 &HDFACx7J^ڣA*QS ?՜q19R1ڃihfbM2B~A't%~AC 8)b,>'$ O&ۄ.^%]H2:A;U*&\$ia MEB,^_MI!pI#+_Z浧oN6DŽzm6t /-!n]A0h0t8'VaݠW̨DQ? A#n#*p +qfn,b 7h4TuMPkA$ӃiYBx#y;~4ȹf?M2GA.)u Y&tvnK1yLY*]%cEߏ|\52^hyu4(MF7 W{AixxcB= BmW7Y34oܘ~.33RA'o cхy ļQn A2:i2Mfg1)+rt'V- u5S1cǎ$` XׂMW*$7gٸI$ɜle>pQEJz%X>.O ϼ)W!D,MuR1S-kРLQф&^ͻh];̭<+>mcJ; ?ћ(* h3`|!%ޯQlƭE~)R4qdEdVb`O #]yO< uU ݯϑ|nz$xDjoa^Ք*gMh5eCtaQMj W.9A(9]pSF#jL5Z4D}AƓVSCZZ 5xK131L,hhwљ\W4kR@K\:sY\E# ;jj>Dy3]'4a2hhM9ڠAqEHHo- ӘAZM[$M&7HZy'-m ~h$)⽦5qLתN']xǠu_IAsdt6 &i4SwwǢyIO #\j.dܡQh T2ɧ(.PcKJw`(稉^v0oMJ։1`9%+& Ϳx Koo3݈]IFZh{7!wmodUtA{%=62:B:dxqocd>]W'qf ʤ{l`BV8')|K7Ow/{KBg۾l/[[AxU^3̈́WSӄSU:bTfGr@_> |Zf>R7_w-rkg%Uwf3<1-%l3RGl L8 Lxۡn3T:xR7ठdwUxĬh\|[.Fj#UG8Zp߇V:b1Zbđ8:Cm]7VYԱA'9wE /YvɴђBΟY2ǖ`ddh  S|ĺInȴ S!y`89C+=dk9 H1IH|CZW8> [IX;yjʭOQ=(\gsnBc~}9g}USͤZ-퀑: -P섿~C]D i258OͩoU.NApѪ_פ_\z͎^F,m]2T06 &1ۅ4#.?r ZRpv9qj-T?yK VVe ~$mȝv?<5P7G`뎴 sgdgBQ̚aW q C,AMZx7eyC~z/ݳOH-l|Z Hk‹^e$EL86nQ _傆pdA'(K2cٌ>9E"yޟihew"L-/i5YYwrny=x ;w4xs>,҃7}V"νpSd*YvwYj۠y=K(Â`XgQ8;W`d6vr0cS;5Y$&%Cm d=b#,U8>>D~Ll-)Z :aC*Q)[#Y[ͩi{21.ʳØ)L'|s[*I{ਚ2O{3]:J7ZJ簇槧%]mrS4c7׸c25i`h#j;'iLnu)e|8eOu!*Fɿ%5M'0MH{ -hl^ɥFP&%'_4S،[0=5c0cd&IkI\!=Vύ nbΎ]as1%"ígzj[Jp逍KYG hmk=mL:XE\x 3N;Qݳ<Һ.d2hoY4D=IGЏoc=ᑲ5{A'ݟK 'r~W^*2Zoa 3 a;Ү֊ :OR;\ J8N7TsnvOrHc3ͳY Uy|$QjOX';RĤ,Bv ) 5~ s]ED-s4j#!-\;*?ZGʢ %F|{1/|NfOScꐊ^NV A֍?N2F;;kĻԅ֖قMtр&_A 3wISF(_*͉& I:4q^V ݧӛSPn6=0zˮ,>.ϒ̧xOU+.J `7 E}:a<)%G_",6n3囀r$!:Ag_t~=/ %ϒ;v #ӂ3Y'ג8z o3X]Xxՙ]Ф cT%yyE*cV5 spS}_^/i=-`k-NL>}LCj-鴥=Z'PBgdkj/ղU ? k-GtX åbtw"O;D+W͎3^oqLQ;YGRTWO|iB;C^ e˝n!n,n3ݬ Dpʃlņwј'ֳT3[x>$Jζa (ӯK'iV< 2=^ӌ}.תɮ?ZZ+o90CCg? j]_fi@~&߈ynB[?0]_9`; ۯU˜w52m0ܞ]-oҐ,BFEa:][BF0ڈ.gsҕ/-¨|!GXCjϗݙ~OWxB*r t |°4ƾ^d;(v.Jj|:RưUvȟϯ4Hٺ|؆Mϣ#Ik=>M'T&=2޼amR8[b"[=28 ?]Ȗv_>:n|*]a2Gg?鉜jwi(zMSrА)=gn\'X,ja2>sluSzWNӯ4'+n|W 7^zЩ6t6NXm%M>H).,C)|+tWqr~t8\3|_~WxoGK1}!( N] endstream endobj 9 0 obj 7615 endobj 11 0 obj <> stream x=ˎ,m^IQzy09z~7FCVIEIn˟_ Z{?._~ӵx-m=k㏼ߞz¿{kWPZvX+&^w}¤a@qƴu–~.%6O 'l41Ox)N~MLX | ЅNc\BL e|_gq2"lm ƿa<@Hq{N&bTT3ƃms~}P`xLA`1aK7oW2sƪĒK;B f{j„ԓ9lx5 HK 6MMMH'mm"73=R@F'*&fHer(MI_t="}AZaW҈ =2:.H[! aDl6F,qm?׷k \X ~}(xWi pS" L#7AX(Bf<ێǻGc!~-#QYnE5'\jl-4 \h0xܮ`ÍB1#,74Y6y``?FieBwX2g:X=$0)тwQ6됱#V!@US҆+kCg>\r77V}a>!uAGxdȈ=j3)uPIuuָ=\2=1+h*]g@9a;ÌsDL,R,m;0l,]L&)P~l y5me:EV2i&.dJqE}A1H `o7*wU~ 6!~# u#~l2vE0n9Grذ:Gh`]eˏ6"`0D'Jcp&a' }U3F`[ԦYk*EuE.ݮg$&m$,M0Ty2d +, wɟ.m4lv9&Liv-"GGuϰe2V' ̘Z,_`"\V&@$)PTEEoIQ 9,E(%XX7[e㫐:\B TAU\9Nw2Fe`!lޅMmhŚvsc q+,6'[n7βКt~0Tcu(u(O`x0 =Doߐj,VGXnhw!VĎgfncEv~g"9f0JH1#:jw}Zo6>$#.)}ڴG1+ G3 F ]44;3-3p:좘>/L5 MIc*/!ɾ؈v-.OapЖ".UIaF`2b.VM*ʰ]GUVX7y 4U!4%ɽ/^Ex0 ֦jV0~n9Z!vQp?C' c`P(6b|-đ2RDEV):]8zCAi;vO`ܢߪ : QJ[]aOR %oʕKCLZ|u$Cwsx׸i]V,$R MG_3<] k&*ϳS*@bI@8$9t4^z zPmY\?)p_&-aa`ԣ$CCV,7ybWb4h#l8`&U!6WF_"O?0NE)[l3#KIa+Ͱu_@']cɉ/h3V,9gZb,1MM[*05~n,t/x| SeGPg:Uճŗ2GIHv80oZ}W =f๎.#NmJ`*I쀋9m [QaNi]J IJ a[\R;iמϼn6/]beqbØ] SKerǗ{Wa`z0qY Mlak]qwFo4Pc9+_q;[o aVVL"E|RnEGaH\ ŅQŶLN̻[;T"`׉Xvo|"ⱛz+ W79qDt O.R)àb/tӊSW7U=*3@uƸt55,)KЉʙe70$)&kѯzQ}.ԢɁ50u:UUFv'x=8 Xx~dТ7'=Ua hO 2AYChRBK,^h+,U\YJ7)ۄÈ#]fr3E,OyUieEק%S}Jb/)K2]2]uD- twDaa(3cŵl]e,+X > &{2-Wv+G;氼bH˾,a VI( pz?_%Ogj%߯3\?^" /[z ˖ҾlSWDwȻ ]/O'ot| 3aܰßrF "=ŇOKqIFħ =/O  3 !AT4/:8O#L&c^X"c̗[ )8ӓB:k8DzoppFl'pW DC)Q?L3LsnSUy~}IrxBAտr*7(.Oe0HP tm="× JGA4^ çpuJx×8$X>=vMz7J. #LI p3&?05ę,Qr|!wXxqBu+BHH&vRЛfZmQNtC-:wo$JfYgXMes 4vmZ"AQsL8/i`D6fY;q&xB Sto"2a>Pf6#ZОMzɌx_ K#T洉B! |?ݍ);80b\ڜ.).SGv#UrnE-;pN~xuOckR kPMJ/#qQD:}_;O#@[T'w-xvY[s NĬC@d39]ƻ/֙HO&~[Ffœ*_MiZ*[^uNjXJ&6!-^y$C=vS!m<=LUsOFh.AlwȈAo>ЉmBB*F*yef0^Gn__8%H,=᝙#!E઺} MN7tbgENf^& pJG7D~7 |֥H 6r{ ܍^~*J HŠA T6tV y1;up]D ?e&KG4-ۋ<^e#j2/0KOɂ:5Xbܒȣ~Ƹa,~G2o(z97GC i ՠsu<vyS!G"(y䈦efi)9E^rchƎ>͇.M [!4tlKo|jIrߞ!kN(RɱYht6)ux?{T3*iżIÕcuH6'~.~zQuY}9SA1Y[K`_osN,P:nT'x{ ַ)#K|(&K Aš8-5wf{]^:}\C pI慎r~!nϳujw/toHTm8ggǸ|- 9TBжvLE*/Ԏ ܤV#J3 1'E%L?2 ?“Maz2$Â>cβЃHΝչuJ\Mɳ ~k5:ԛ.98,h\tAhlxa%=qIiC-wlLm9g!Gh|&.- I:LO6)9.paS?ך)`KR"ϤnywN%| zDHT\ݛV ]o|7+⯅RՒ |702ÆWdᵄ|eN.Oуƭ~U1=J"41־v&,~/4}p;l936E:g] &3{@T ĥ((hPySrċWDt( `c\ZsWrU?qz%$|1Zaqb3JUeղ&Rl"CDYrʜݜCd-ʩ{0']Tb^,w >W>N`sKpP1.a-6`n¥QgxS_<rIiNVlzjɺ=}>WHSw o-4G@ĻjgPq?%w K 6AMp2u/1MAx{4Fq2`!ۡ?)GzUvtaq!ݧ2vXx0ٌ+Q.Kh~vt=OgHW\THu8ss1F| sH\ J PqmLF't Ĺsvh0-wu=,&Ž-NCSĶ&Ln";Y7ݓIm+Y.?mşK@)EwO,T+sy$z6:5d}a{57]?꯽."ێ:/*+n|rX=ՉN爴v#{> evk`DŽ?_m+~n~ֳܑT)L>N(qqL\KRmMoǦSYʧd =:̺yt۬6>m~g&O䦳4{dhӭ9cu=vOZD8ÌV{kdm.Y6!dGRJ:s߬p'V0EoCڳŵO>_N1rxuL:g*zt1@c5}E N7c%]J+vxuX_> stream x\K$msRz3sYY~73co+IEŪ5leJ[q]^e5n[(kR}{emߗPc{}mBmE(*^{5gT43ZX>uMhtg|kIkWh ;!]xJ3:4€ȁviOC (8K"˦N<3$XXCcGΐ®VrA{֏@3=ә.$X NS'Hc !}LS~4}>Tۄ`=K}9vW 9x4JUO4ۑ&$ƇRB e# FX"іfjjƒnOaaxWǤ *s Z(>%]~0<1:̀oh|` \@[PW[e Klmu{Z`*$Z`UK_9h@;H wU+B`V #n >`~-#QEnU5'j-<ލ\x!0Dlx40(&dYІffHLj3'чi6Y^XmC#$]d :[CgB=\ZK| yaqī!F8'P1ƒ#҃Xsp$aJq?zgzs`,V!UƑ5ikTvӌ@\ŢqKY&>,\ftN&wN3E2+ڙtP׋l$@@͐=`0Q3("SxW݈Ľ̓l e"֯V_Ma׮Hw>>LnsPȏ"d0 I9dسۄ@稲X0ۢ>CGD4)r,ym8wytݞg\LPڊH4y RTu1dVHЕ^-4gE]VX-WJY%2dI>C˪9;_Bpa-J{7.0HWWɇ,'ek4TUEUQ?CyE6K*QԖ½2U60&Sz?oWs#ڣb'#]&mO%vo tUL;O),7g]hMD&D(- N V !;rV[ ӣk;NQQcZ8D}H+hکe7c5HZgC绣M>ŐCK|trK L~tS׈J̵!K4PҕWE>/5 O4Αxm/vC eM2!ӀH0EIskt~ =q8NC3 SO("hGI҇&("CW.#mi%3)v 8ٔgct;Elু,q&g6C,?;tݞY5AiN%3/dRa?J /CWז4 d!+˛?xˌS[Ru@j({Œ6-FU4_n{{u%$%\j.iy=nЭ,n\Pj7,ENATj5 "iF>˨qKT:gWȒk6܌"#yvҢ=Awb?wap˜5:x|?u}p@r (#G%;eufjInڋOn3jʮ}0>":] MN7M: rU}EIczDG6!`1kǡ}j@owE$ /!<37{i5acnڸl8˴>_лt=uU\r=x'I8XsTous@{rJs/_-tk-QYwH"E|7rnEaL\ ťQŎ虞LAw 9w4"/⇀IB'Z|"U8E{JMt&4CWG4 (L=3="vI3:͐MCئbg]Rե˫B(+?T_aĕ!iIXAV,}9%qHd>tF**aʑ8ĬVPw[MvYfL ]b/JLs+%&-U1Tڧʷ]iյe'͇"OXhXUj"C$+MܡޜFPQF[rYy JZ4yaK:UMfvo4j%6y}dТwO4{ hvaM=GMibFMUxG4Wkvה*NEzDs%f*I6ܤT{Dv"fhEEM]][f)~ ]5wȪh#]~TkxdI>CyG3]r삆bM%r1o/ax~7[o?p o_.qYCpސp|7Sqc!hDa^Q)JtKC04nl7P5/?mqoG4pYL5&buez?/2&q$!'pvvR&ug~@4e^ 6@Jv|EL Pf}zL\_Tڕϰ/o\/W*M" ˇ8e sf@0 Gkmiğ>>`/qAwJ̠9hj͠ր+Gx8x懩ؐkj:)8jp>iig]E+* CqX.herdF#aq6Oۣ!7Rf&B`SX]H-񨡹! j4c22r0U pҨl<#tZ F-R8ODtVbgqi6e<:#ϪVT|CLNJw7?ĉFHOrL=wu3 `!BكHiya62(=b0,ZAD/(tjHE~xUy>bQjlKbNN80xA,F靣nhBS/v3ީƢ y^ןT`heD)Wbж5RaɜXG#9OwODPe"Cyy8/8;Ҥ6 ?%ˉc%قΠNw%1b.E-4Ū`ǻKzT[ƓJ4M/bcY@HrQX6E$cYLO:>:k 9+wHzD$E"~Ŷv(y#Q ^t9q Hc8-y>'vsiN˷ XqM$Y>]'[W˱NSvoe`Zuy~ ظ+'8Zjib-Ȼʕ@{SG[3j?Fi/E%aAֲ5cngKzgy% s]v]lmmj)9w?=ܕUfUrR];ЋnIwMONvn|҂tGuzh|i)̚XRPQ8-{{T8;aݨ^ <  CM_PGZr3B!Wqs5ǖx?i~GLqFN{L (J`, oT1Э+;g&E!wMǁeu==jFbw >M/J(1{Ri}`eƌ6mN].eHvrTP.wyfw7e,upz:Ut%.m[lYJ"s/k._G$+nK`ЊwHM KQ6ɺ\zm=rq1\t)}%|#ά SXTa/P'BO,h]K~ЇY,"viW{jkɪ%=F]5 u{hr-1`KĀ=nj)iu6{HWUu .Y]NS&cTS$*}q,-uϒv.ro>A/ Xթ95CB Kΰkte|aCS> stream x]Ko,;nvJo 0 $"ʙA`f3?STuU'786*ER$%}ge?4Oߧ?.YKiqy}K_Z^ou5N7e<+ϱs&!")eCt#\.eiӾlY5,7:~ s9 #RS͈;kEAC(\ֹͨ8j4߹1ZywCʈ2SV"pFַ[3MbyH@-7ARCg/#Ȁr i ] (%O"jS#CA&^cP=$V-=pgӉXʢ|)c1:1ˏINE}.sfjQ0gT,Hb{B`xK=aB`l@'J58ҽ,cD_Jڔy+N 69=S-kNqqq8Ma0;h%/yF@y^Y#n_-n@݀n>axl֝Zb+_-R W$-'%/r\X $tL~AZg!Ao .ظhО5mxjA*r l~=Pck= _'Lbe' dty<\Yh:mmaQ:~HYBW+Hav -'NdZYFop{ +}Ӏ7qk@~U?$ȸͳKR;uzacoh~EHqHmeǮV>Vj(9‚n#WbiNݦ*up&uRkd`Nę  Z 6I㜟8-q<#*EEi8@`D {}2 Kt d( A#5ieE#ٝ5p9)  cAliAfXNKF,&]ԩtf} Nd~ѥ(,ӫyee^h4Ad~0 gl8#bE&Al04v%z']*(@C273Zn 2V(63\;#܋Җ<ҪCSMUTtPܞuAqN!,/jLD^dnFL(A4[pU8-"-j&w2Z4!8}-ԹզPj miAs1GhmCdbMi8BDhy@Q< @q7ֹ|cqw=銁iK(lO4@}y"tY!>&2-Н#F );bjVZ~z&!: i->y\;Hev>Lx>jhxIZf%5ta :)뙹F >R{ ڋ(uBtFQYt-y y$-rSK(y̺kinW4T] [t< : PFQD+؛i wK=@罦`1p]a]z \\QwZۯHFS[ "Mfg$FCi:f Ln^ߊt+ Teoӝ++tC:˲ER܄^Q+QK/;Nh_ubowpqgiw:L EvrD)[O#CUK 7 ̠28NjbrSK(#GA9= @܉N#t1(ni,fS'"fQ biJoG0R haXE86&+)lxJfh/` u.}<) yFEaKb:w!s5@s/i 0Rx$pȤb=. I7,7l*z(Zn\'l!f5U[fkQ F8+ p#1YˢDAHu0= .-.=bu+ZAjI .mA6JsHuR#u7iǞy;7h[&ymsNa$-@ J;4ctF)c0bPܢ;^qxQL5@#M#eQ B|m&81 0c&1wyBhYFx#G;~4Q֚Ui(/7HqMGtӞcPz{Blg v_/}bJV}*b?J9@rȼFJK7V'7Jkt'^g4jKvEmꦃv jdK@D]aX5MV3"?E]\'#,;.Sn@;m?6<aJr$ /!I32a͛ܤ$~pLeő/R5/Ӣ8 at>mA2KjޔGū4=7HREa,uR1[+&ߨEʳH+g+)+nrmCOUk27Aydjβo\vp9o@lQyL3={D6wvcpnhLPYRǃAR'hVYRɢ%!~[9 fBct1(~ a7Sr\j h<4 3=qxŨjJ/2- `D](P>#i:@i]d%sۙ94/I (]N6#g* C)Y *PV,&. Xute+\VӜ8OА ż)r6)ͼ {H ֣yWu,;q1mc&n3nƢQQd66 d?Wl(]VQ ֢ kng_”p)ԳyQ+1+X,ƃA }]Èm@W~ʺ(aжu ]ȍP]G%4{1#*ExIDTWe5ڔ^ӪUQ4y\ӚkuN'X9>̋:1GYtY#sTiXt1"K#tDW Z@vhqVŎEC27P# [r쌎2u4<>PLxBw򉗀qԽЍyڕe䁶X.#o"r{BLފn׽/}zo%S;6v:F:2tiqnJ&}N`[5_$Әf/@V_=v љ`HRo/{%%խ/kxuep!֗5UV}}|ק5x_>wlwh*9{+=@2Qt zӉ ˎDEKw6VӨwX jkBl%@B|ս ʻ&/+l[!xO6my^wq9!׊s Y\m@[5YѮ+vh*G9~w.BN9 -6Ѵ4z5qMk^K7@\[[}^׏}[z:GTرGo]_0|[-ѩG'sI w%]?~&˝=0=VRx 94L 2OÁ+uonUSaKI˜i j{ӷJݴ9VwG4qQ2 k>'|o t5)":wd|*Ut$`@]3w]sg O~!zso[B[ FOgt?r#7? cM>+kW_tO}-aFGo#` {)3EpGs7u \O>q˝WQg?Oկ|@#lүsN;M : "@O?R1eYgnGǁQ.;BG s Bwk{xs׽$;i_r+㗆w` k Lz3N_8~ J}$ VJCR\rk}SB֖aE>v'~f` _|`3@/|d3*AHB@_a8mQkۛ7c4?4|tU =Xgƃh :imUp8%Bb;#UdAL:m5P}pg/ -| 0۝C.u#|;}%a?P ?M;1@ YfBML=4XxQU[Wa2ʁ Nĵ?X,ߏ)TxRjSwQP~'~ Q`-_]Xq{_̢s=6qE {}Ø PXqV샕gJZQv 8×<(~,oEX(ݛi%F.TVe<=Q\ޱI勵br82ve9 P냕G\Z(+z9Ы%z2(SɺY,y>^ 8EY69)οG~pǣɯ{C>z td\ endstream endobj 18 0 obj 7249 endobj 20 0 obj <> stream x]Ko$9rׯh-= 7}3̔fK2`0" peWBt/׿^k|k(c<>|yK ֮_PZ]?- z޼JcBR81l潟t S 3 σx{?'&>vYRTƘ*LT k*Km&bM;8s+!a<@HqyL&bD*q'qYG€ݩATz{l^ͨ0q*/;zG,7CH;5&b(]b$bDFM Sg#i=F{<}5Q5(<"SĀl{yWUFc }.~h2vE4.F9GrذG#f.v]eޯ]hc(B6 :Pꛄ3J%{0z*[ Љ #-jSa,^*EѶٺ<]QT36&m $,M?8H2 J$HJK[n,37+"l処akQԒ#e2ğ*9;opB1!hfFkg(Y{QE*-M6{ݡH< SL*JIQ [t%Z(jIZ*WP1&Uz+GĴGNFLVv@ a.4,jC[Zi С+ Zq*-6'[n7βМ1!T(:A'4h <ن`زj,fGXnh\ٺЭ Bg/8Y΁JwKL,j*C7] 0TѥQY&+d5bFZ/HFS] jEf):]8zGAi9V/ tnQoՍMBVWZƓ4ok%!&Mh~Lv"١;۹ aYW7ռ@B( 4/J9kq\AbaITYmHgzUŐI@8$9tZ4^Ш~B5{p Wf4t1GڡQ [JW[t6FW =.=Nm˕JTDs@eҼYd$.:ѥ46sEv2=y]>&4o]"tZ"a$50tꘃ.Yc˫+nT8ts(oHWk;^q-K FH*tvo,9 ;ϑsjx "imQ㒨tfkG.!%lJg9܌#yvҤ=_ P^nXm=V꼺OyO\Z4@(#G;eߵg*In%ۋO>&g]Yn!Z2vp0]"E(kp%tB?W'tS^ǣH&zGVY❦ЬvӅrU}I&u:K"Yh5kp1!hsێU5UZer%I[CV͹goҝ*CƿzӮGa94*ߡE4I~j]ZtZ 'N@¨bKLO^&'Qλ;T"`׉(_xt2Md&4+C7G$ (L53=9"WH Ad/t4Tz m]^ @`D <#4%E| :Z:ġ"!wph*K`ʩ .~TE&m{o,1}Lv=E*,U4;b71 r*Cu>UFt-n,;n>EA‚hձ5Gc,PѦ"~\jמITUrpZqW먾^ZU wjC:תI=ZuxyM`ΑwKf-zn|ISfphϰf֏ ݮ(X< 2Z-IJ[bͥD]iikZeͧ"-Ax8Rn *= #"ך$*ъ1!h UiiET>GjeBw3q'$1Wy14gtfoi"[_%s9]nXet<8$DкdtcN_$Ӄfޅ[t9ɍJsN3*.*NbYʹ{&mTO>mP"YTw6Pn0|OI4i(3n]eMY*+(P~Mde\:!EivPޢ\OD˾-a .WI( 8V\6_4_:Tux5ˋc& 3L%LF:l [3z pWؐsPXfcAImP; 4dn=oX+ZV9̋=(6&+F詸 r9б=ㆢOʽVǁ׬lʻSΑ< pbLz*c=giRyqW'z[Y\*ZwN`I2 Gc6Bw^Ham6{zV6._ǜpݷPϙ;l.ZE-6[tw2uB-h|Xgsb\=&r%{x iٖý,ݸw͜q)܅VRWNciw~>.HRֱhO֋So67 ֣{Ob{5ٸD2o1 YВV-o?C=/;8"1F扣М ENB!rt4f~ ]:n{ZʐfΕ ~E/ S|<Oħ5 eN2603MG j`t'e nj?y?ICg^Rw Bk&D>\c:/s('YуF@<6*z *c,SC㐥I#KX:ɜ~Ft{aY^4 2?f`:qt柋E1jdcX 'py 7a8j6\cK-E:55uۧY[CzH**en,>#]."eJo2.W8 w[t>[(N ne:W>㫪eo̪dUg6{hI"߼`AYhc;+Ʉ͘=3e>.Zu~A7Q< TDݖjm}ٍ+Mt GNnVw%/j3Yv/-Joِ:O|"6gf.A+p )=  Ou-]MZogASic v9Q+{yZ X-frz}PQlМ94 jϟ-1#JB`2ǟ޸(N!-)5‚߾ϛDCEJo.+3n|g|TRv] nݗ޷+ dfF܊tkE+FMIf:;p<mmRcG,dq%cMIҥJ[n8_\bvJdTgcy$G%ؽ#k^V|Q}I=ХSμ*)ǟLechuvX3.|sG3nL@M6܉y|%?nCɻal',] iPP57|v|e:D3 2"|ㅚj<5<#QC#* L73J1$gO^K7X z^Cƀ1m+6|t2~'CyVݮ]# 4o¦#+A =j^n/?ŕSÎxMdټɼ,vX76 dӂmQ;IroBI>l&M&y]QΩ6­qm;'{|'eƤIrݬO2.cAEG=g!žj_z4 4sHGuޠÀNHhI[l; J}\tqdpHϤl:h?_9띻0ÝĈeLȍad\}~=؆G^59Ҭ͛֗3iG*~y|FAy:K{)yI1%MQnjwS>ܴpY^H hNÊ9Iv?U|.!g෻WwCzde|~_e 2䰬z#9> xI+,υ{:\kJ!VXؓ|Tdb:??r ӮcŔ/`DZQt%u~ik2*]YkD_q_wd^ׄh!Mujr.-./Ϲ܁|nf,^#,YRW-}ENYl^Anl}ecV?0(з]̥pv4uE'g@Ao0ޑ+'wSdw!+g'k48Y}v! y? ?d>yM9u}9r+{m"\}we򥓿/|o{xޘ"gvD;Y.}5u(`E6ZJߟ(x@,> stream x]͏cq@wI`Nܜ,S a}^o`$~|dUH);5s?w>s\{9sCʷ׶Q~ xiY>̔JnΨy$(-e(Bf+ -aA`|Ljp.eZ h4i ' V4_8{L{-ptBAV)OI Qlkym1x|qLu8 #bi54v85 d珓yJVX$ L~jW!A.XP`1q`2 z@Fe'V|pa'jg2 āHLv:}22rg~h@º+D` F^NLf)k!^YYّ2_`'ɜ @m nr0z֒ôA>,Ts~C;"$Q`l ݯ prb%<66a#<:1? j6S!O)0Iƕjx sƁ`BJH45c;ˌ@\uVNbܥP,uplv8 jtL&MwNN++TIA? !P3dqs51d W}ՍhLܻQ_=-O=8MPǫ8l #8A}缒ć=bvdCXYM}hO7MCx0cɱb ͉Q>h B+m!|-bv-鎎ŕCTā,[_QA.g(L@^dLxutW׈JtZn%%tc :)[ " c667;QuA芲.PQc[[s`QQJ4b#XV!;[Elkٞ+)xJj37]ΏQrꋬ4/%ۜs[<<~4 ]\Yvt+ 5{/(r9FR3: KM(`h925\\Ist¡CyNF:[ChjN7FY)p ;a7Y>TLu.ǘ]PkIK{ChYFKҙ}?DfW?fϳ ȗ&:E >tznWȫsqK&ux*,c'ϲ]-Z ^9T^#G%e?g*In%ۋ/3ˮ +~ˮ8KΡcr[.ʽQ>ɴZ$Պ/Y7ASn;.KZ0dԥ-!E37p["MX8~pWV塁/J=/"]_лTĺAq{ǗyKB YA )͉n!5X\Q>' w42ێ^vU>*ˡY=J=߼C[E׺Z=q*T6Eu k1@U }/& +񵪄ΓG-%]$ih/pvx ͆š  KMtJ/.2)CPyEe 9;af]9Q֥U( ?0LԑeIXAKgbAi^8tQ$[ 9ɍJsNg3*.Nb]ɹ{&Lh,lnP#Dzp6P;谴|OI4i(nb]e͐Y*(P~ɾmtC܋.šG'k#vg-]f-ȡ7HF19םV6v_4_|dC3n)Eo(Y ϼqhˏ(.*݂grgJA+m|3.,3B'A4pM" 䰵Ð-v<2Ÿk4fN 4 e3 ݽi`پ &tHX|%a[v{hu/l<@})BFZ~,肜ɩY{] ˞ߦs3DyWlx_p`#Ϗx+Ay}߾ns1ui)lRV:Ufee 셅՘cevz鯱og/OjBteI3j1sL.߷#> mn&5+ɷ-d  vJcvZȀL["u;!UP#$Θ้GB_KXK7~'ai;4{اe_oXcIGL޼.1TXHrd}RpM®;3Gg=!̕Ŵ#0{o)_9f6pcQMHh.u1g_|NVNχ-GY_ W&솉4qV<3ᐢyTAQBƃ{{ t?Iz}0m-7 <*/5W9<̻O wtkjX0_}'^'/ʻʕacU3^Wð%т(p'/ h=+.O3DC̼jJ5vM.Sbwl/i+ ֫>YG½4 棪Vj`NЮ4\5vfLccB!rn:TeĢۯ2%ɸOV4HV dG.e.er]RgZZF{X9o-GyFjެ,W^q0jXhA5*`uB# b1JC{1Er{ۄ9dMNvN&Ϻy }?ȺB7໛C!ۖG,$'#P$ uyfV>+>,QfdbȳEHpr > 4qñºT1cu'F +_UN,Sw8[#'w8*:R4P*M2c:%E/]eg?/e-~nuS6#L/Pz$˗TnTto8ύBn`gGG} h DI(av,mpT8J4rRgRHe,vh괯֔HQkeuB :ZX+WsFA67(%╗KIż[h7XtyN, v7 Tť l&wZi7{77LN͚ksR8F ~[(92_{ O=.+0s~?z֯sAf Q _]|hJm4TdD$^eqk kB;0tZ0o>q~9)Cf)uI,NfxEοn9q21Fsm_0p3|=WD"iŕn9f!Ia7g 7LcUR"uw VHq|/0(˒ ?hx5-viXK+>i㛣K&!ޜ2I-i r,x;I$ochgNnȧRmTH>7\+HA*"zgK駷w݃?x9JNwW w/q; }3~% endstream endobj 24 0 obj 6834 endobj 26 0 obj <> stream x\Ko%;nޟ_Q0~8@v4EI#8'f~7Usܓͯ$Q$ER9ly5ĭ?/.\iߟF&/u <9o]#Bݮ2 Ø_VG?o ڞ:ø_?zSۂfyƫR:U\Z}bTc\ Raz2os-Ne9y{7(#LHM"$e. :sqcr[Q a <qrc }*#*LY%t8fl4C}*#1< R5g'4]ѹL##M <My6fHxCsEΐ®^rA{G ^L,g)fc+BS_6cMw[ tlrfQ0gvG'J52,cD_ZNڴy+n 6w30өDeS\UrnpX(h΁hĔtչy c  5 yx\tw~ڶI&/J^);#<H!|)3)=B:\q,V={fq` *rOl6"χwDvIꇫN6 0ׄD8px@B;;v¾KTCp/8Cdu󐧔q$aJq=Fgzsb+xj8&s}`qHƉ@Z.Yʑo-oFNd2KvKd( ATYTvB]\/ M-CXxGQ7)@j@o@b6b1 N}`2[{pgq%҃Gq4Ϲ%=\1;t1ԡECj9;Bp[Y]n\`ԐnJKPdԔhGqrTCW]Cڌ/jLDQ[*HW'W%wؔB \AyK ;Y l+> Sh5DTСk =gq(-19KZ.7;|[TG}Ptt*OhPu 5h9˘Բ[1R$vD3 ֻӪ|w9!RimļG Yoh=54Ҥdf *XC.yeC}Ad~^Ch}C{q\-(knڳq]E!PXz:Di0⭱bBcSR:b< yt1Ա%;*ٹ^f G1d lX vn ?p0jqN.!H'4Q#g]KvtLա|D6㍴e䊙I:nH\lJA3XTwU)[m3i"K\Ia+q_nQrl40Ιtr kNOE-c$2,z_*ヺC&Q[3?Tq `M4 ذҸ_0lt/x~,SG`>MݳŗDI[t80z+˛?xˌS?J $Q%`[n|Xd$֮])$HHU%7-;mA>u+$=;F3 KO(a925r.9Vա|D6ܬD^-[ FH۔`3 "'a}cdsw%5 "iKq#ƘeԹ%*91Rkv9܌"#yvK{2@ t~+չeNy:O]ֱSg9OHVk䨴FYwZ[AEy,geAudWD;hD-}2Op~.*\ }Ѕ]q"< o@w84fs蜮]G[dV-˻$Պ/YۂEyD| wE|ԅ䐢9LM&'HO*WQ+nL~@/*y#%z0rnEaL|+m+{]Du'lq>И&Ik񽪤΋GWm.~G fBc:tuy!]Ki!輢,o:6qyͩ.U_^U* `D](=#i:ZT%kZ,3%CWE"Cub32q ¡97^=4M mW]UT9ibq ]+ۂC\1nWLs%&%W-{ۈ4rڲSt;,X]խ[7s\~CzR]^Xs?-[SפV}txY.`1#,z.uOS#¡<3"Xo nQzvdFD&$"RR*NOEFDwWUH}u_PqL8D9nf7DD*mAjvћ^-&$YFTmk@!w^]x58 ˃N4}U,'rjSgtYsZ,9!F%-;xjIUG%du/烶8#n]?ϔƓАo%)otS^aot(2" Rl_$gU2w {ksЇޅuˍz{.ҝΐ7Qi[HW'ܽ{z&\h,>vD/05St;aL.DiiPfEpC)nzg ߡ)wvgQ]G;tu(x$7(g@K*r$I+;_4^3fvKj#-܉}vEG1lbFnDPr$.V%+-񒐗}=|u/`^vvey},[|k+J&oE˜ŏ;#읙J]DionVC[[C{E2޶zi?@OW$ՙ`Ioa?ۗ=D/{z ˞Ay_ Tæ% 7߰Ti{ö~Hv!@[/O0&yA߲CpoH8>  ~{z`-?Xi|0/٨D#iPxAsF|6675MU懭!Vqz$a@2YtLeˊG#"^dNS%5r"l }{$x' fȅgf5C5 }QM/ SVt!ğBk_^toB@i8s /qdu'Qϙ~(UaD?^ۈ$` QmJPa-%@nчTo % ?x ~7vmFҔm{_kj}i>{Ф۞BĶA*T}&Vb0M9y|2ϊ%4*kCB_CB*ӆ^86ѷ$^=]xm mZ>c;g &5{NQOAb2d2iS(l:u3|Xi9ütw>|sk o 7!C [w|JKҀGOT7|uOK__}Uܦ }@Qh]9j~<!~JX=Xl1~:ݹ>8*F&1ELyqf\;8FfSNgySr| 8 Xt\Ya=9YE< ~hsϞB,Ti$6ccGa[#@`\L0Z;ĺN`BUSCP9Yp”i(07ĥYBv6Ҳ؊Tu%}}\ix-Udfπǭ }j^c ^LP$ wL{ uy"k uz 4c]~i~vI椼>E ?:IΦL75a! l`( ͉jrH^6:vP8?R/T$)[gu)k2yxW+B9Oq;񫱃pӜlՃ“N=T?&[z_\iX,ݫeUU,RjPpŁ URo,O ə~Oԅ{KI`1N b9 sC]3hcO UsW U>KY[wq$P:Xԭ)r.18^TjRr ɜ|RN $HEˢ)_Qq&=n -/R0X 43ې{I8h[ҰrZ:;FpJmc 9,ڔ:nVA77tTNde.4r(XY|[U|y˩pv䴰$|W > 4Wu!ZΧHkwѝ|Y ا|.txs,ϲ8*j1ZCv~bIOk#r"F"eKLm@|Jּȶ>ur^aЩ禇Ô?u55waE$%Mbr܃:~ ')}ie9> stream x=M$;ru^v#C̛ok?z0Ն}Kʬ^'"BJ/y?\럯5ki5\S}{[:[2׺|pbX(5_Vz?}#zni,[f@lyOÇFwف=Z{#$J].#2΅PFQe-F)UҲy-]9odG^0ahcx&ӭ>FX a<+cSb84biPZdBᰱ0CyBa`I ;bƿ;4̀ A{49IH"ld9P1CKc1ؑ3ea)Lz1 3ә.HX SO08c F/|:Nwa#&ӗ[3oV+U&\,j $al`+ΚԀ/eHhDEdɃ WS8:tVp \"=BV$αtvԫ.'4 3HNu"a~!}y?@xgEƋ d-e8݆pwЈ%m~mD_/);F+{y " qIe&dP s91B l;47>,2{Lk'䖈Uy<ƻؿ.8 xZܮD`GЦ@!H$774ۍމ7yAۅ?x 9Ҧۤ,Ow- QpӐ#1?KŲ dH ծ=| s{$~>JUA.iKL7f}VOax!uAFXd, b3))82{~sFZ0(e5$\^(A ̸'hd)=sDg*A]:CL)twj`Zpvݙ"L!qڱ # Y$ Ayi<]GĠЊNF8$$o71V*Ba1C#@d"~<v$7yN:lN.˼_;k( 6 Ed872!K-yp$1VIK&0":(r»AP,3ybc, P[aFMc Et( 7[8HXL[&jg cS7FEiɰR\]&ͪ@bJQu)xY8<} Ԇa<ƶcPżWW;CvS2Y5@U]xtqfP p1t@ (0򟶫i1$bN08 v2f fMhDVi,`7+(udwfy!5~aXEӌR0TmCPEQ;, (nm?ŊЖnSu( ngR_`%'̹[66X0b.g1 E`ܳAz jZBXtܸPոU WcLq%%ma18 UX\W@FyU6aZe jZ0R1G3C4LZ 1pج>ǦΪDۨƆ`:EQx1Dw`TwyO``"ߪY  K[]`^OR(+J.+Ku8C7s5fYZׁ I"Wj_sh+Qgb Z̮y6IPPS0Z;!&҇FN0ҳ@A|5] " GÇ#kMbbѴdj v3X^:6j fR!1"Qhsh8`^w6pf$i("emxbER?QlSl&]cɰ/kZ49XjxH c)v3mP0ۘԄ'-|#E*K{L)>łO96y)LlbYXTF`5j 7b: T!i*YsQ$-=̛Tv~*t\fhR%ܣt1$BzEIV,.Ք4sE(zμ8 Y-yY{A0S!{F.`h0O`4&wR Ufb#]udf-zP2av5N6t#*T z,r"7S֙c6F A$i ֨% IA)Hd57#ӈzhO1W3 `:f~l,e'rW;gNLjjVb(0ۀr:Q]fƖdv@.Zcͦ삡v]66o n.sL ^߄wv..YO"Hv\9^4x&bs ujZmk K]q7Fo%=$sv)6Ϸe>0`++Ʈp=%F3C4LT ńQE]g$ɼK9` Ni ΋nF!][9^v>hTi`2vEob j}*ߍXly];~Wֈk @ -N 1x7Q.TT`0xZQmνS sjCꎇkę͉F-V;,ŴG$ƂCmL`b@#W{+LYq4\*X6<.F4S"h"E"Í}AG:a0dW+fFS)GY#Z>6yUi*e7Hx n15u95 bGͱؘ̓ATlrr+"jcFL,+se9 F%nI[Q#P Jb i5+yY-DΏ1n}3l]O u;-IVth~U^LF܄7.r#9çdk3xTzswF!7 իwk:OrT挊 $W*r޺dHcuLu>bKLuLu@-p]F v&$xfa(bA6Ma2sv`)p ЅvF}oXm0E`S6`y.:F23!l..r6ac&lj5nt" 黮gZqH!:|$!ƾwQЛzK޳Ec@)1:˯ AnǘTKMEV0Vg 8LT| 0׌ UFv:kXL)>2rLyINE9c Qoy΋<*}R`j(4BvFx'otf]֤_ǿw1?ta染L|مb21n>;Ș$$!Cp6rRP&eW;e/e+\yRؐwL0g2a}RqWε~{K|xFvf⧌(\eN7/5̵g4}40B 6q,r H*R&BI0a_0K /~ Gc63LָifW}Xd4*8];͇L=_50pƘAҮdhwsqdЦ :.{A>!_ pKF>mA]/2L`m6)Fy[v{3s6u6acБo爴!q8C-ҹ2k)r O !ͥ'UmLYR>t29$%Xŏ6}~sm3tdp.:'n "w ꘳gᷕf쇦GYNwbwn<~$;A YDpPG?:7'͖@L!V/͗vKW|m#% A-JO66hm<iϷ'JΏeHLTU%TP^ <J #SC;n&xi5cc"-sޖmo /;KD}U5υȝDžG);njb*p$8Uu8dntLvMKxnkH)fE1}M )H'xt[7h AGf@'"jc,}n̍s-": <<j  oJ<+l%=,wY .5 c)3EX eЉ]`C1= ap)HD4 /Ag22nf}Y/Iޠ[R N6Ѕd(CtO0-9v$#b )9FFVfBHNW^#jnXd~:XNkwVĦ}ʒ"iOu[uUcs[2T0&3~# &ƂM=WTF.g %$הûK A&$2YL o2l6W͇6{Y O.(&b}?Kڣf.? 5A4gXI mF'f7]Xj?#T0OȰ[/Aߙ4bXƸmC$;D|K,$@]";&(Q41SWQ=Sޟ;9١W IC ךx<ȩ!MιԓHtp_IZgjdm1hj|VV~Ojq~%cx!>H6| <:c0t>$Ӛ8X&B$f=3H7OڊW72<Dz {ROY8gƵ/5;Yu(:p>P &l;7zz>i=\e+KydvϏokf*]v,S$_ӜJ#oXM,dilsSgGPUů:{;磲`Paְj2չE%oh\ G]Qޤ7pSχyD{3L iٵ >BB*8zǦ.F|g -ԘHS:>uedrSGQ #k<юybybN8/\ohTN[;E[~jz;JECd~0SװcN-9_UNgiHV`(;T4`G[tcZO2fO ~f h9+.1YT2Novr'ˊ` e!*Y瑘d7K^R>YI:i/6 KjQlgє,#q'U =[[pö0u[I{qjGeZxfbg SX]xxX&<;:eI8"k )~S Ou9< >5z̺1OjOwC5,Ɠ}Q+,1$Gµ.ugO!ƾ& ӈ/hpـHț_vu&\`O=sn}n)6s%Rb,/o_bO:ė;8$k8n3_i?R$/զL-}7w oJKpM)3 9>=VKQi3-枹*9'~T,|2I'`}RN>: _"Y|]_\yc sbٿVce\jdhn3X(㛛^,!?u. @/.7q3r$y4sOM 0_zXP;A01؁?K($%m5MkC۲&pexHah4QcpH;`2\Gumͯ7oώc;ܳ:Gf:,$V~ xo[.~Լ!dޛ24^>+ktYN'9;YS ulK!ޝ`h.-%9&~enΊ0+~wnݣ#|&ƃ.":e@zGH0.1Z?D 1>6{]W}Ϫы|3>nnzDl>@\'>ԶP+OLՑs)ﭥ5G z7Uк5Zn4W)Ry5VLX"lЏ7>N$Ssh&T1sa 5D>;HoRJ9ˮ} l+t$nzay^or'_|/oO3:y4*mw(R%Yϧ,+1Zl6`|qqc*#irSKoj[T'S{Tiw),Qp骍䴒o @R '&-rGƚYj1t@B{EGӬCHz9% 1j!>sMR!fc0P_ar[>0I,lq[6$< ,w0% /郪QP+;:JYm?`|7\켤1LOfv] [ğF5 xzF '}Gt ~9a o!0css~Eҽ{?q&s# endstream endobj 30 0 obj 8126 endobj 32 0 obj <> stream x\K;nׯ(=M d1Ȫ3#0w3?⛪`6TIR=_nZ{\Zg}Z{\KP#xVJc~NBOERT>11f. U^`V[2˹ݕD'J52,cD_FԄ :y+. Vw3éDeS\\r.pX(΁hĔtչ{ @^+k3B݃j#b-4ki]k ,\D L^%o\\$ L^A`HOՃ6.l0g۱޸{0v@F%6xpys!>C`$ 1p!hPL!Ȑ'ȍ ~wx^o'9y[2dExdVGzP|,Vg33Nbҕ&[a^NXmC#$YV 0WDXYK| !yac9lՐ#'PsF!Ɵusq$aJq>zY3=81<@H8&sy69P;'ihRd*{?.Zލdޝ2PfhΊf;EmQm_hǝ'<5b9o7jwU{0M/=X(l6 ti\ smu1;j"u]h:!MU&La˚A_QtbEM@FD88G.nk5 J[qHD9CfAl͵e& ZAl04LEmɨ)i9*Jd$|rf+Bpa-J{^`TJK@S QprO(2OujJh44UESQ?9CVKQԖ½2UV1&WhG$GNFt[&m;O%6#-4t m]\ەSL)-7g[hMD^O*QD_`'4x(,lC@Q+rV{ ӣkOQQ'}ƊZ"t[?B$}AMd9Z2;lyL1QiQz^mrFCʟ-.B-Z*| %r@覡&,"K4k(M:(煹fBf ڵp0QmG\h".UguCa´تUcMӡsĄʦ2ts(b< O^IO긂4A FSD+8wO[#Y90Ĩ)>!~ \*(hAkM)huK~A\dKDW4Tie-J:]0Ĩ(D)muE~ɬOߒV3"ϺOX}رfpOG|U]5%9d׽9LM&תI#/M>b<8"F-Y<M=Ui㌈hv`O趾FCm Ō0"T{hd7ڕ^ӮUQv|A͕WI"&徠p$r#rnfQVT+TѪy¬Oow5@jk5+OQ[o4܎)M{4dUnE]m[{{B'ĨsV,5rHPCJq>h.}E!iTvWE3{V~ ݕϔƓPsԒ|ENJ_Ŋ\ћQdIvSl73ta?WqEۗ\oBR ;IE^]EZtNwߨغ@:;me.Idtr>t|z@d]aS;@z-\ twDixrQfFDw!,.f@</D'4œxrC<Ү͡|DHn$ݷ˾-]-Ȯ7Hnz'mi~ZӻfV%EohY ϼq8υ9ʦǡ;RttWwQ iE]Q.}&42KKhD ZDv;t9JPf#N~d1%ow.(kŲ+XtAdЦ;NG d/ yqֽНyٕeX.nik{ %dyëdjN{gW׶ל4mamv۪kKpshH&[f/@rWXt_i ®d|0^iK?mi+@UljMĠ_Fϗ >oKͿ? p /˷} 6 'gyøa?7Nr(|/%0hD^ ?F 9 3 !B𽧦I]~QQe$мLkYXzd^d r !'pv~V'ug{/>l$dިof;j+jt5QM/tSf3(n Q ]>57/:?́)1~!;j=Z1mhCPWlH߆bOq*]96ᅂ/ C0k((t&sb ĹQsrisɢXP/{>GKFv |ugGVGK,8js/]ԙ*|GB'c—Calv>əmͤjO|`r!ݿ̗ociŖ2&OWE^ QjJQ(^'c_qTq.;9^;AOϢ"TͶ*.%dtf SS NkkJWv!iABA)gMYD9qExqyOq:7{ [{5yx+s"]OY~ဇܦi]]E6mI] fL}o՞͹=Lsnp0'87X=KB"j>/N|D Run]h hɦy{PUZ^̕$RM|ob)߸Nw5疅W 7~n=W_$ endstream endobj 33 0 obj 5550 endobj 74 0 obj <> stream xVog>4qҤMp#8kFEYIq^\;[b_lwv&D lf P'4DF~(EL#BLU$^&_А`)%s]\Zѡ™V ~@3UxU"_.JwNo 1+-uԼ׵dwHĶo^D'_^q}m_hwq[ҮG7ЦVK|wy̲Yv{ͼZrW?8&A?v8|^ 7!8(4a 5~ ߃/7 mxyFn@sG𬫍H}&.UL ȑ # k 2K92R,W, 2I9~LQ~⿛UjJ\H0K9L f/-.`RTxjR {H/$09ʔI'՚^()MXzF<D; gEsv4uyfLMk\mBk&t2¨8:7ЧEdzr+ӭX͂][@Zneƒ#) ELkњq _oC;j|Kp# 6Q2TVy#xCy$<:Jb  *?'Ty Gy'N@a,3A( ֏T8<SgYLHwCu/#NB;9}?#CmGmq!o] x\CLiSaLb6W^$'Nd$s$5 A:R,Ֆ7EQ8|j#06 ݢZhrLD'm|h|ARы%0|A8:#eTr/ r"_E&EZUyU[6edWn`>_A|F` a0BUXZ;8x^ "/TS_h;>ogju endstream endobj 75 0 obj 1964 endobj 76 0 obj <> endobj 77 0 obj <> stream x]Pn {L6Q{|Cu.R  I[Ќvf4ԝ;g^`D\5€u`NwV~=8ymI8wnM;͖7صg5M<5+TLJ08Rγ /jF^\ئ@?D4F&dMUIh.Й1KER֤1cm[2꜖i zju{Cv rG endstream endobj 78 0 obj <> endobj 79 0 obj <> stream xս xSǵ0:kfoI[-ɒ-$Y~Kdo#{!l ~` Cb'!$HKҐ&!46M6i8isrH '9mBiْ~W֞ǚ53kc^І"HZcz!0o\ F"4]_.z@Goڍ(go;~]=$W~tVh>h?4t3z|J2ik";ߝGOQ~u%ѝhDCh9 6}Sh=Qxo ^|D매x f/b?^öOF*Cd5>sO |LLG#$U,Zz̙]9cT^VZR\TXzi)d-6 uZZP) Mv+*3аpG.K=Zq8h {e 4+GW V6WNj33ntRN ud8{NBFQYr#;BR+[ZGUV;BB3,G3GrN:k?wFD+]Q֖eu#$w\#Ί-Қ#.뜅ʙsHSE}VyCZ"!T9yN{py ]t쩤-h3??W?"6He 猘,ABNGQP? SmMVg$zFԅv"$y]#ŌNƘkYd̵Nڛs pUJ{[FVPzZͺ)辊w8{^SZ;#|mjjJ),ɠ({t__iiIaT:+#ߍbilH:HUyifErx=#UٹNNI6=s5VV핃aX^u œy(W0`LJWiu#V:uvpm̋8\YS7gs΂"ZyS6κp6FT*{'P u8gL#T}Dr(#u&)#ʶߐ)ifh27|f'ۍi=R0Mb"0LX[29ۜUՍ5ʑƐkLTG@eAAbaȆ ;GR1kR5D-8 gpk[{ĘmPLL&jld|"} H!*$Q*M !!3II2FT~ػR1x7^ʍ?i\ǂ\ ō9F( ZIL$yir@6ypVц333fUgazMȾ gW>YPߞ^tUm@.i]1>X<ƹiPM)@5U}(DwfbT2dž8N%LpQ >"@0 `H+r ɩp^ϙ"j({#kK9>SL ~ÞSNgE䛷d .P*Z#y!iu%m:!~dKDHLHEl0Gϥt)RxT۫-"_L /{Pz% s ctę yeԗ!dKp1C+ܲcu^YS(^^Z${W;J}%vGgo[Z}"(۾[#Q%"8_*<>C?c=oh8Zp(Sk)mO r}/)ݿ1<icO㒆MjzӪL\VBqztU 0-ћ8?)q[PD>:O$Mx9QYD]8GŭD)' H`S55IU-%Ka]{)^Lr+LJ(рipNĘ]~3tzaKi{e!ۘO||זҶ9.b-[x r ViImr[2n] p:g6s{8N(7*w)9SPBCFlϲ)@ѓ?m0lDoJDՄ[.nXhZnnH1A+@^>J1NbgV>[bS1< cP\9k]UZ5͒U  aߘC\:՗==G;|'7Y_ݔvfCeRh숲1 SEJ Y3L5(*2s1^RmdEN'L&^@p&WIu%Cc%-)#eɳfĔG--MT'xhclJ5R^7*GAEx"kJ8(4Fd5d2~>bA%&$MI6DZMݦMyg&H^tky呒<0ަ,ς9YȂN,B*('MO;H .% F#4Nb^D&?GQCdds>`xEW{ۋ{k.u]s0cwp`nk[عY7v₝38=t`H.fk@=J"T%ꒆF́.60}zFja&97VdPa,8 \`syㅻqju1o}{fwbgf~b9? ; v^~{wiݿc]+h5S|B@G(M#v$f4x &:3!Pc3/:\fVTۘ|_NJ(b3mo#mTސ:5`Qi4@sw۠?H<7PiXq'bZ*PA*Mx #3I4hjoꞲfO %bcql,՗h@:OES8YM]L\?u10ɀ@~'{S .a4w,&ܺjs6Z[ZD~3jMpP32cQ>km#3?~im}NY7uK=[ROA:RѺWP2USPjPFpMNH@~1M}: M1TijiEO{Q{E˫VEM4L IP67\d){AՖKU &ĕ-\l&??C%ϙSh-eyu9[: 69VJͦ ]ȤVq66DG5:H j4@Iju2WF~ٸ5oeA7r_sy/kO`:6oןuoBwnޒvHWts;xxx}٪Q3o[^6%+t uI9WBqTy@#Q V]Pj44G4I))+)*e$le_Ic-cڡ9 ';i9UF JYr%c '{]}^n깐Dʗ%)a]KKjq d56jig&MBf=`M9|IN;qj(+k>bf0{Rl]]uN 5ed)קK;4`>([^gsA Ů_0Ff ( j (&AdƎDWv?;SwZQ .pgQN}/q^F ~zd[0o閠9cNUeubBj4|i42Ro҃[ N7,;xwo-xaem]L*Һ 9Mn+N[&{WNkHtD` h.'ޓ֦ݖFiqi8V}5HRӧ!TLiV֮ڶXn^o#}]ZMF-`pC9a3$Y7w׋%Ukg>Tٱ߾ߵt]>zc^Ouϫca&lyp=Ue3RvהopR^V ʚJ3~:Ki=_{i/dz{D'y?r{ ^Px-ޠ(w֢-~oN t6T( y>/u &;{ 4zup&(|@KXXlX7DkF ٜ` m 5ůohYpH8V;ƀYG3: 8Z/ Ur~uްy5ca5XD&OwN9kIR߻Z*O%D˦;_.:bH[HVi᭷0 k a8WO1ǥ͔|=QgPW+B|9&%]hef"3ڜ2gљL)KIΐcAx =Dh}uWS)؄*>r~ONcc9\!2o#9pRN_:bc?஧%dIi^MY5uQǡwUO%LWyb"rY?qkC~SGES%~fՓQ Ք._џ_ρ!Dڮ:=vܟ#3o61QOFa.*: kxkx3=J4Kփ>e)rvY6bRdZA]m>( |MKNֿu:7>gmEeLβʞyY8i?V}c+3Wz+2W<]B40h;xCxbܟ# ,l@Uq0hu)mPP, %H D"JI%!8WRQYU*L-J*^U(CȲ}ٮe%nO148 J=<ɛՖ8K065W!sc~cձ);9Bq}!Y5ϯȴĔDfA76,%S)qnGY0kGs o19hDO bK;9I>ŀ4U+(tN/ ^qSd# $e욹񉖢 jn_1k+Ӛ &+lEz?=$9~ @pv(fv%vRVM|oz_:zNϦ:Խxuܖ/N PYȊYyYylƘ_ZOĝ8A\())!Q̴g|'8!>G ^d6ML(qx]AuMSFԎ+`fMIWn*a;:CFX=T!xꇴ˦MR=*}F"HAҠGvDdGiF=OQ3<+ 6M{ j3_Uv~[z(>}V2(\Cyʖ^?o6yfrrP%X mlAmT[n(Y]HiFtc'S$Z7&JoPM`f (*قOEPg%4>kx,,g~w>7 s*S\H$jEW@(jL!0IVo{bnĖ(5D+L7 8.^2nm ptimOFPwq&0;rtMZQQб0w|Iڬ,HisJ}vX 3V~{}{6Yi},LkOQ{3;3!D%+/j !-׎ZЊ4 H?CB=^!&ɶFĻe{@"^OoU"&n3zE^&i!|#o}XB_V|/Ti>Pb|)&þ|g|\2|E:2o|샧|?>AoW,A|/sX >o_Ӿ^Fo*Ahj|?ʅg|ww!l_d Q>X5/|iu<>5>X9>|U|O|@xmm>X&WÉ>pY.}OQ 1}x ]l@냢o|p}^s>8V99>\,cZF72:aѿ]FQF?;;)m e+KzV^JxvA2!թf}$x;,;zNσq:l,Eqw=GM-@s^jHq#YB!=l6bmXPHQÈ*%|.rTByJ ~j68o |Juruռw;Fg;縋EQw~iBoԔң\!y!SW&*FUhDGHÌ'58S'8i#tuik"Ha$DIGsB G\XdV.ckϒ(U &BF Re{i^jˣIf.JTwwu-=-l+ӱNFr|KW(rrVfSrY~DxQA#*<]U ^#XCjHQW*pB1*\q* UOYv^"7P 8O6/(ep ;CuS*ecgxɎ%\"7_;6άYxWJ߬MJuVoUz%Eb4͒C}"+"GA46< ۦ4vqNpW'>^U߹bzx!\ək< zO;wlDvF=<@d3*-l+9ؘzlVU YY;P[׊z^*H$.k%7m,-:ڍ҂EQe;ވwanhe"')R6jAQ=DdIpYL i ıYJ0aȬHU+B)R8>/yZ.eў#?)^Ү)] JL9Q|E{w\eĂ}f˰er{-@hi׍84egQg({)&`*cQ7{  ƞ-zD)l gfbaxKy[i(Z JA(ZOcH3ar*+#Ŕ |Zl'* d'b3w&K؞GNND }l4\<83ܫ>=79 .ppnr0r–s9NX#%"6+:Euu5MQK].ץO|Axcz "҄ ;yU*^,R*8(#a)po,A4A'MpPP`2< i?Ќy p@b 5VahK(ex|#c s(I`pj, M }ႀG '$$ [8B#. J$@eFaX8'n7 pBam >qe,0&̕ `PARף<ah)r1 !S5ޥqܱOsnh֧L卓Ka_S&ˣvaOvq&Ï/!WdKxA G|TGޒ8H"LG It vM&|Mo(Ū!&. h 6PٌРp‘(p펍]'o9>s|zbkz,1W8,4*E5}逋>倣q;3 8v`с?u|21)![,8-fy hayB Cd nIXI MQa͎p8s`WMLJ i#`D2V)T_ywDX|ݒw.K?j.TX^<W%/[9HKg:pA9l/^6Ŧy%Tu77/TMMILbRNy7!Bfz$:Z>?/:8$>#bl>EPHVheCDT)lMۢy}D- Pt$‡ c1sqNCx>|$c`+cw]O"/;b<=hˮc/k~:|+R0%H(>Je<[: zѓ{OwV'd_}e!w>2 l"nKũwt:H`5.I%e$ @5`2ɫ4ekKJ !UڽFXf\kH8#6jb>%PIN$Q,S+ȋRYXm>cq8jbFc |&*u=+MAu7~B[c?zv铢t(]TvojϮwff:|lO{SgΜ9xl`îI*>WqTk,DF裕TƑ|(χoKKN({ kq̖/EyBPٞS#11޻~LjEPS3*8Q3Nc?_WK״P:wi>ljbwٴ'7?ٴ/teW;w` f.L|96,xXk$[p}Tg^M`5T[{XRZ&9hmȆm;%'Y*$Cr2הixFaE hxExW?M @ɻ93?ec oEY!E6,tԟsw9<WjOfm_8z=ښƿ:Yߖ$xo[W;޶p6!0axoɌ4s!l2͍P@*;G&aCD<8܆!<5Ոp'H ♉iGԈ"ASDjlh2 0l8jP$X"nZ!+gئk6<> @^xY Ħ*f9`Rb'L9@oM1#Υ07wͦ[Kὅ⪱텫,yy iymoaަD|MeJу(.tl=~D=zy~ *gulEcau\L/.q91:&{v7Eyx8T", ^qR^!/獪 #iЈaq7Xcl8c}: ` P1`x (b9RVp7wLuLEAQpp©((ʍOʼ#q`\+@adyXkYq[>տ|bw&xfxrGv7\Φ䓌Ωj\ۯomP(LfWg1R^Qn6(i3iJԢ=x/)qrJ[))cS* R j C CaHƲШNik`@h@$ i*4NW- 5p1 iRd0EYH6C5T 5՚ btHA9=(dry2ȮN.5C g>0hl5~uIۻmx~_ !e߭: X!ijQ!VhTy3QncQ܃2sܙ<Ȳ-a_Թ\u{?߲! G'||/?qd\Bvv $P\L >%cxhS QП4PFcS1I=9]߁o P+ŌU9)>J2gg-d|RDv$q|d 8*'@c{2D,JP6f!?ɌDU0[7tZKb3 uN(NĞ%f1憪 / Ҳ,x+,|, d,( fgk|YԎY=kc.D'UY^f^ϸ6ֿs7lvCjP _37n8]nANqc~5Kz2:#IՍiWܰ&4%S7|4ܰ_θ n< {+7rÓnᆍ V7@Nsc sٍ?t[nu_lwotڤ0XX_Gj ;&7.,+'|8Y9:$XKVx:t`n|OpHEc7tsrq/ҬɎM5"n+r5~)7W-Jɴ :Zf(!O JP&dޙeeS(W!٦oZs mUl?29kd_B>TZ*sJRR *Q^WԭR)ʳ#ino;mml6Gd5f줾qBd|a#46BFr2*Ri~Jۧ2ʡ8P@I II'lbAlBaUA3t?%~?cc?fg'+~)n3CXʨ21 w;̲N1h[k,R |hT:1RF!eJ"\Eoh%34cV(^!6RmzMև'h}+w #Q9+)Χn!9Pn}1dL>Bܬk/ ]yJV XPub7bx VəRER/Zy,zZRJJeuMnԋdfvZE"@.d1D#KSPm6-'AllߋhLVt=4&J;5 Vc Ex7u 9#%*Vb%|PàOx1rC^DGpx <{?<;^s?+7]Q?B1pQެ;+F̛oU5lM.(TjPr  iLMshZ3Wi ١&MԴkviX[BP1X[HH@ V*t mBkB ZHтE \dwZ Zءݯ=%>›Z8ch`PXK{@-GϴW_ `k7j ,M[4>=Mgx ѶjԂ]FL>&cw\&c-κ|$Jd0lZ]G>(_*BKNl(9kY 5l3)i9i16tTKEMW2hRqD*aʵ;E4mr|;]'A訣4ey"O1{EEyԔ[_D3~+Ɨc_}&Ts-*بBK8 po~~5`jMN-Qkk9PK X6:FIʮpi˵4i'^vnZiP3m6_ ·HHv+@GgpTS [/)E~yAS!<7`gn. w:5^?ƿ{kǽcs3-_+d4{i*ĥ `99&41nUQJhgd⤥'gخڦjks6'J 2o]/kөOWt@e7j{$S.銌$]e  yyoSGO9wfv,XCa^q ;@̜fF@b|%vWDAB7 ҉ax7r\5!?''m<ڜ|kUԖ{lqyܗDIZ޻Ԅj-/\!F9iv|^ ׆]֎z6R}3zġB";s:4^;t=+B僇L6Dؽ,7>44 Ó'LJB(m ;^A$|R(h[! k554q A埲"#'zY~]+X.Ԫc2L@ Yidžxcv& ;c4h[1[J|ʶJ\;mnz:2gu)f0652[yˎ2([4b׻S37nS}Ko10zb[›3S"miWn>o8}m/ZVPX(yr]Gyc oZf(OWv }wW {*aOC]eeiIʖ.}⒕;f^K6[ʝ*;{vK5s殓} `&"[v>F!tʲyh浻*p1Bbp}h }ҰD^Fi\#* ;L/6zIfZB;鳐>gyT68M.Y8y*߽{'e軘1}sϦpEpn)m9>9~}'h:_rϢVCAiUMQw=m3710o23b!\+4=g ſ+C7Ts½樨۴uGuoU ; _Dg,?|d5/.7_NH$-sH]s?LKiMMImN"}WՌ͜eYsE>-ݴHLyQ<Ə~`5hFvcD7AqhcQማG:t$VPsmAF* tPqk(K'EZ G:TEZ:pTQ{m]K{wo\e_շcږ}+ۺZzn.ncГw=& ξ^e,ث[ۺ-]k 緷wlWPUz;Z;W<Пmc}nK[_wת[oDWRXu׿Vܳ[(B]} rM6 Y}4VZOo궕ﭝk:::׳aD?KMyu7v{/;*ԏ(َrRBԆZ;Z(PPt٧'軍7i-4 TIsj{>GC;eS ۆw/ZCúQ?-~\]4vu|YNCVҐ.^ -cr籋嘾k9#b)yg-n9~90dw-X$CU)Y+˥uP5Q|Zb;M:J9~Mݫ"uAnn}o>^J}7n\\9_%J*iVCanye$_ZG!#Gn6;(l=r(ei.Y mRp#* Y{C>gٛľ/\Nzo7m6=rh\Nڇ5?cY6IAzjpҽ0:'z7`Zas0?,ەtye7}sl30CDZx'sتA8{mm?b?'݇!<<C}M] ۑ[_֠k+oZ?V' ZfDe҆MZ Kj I9L,҂ 5#TS UA-DEAAk sP- &6={!^YN. U,>YsF9pΈzI]~ ##aiI{ws8g$wQHsbVꐘc:ē4|c.v _ \}4QO뇾>:ix,>4}\i44κ})]_! endstream endobj 80 0 obj 19786 endobj 81 0 obj <> endobj 82 0 obj <> stream x]n@=O2]D0w.H%ĒQ>Td/i+u0av440op>&pIv췹c-kOn2VI}wGisd_6L]M~Nc[4O zRBfr˒cHŮ)ІX7akHVyNW: }߽J|i~2-S\Ų \"+s\0KbV˕y\x mΖ!,{g9oX>pN3W{8%jǾ ~GL9o&6Gy@_CZqա_K%+H r[auLb_GWD-2xF`u/_`x7||l~ųx o5/f~6V~+j*c_'JQ JJK`V'Gߐ?G?m>i9hF endstream endobj 83 0 obj <> endobj 84 0 obj <> stream xX}P[ו?==I,=a! '?CD$ ƀH@00JeK rvHIMmg&M;dgM2mGhf'fvl[=I|tO=s{gP {d2:]Ω2)9} *6nlb~Gy kԁx4#T2mc82.IywOo)f;ˑ+&#ѷSjG2> PBZN5#>N'SaຟPl|ۗC ~UPMiUqj{q/s/ܝP|ե F8 }7LgʣQhwr=1!KJH%]<2z9^"^-ADo!ם #bIx^gև' CgYSc.mUO_ m Cμrv$6[BeeP,F -Mj_1Fa\ўR\ Ihz,瓡<_+i 7Lg3_\K7k=b1z2Թwy ry|Q(ӿ tiY%er~IueKe/kкL(`1TY NF\I> N+q$|~~InǴ.Jd˞csK ܬ9Nh,hV1UJ%FcIIh*-)MI4L2=oITil&azY.}C<$!zHC"zaz<11)7p:ӻ \ kWt 8mݻ9w_h eN'eޝ:B:FZMd1"lhcM\bTDH5){s?ê9ǹ[Z!Wo٢bc҉[ oʪ,fM_z _Um)齹ғގ: WrѹLKz(PWUq(ȾjR7{Ha)),63UFݿ_a+7~_~g?xFoQm[z̚rVkXv}%ꮬwWT~}A ~OJQk-lh1kg8k/;X=}+`@o%X }7Ӓ/pJGՍ4I:V`w\Li]rMtĸiD 4j>u=6]R|<>!vPd/Z;WkXxu]y]fmxWoo&ZO 6n/"vM[R'tL}/ 7Yˮ+b#׷49g9oG,d!-)#ȃpDϑBKH. pzxIr5<ƑSA?8:d I <r.4̮b!I˿M{˅86l;r5e57$`p|V髫=QZEho' 3Ory-7Txn n3GwւqϏR@NIʊHA%ʶlJ2PTU:uJnU:u._,2g $q2v{>oHҍcwcr}/$}hb&D/ג4k MOhI&\U_r 7өSHݧhp(>'RN{zէso*?Nm7OUem$=dۡpǔ=& DWG+6]F,Wrm9~x, >8,Qk$Oܿ' X#w[o¯'bD>}?>v+tUpRt,p`I[( /^ *DŽ r$+6[V|,9?}~<_>, 1 SYyu}q gg]gϜUYw T{F@7rJxfNw9ӛ0{{OU }ZxjEa9\c1r/n+'wu g>O |GG s5gg0ݥ]ۅHPyCِRMI2(c1tUo3pqfeg=e‡‘ a\HCꋇ8١$Ke*D ؾmeV_!pkLȟ3+tÚ{]Ľ  }ؾ.qc d{HnI"!!|#"#es9x>XB7:Y%]c;*ީozM Y0SK6[&{WjC.@ETA9Rc, +L ҩ\*m]Aҩm")H)rEۧlҹTq+$:Co)EVm(: Rexq endstream endobj 85 0 obj 4700 endobj 86 0 obj <> endobj 87 0 obj <> stream x]j >AfC ^h0:IFebyz9m ƺ:X+:5Bas;*,ƒڨpSWExlήm {-AOMpG j@czƨ/XʉT> endobj 89 0 obj <> stream xռ X[׹(5[BBb m`Af0l`'vҘ834;C N-gh 4is8mMܸi&Fm mO!wn+oX~{ͣЏ(BU >7߅BhAޏ ~@S(e $e,O( Jg2[ ÙJsgdfe{rraQqIiYUbu ?ÿÿ!3}rdB7!4)]G; E"z=NCj՝6mt[Ytz =nB?JP߯B#f${*Zg0Ehݎ!4F}Go`%{0NV GXC*06CӰ^oثГ Y HmtD@j7^G/`hf2v.{<.AV=Tvhi:J^#] ~ԏoGS͑c\ȟJ= 9Q#ڀ?Q-o:[[45Zذ>ٴִKMb¦eaԻ1*쭫e#;fzkS`}VE uԲˀf^[?pڠ W@#4PE)&ZָVw&}u7tjE + G;(@# WRn\\*eZюmh6L#c:9- .&cYgYpF?9^;bC jpu$2HE VFv׀õClm <c`Uuk`BNxa O $iʊyV\|e NipG$ ?̷~l-.3Lw?ҸT۬xeBYb<G>Y6ddgdl/W׫T GSv5TGL*!^Q+\[pXVݗKcRRu/~IG\y$$ *IQ!hQa Xyԕj6A*riKFZJqMQÆ,m+~V̶ze-y_zVmQw*75KSՆj_AEvJ!IXg-uj+Kvs_dCbn댕Z3Lf4&@Q (DQ D Y() @PPu %P^X;x2; x^d8L8 e6Yk<#hj4LЩ#%ZɭB}[IûSfRPŮ ..*&q&([H2WY|9 lҞRRZj^< 8#j92csj͟Ool|:MOwrȈVcKpr QwJHQ{Űb,!]ya% TgT5ě:nNϭԧRTT>MSO|j+i)-X]*`ʞkvc n]yt$/ZV;Qa`; >x4JE*ǫWh4 NZFB5**X8.u^C /,rf[dD~9rم NKn-? xWt Oĵ3i0tȤbTI˫lMYq)Cۼڰ͖6j&zm)vfdK l֐3^=Y5UP,,0tGq0ٽZqb9ƫ~a5m;bφG ζvmG 电cO<ߦ u =||vͲ[ח=.̾ppj]owz"`"&+}\ѻnkR'V97J6Jq%VP؜zof >!@fDͲ;eK4%.@vg2jDG5T9IJ*`/XV51^2 L@pfʖ_FٳrNE։m~vX{#NljZ+&WUri?B"xUdcʋfz{IdO>:J8924m,dZK)EZFON]]YZH ~璐oɦ9>jnRfjm.y9šsԆe>9Sm,JYwt``AGŁ4Oq}VGPOH#MIͺ;udvFKjI '4=ՇyE*Aի*Un:wL(;C>T}"St*A2o%ٸ $xqEpAńe2L9(Ioܱ{EQA߶;^GymK( * Wn:,!"-7<~偟OYϒWٰF?3 l, )RH -g/+x %&Yr|2IrIxk-IhrRnREU'[llash D]\G:eYwZi'8ݘ"Vg2uY:^F$ׂNv%7ʱI ͳ\Y Ȕ\x7eOd˦9A9.c"OJ^O$B௲^FKA&%n{3Sb5[x;W %TdRgi}ƕngxzud: -mlthcM.ƌ/GvFh 9A:̿/v(Բ Bڼy{y/zVyiǻ;RwI&\bJK~%kdLT7A9Z03wŎ;$R/OB{eov{UX2ϨFm-r5(qOcEn7#՚;'7*< V%ɒȒIIqZm1A|cĿ`0(wUҢdvuzgڳgz/;؞MLG$ʿ/ 9Ѥhܩ?'C]i%VHXq~ߑWiFccV4iF4tVsJC4_—V u_Y|(%"֊`&( e7/fTmǻj߿qWqY5kq`oc&误$_c41r %~x? C&e0v3sa1V"=J6"#2hʨ He^[4?8y,ߔ֨WJ,;,y?p'0!i~Hf̏$:?7qy/2,K5~?Fd kKs-{ ̄Gic&#_X#a&kzpl}Y,tKRŴ=dH4b 0͟ ,ed@LyXX6 &nY,i&/F²cɡr1 'zHlW6xj*^ߠlƯD /D;V]Wth .sc'.$=53 HXf7`}W}K%!1%hfW*乄ʩʣҗl_-Ֆ7w4w*pV\Nkhmh &_kZҵ$ng d3XʤrEk.DtfJ.YWȒ-I]2X bxѴTR;j\VmӒZ5:vj]e]]e;qm/3gF^9E)qGkjZ;ľK5f71 Z>8ZyۦՎFwy~q;ovyv}_I=hCA[!DQ"*31L/R(Ze("VVk4@)`wgMz9"Wa9Vy:ee* TLV$JeeL1SK" 'ˁ+1'rϾ_ĿH=)Ε>xֹ`w,tBA9ŝ2?k5 &~Mg)Nޙ| \rO%BѨ Qedf:tkxLz1a<@͎KݒB5b-46V,r 2gbzՁ+xF:okr=}ҷfY6K~kqn+?]Ouv+UwF`IP9W!@>p%_~AV s qt2,t`WlgјO;B:9H=~O<?Y<=a7f\_y.uyX4aDA'v1af#<_iIF.|ϑ#u͎:;_Y[y˦Fܳ#ٙ:º{`:A ~wu^LH "=m&y'RSzL4q=J*H+\vKMR0$uz-qWn4jJ[98ʷ|s7nY1@;%z}R-d:܎vPrŽvt8TjuXU Eu U*D3搙"`&@b["q$:r|^ըꢊS=n&s")Uǜ_{5so:^OԒ"-wh*7Ojxd}o <82)}a}Ҏ=;~rWзj:H8ɣ*US^]{rvIסY(81=8d[!]M4C@NivӤ%FQ^ {Uݧ֡$!$1QiM &4Oi4)J~< # O%% <oIab<jA=9N/(q,uYԨʳ~~IQnzd>˛o-Y+_9E,9^{UW.J,O$ -d2e!&KB%&=zZƅ*bԉ'7`q=rjn6puЃ+r<^(;9[W'^U x`3@ +\ܐܕL W'*U ,V*ȁviR@ ؗA8i󀶨C"83+ =YQv"_aMNt= 1?.,hNDC˴OEW7.B˒s+qwj|-[7-\"5x'vԚ^S{׆$u+QZg7:VYh/uE zff5 9$g٪ܥ Ξ]<414!G+| P8ܩsx'{DDz$=!8$W( XQ3Ï%`3EBrO;c4O 'TT$jS h|BON#L "e*lRaUar/`i\>Kv2$D$s04J (F 0%1!ƦΘyMI$ҏ" RGn{:zcso^/Ir?hتg*3K_'=IPB))JҀ=_#528'41D lOX =є#/'o(" BF4)|;/emh/^֊K՝ ;򢨳̳,:bPU]OzBr|BK.Uh3=!)htXr\G :OFMc2 >;=ИXG(1ބoFZ^.3eZNc<~7 cc-ʮrXuѝ n@&I0BZGɩfޝ~G 9m%A~}*}%}UH)rG:B5fgơ Ab $mӒzyJlG6Ce4,B&LdMZM)'dfer8g{1{1 I_-w5hh▁_\#8є4V|i}lS~oў vҁ^rE:QVQB4Z(:=_B? $Գ۟e7(&ԽvԽ)i''#-HX_+D3?HjS(1&8RՃm>Sv}7C|kobπG;ЯՉ9{RgS-CNr&:, 'j5(m*&9JmX8sr97n)j7gtCbe@ޖ |3܍',( AqyCnW\ZߒߟO˓p|9m2mr$:v;f1Cqh rrS C x-;ă¬*@tuu`7j*mb+}I:(Pzsoc抡ھ䤥uK6Vy]TYaĔ$Dp%]džRY ';R RFYSR*+&er$S~ ȕ-hIEj8sVTŷiIM[xiMxأ=qyW;ֿ>ɶȷ#`pY#|O1 n!qCQdZ9?NI婻SgRaa@Wp D:awj$-ӉMN3/+֓`)z{X6O@-Y`bƓ"Wҙ#[o8ܙu` Iw>q''6(M߃ # ^0O~R,G-[.Z.[* i2k!M9::p䳪q!(mưx2*c⟫(/?P1Z3R|nMzn\L{ffM4=YK<.jwH%CYhs*ڠ 7A90?I(kNR#nn}Mnl2̵F/vvYoIQ=HI,~]3=Y5Y_`‘:\^Nݺ2Y"|(i49QV" c$V)B-)v͕s5tw6[J).>$cF/6xsmD!ktlZU?/c1)q&woVzmͳPm( |5` RoD2mes}|L'_Skϕc*UTgTWԙۚw4_iu?ҷ/?| W񸴸P;;Ma|Zˣ?Yw&a BP/W/ /-Lsd" p]);7&@}#4Ehg,A4tx,-sF bi%XZ sX+<<Kk~,֡J"SBYKcBu4A:KSTHci iybF8L|Rfs-#Àm:9~臩l872{!oMޫݰ^bAhH! my@ Y|-T3@ >z4 UqMRn)e5U Hfh&NI}Pwm e# ~4{'0])=Gv$̏W #mai1+߶IoaF byoǽA" MR/RњCR߭PcT+$dPFj$3$j͍R<1xnXI3-mFk3k\)OHmr4$}=o'C&3F%8HXuϓаD B׬1 Gem0˞cƉBm# yR&iC!H];?Mg0s]".ο_22d/~=١ȫ'?öϺ>>> oߤ?xGW///R8p1`MQ+5Ê_{V+q<-p_/h38yLkP(3 nvW_ jW_> o{~<=?=o zt98;w=7u_FU6ک>|?\qw&tf^噸2vzyKᗈ>{A:t@a'|ߴ}T/9? oF뽷=~v/k2ӈrtkž~{sYa1KYYkRqw498G<.Y`X ܄gR{ǥXj`z$*4Ђ -13hu{ƥ1~\CADƭ=塼 endstream endobj 90 0 obj 13669 endobj 91 0 obj <> endobj 92 0 obj <> stream x]͎@<73]Bkɇ(<>S]DV T|0K-L/<}:oN2Y)%sas,gxވKtSosЎ1wYr:w?e6Q QBWUKbm BZ{n7ՕzC+wW{jU5<%-tA_6ԓ2q_Kt&#3R?:a4J3sU endstream endobj 93 0 obj <> endobj 94 0 obj <> stream xz T[׵9+ +H 1QILƈl0 ©csBsLvMj8 IS'm94v4q_/ >W±Ҿks>>̅E GL?y!^E' n7] #C3;6_C(!8=5>rJhLh-_πz/8aҏ@dRNhuddZ3xiG_WQkBFNz^a+݌3aO7H8Л70DџѷS쵣0!zೱ>5Ζћ==t3Eїaߠ;Y|Yl@DZ} =~;)\25-rs<s1)(Bj>Ϥh&v^ŕ h}1`)r(t};JM:V=^F?BnGt|xW>/`#VƧ^+{&/ѽokXn^F.GEg;z mCgq?p/C0nM+Ya=u MFN@Hl tXojl}5UkJܮ‚\GNv=[ zVR*2eFMv9BZ@5 ׏0"H16R:jT]X 4مșF>h"%C fMF!Bp#[T) !eaZTTɵOkܦE&i$ t75Zm‚ֈ(u eDK( J:[X,xyamvȍf.0M "zg$ɻ <)76Ek{u?YGl]X`;_2oe ~_^YZٻ. jtpa w[#8oI?Bgc#Sn%mJdoW.֓Ht;"dc={W{N4{"lvk<{$w3MTv]DG;*Xj N.B,褊揱E+,O*쀆i7 ;-@(,8c폈#q5-a0hQ_mWIj闦ħE 4<q75ҕ y]9X"X4H@rc~K8r6iioﱷw O[ch@" B?20P {}5<#(:`JUZ:Ȉ M8Z)GթeVOC6`} t aFejj (/-T~{>`"bGr꽮v Mݫ̈if~na!޳@!ReFUaq*Y?g,ZEQ)?>iWogF"Dq_kdа&WguH@mbDH:UijqW1\r@Iu:Nj .zC>(=t1EhhtҒZd3LQsLo;[5ߪw:-*w=iwfϾ޻vk5=/,FB&|ރ[ Qg9G~Җj5cˢFn1[YaDnFtz|^v;.zȋB\)mFL35h4D\͛o49ޞj[=B `6_&}Aval7W[ W"Mχ bmu; 99VTBoo<469S\}et]rK_+M Rv{`ep3Nq64x.K]x=&ސ(7j{fîah0y=?nz8`9cNy&_cᢿRllG'ӄŒBJYZ]W?TVe=|W6f˫:=FP<˩3)exYN ^*}Tl'IL7!Y?ªUylUת@Ę*EظÖ2ftlVgB,Âd;$)ȴJեh3]] g[*C5} k͂HC4<Xu0Q}ދjq\L]pmxKrJrJxUcBa 1l#[7).|pB0)2}Qۖj/MrJʌ[z?kO1*|#sw&zۖ?t鹬Wi6,MirLLwNU cn qaj14V9Ժ$4j+zlg ƹGmk[-ڴERt5]]hy\9BbUqg+UV- O΅]u˥ĕDHUKBΎyo䌂6S9Ѳ< ˱)4>Y8kXvI l۫(fPB,20m-˯M ,+rVĚLd2a8-Uv Y)$1"jSY+=|kV.<дoޢڊR+ٌ7NIX}MKX-k{ȭfbضp&&p np Է QhAET$'f5w9KM],K(+\)4.TٝN6cdr^5b# \  tƘ;um .KJVne,I[m=}=s^5pnpKRSq_&R96)7u k{|}։ƦBᖎG[ |Ri}jUјSQ!3774FF:)ANr4C E"v* Ci,i}=dh32܍ ^VQdzȱ!ahc>n%H:-akYb8.P` lqZ>֩mqsR\T^Xbď_f[ߦ DwEO=Oo@y_LsL<):lMWiZYf bwee.{hvSA= ܷ:4{3kf Xꬳ˗K𫬣t+ۗ8W77T0}mr=u 9G3Z/zqY?GIkq؜F7gK+Vrl: 5FEJY$[xĮ!L96 ո3BXM4J>чqvc]~cRMlt  @6?tԴ]kҷmF9; S]i5ޮ[th5{sY~'•̛c Odt 1e7pJD C.gD*cWc9e  ZHI8^I~Sr=nIqQh+tԖ 6⑏>wG$U4Q<}49};gJ6 t7U1OV)3͌<j3kw /Q!kD%]6}TͺG9+M(bz1g#T3cno)Xn s/j*օ+r7sRzb"RB1UqO#eP0rO)']];~N ^Ou|-|CX椽C܌̪J^tIӴkzeJW1ҁԻ+膹\r+ O꽿 oL!ٟp]eC׌?riز<\![ubb +Q[ֶ`3STr:[-}.Cyے\[˔'Y4y+ Iz,)٨V.ߗP_b ;b}5ÎV$DFvl_ذȺMicktSWR2_{ uεR`10ܚ7u&ix Ν 4AHw8Jw`*2S Xu%Z?}'k)&aI&LUm#2ș04XXM ,q$1nH/mwe:ݝ)c)e{'i2ˌe%7ݻ>kii`~fI9<hQUYĂK8njˌxa@ * % A؀MFh4du Á2u`Cp#8O4&p P#djz8C-^>K.vaWK|JrZT|K`$OiM*ĒBcRTyYd0D7$iS8b݃2E{UIC[CJk/UdIuU4[0U &b]sqqCfgҝ&fhmԂābĮZ' 4God.˾(c 8F7rq8ɝGv_-a!w4O ݡ2.Z'G]Bݶm4`V ͆fv.amk}Sw]ok:abV3#Nl͌'&ɩmd04# hg҆bWQt@&'.L̆C381)z\B`$ #Aαѐ8 8}lpb6뺺 =ΐ1f&JovXv C[&amkY |NZIҶؘa6(Y? i3S7Fî-'Nc&&?ACF `KfڂQ ('#G%a0O<Mf$ ҼսQ6T'g@+CDNi=,jӨ,}]0ẓq. #Ob%>$yo1ٻ$Akrh=xt/c:>|'<tQ('CbDžǧg=%_z !{>凙: ΂eP فXއ=z?\~x#0uVL y(I4<IIum| M~D{k>zaN;XOý~V"2(I}x T1~l.?7‡olN/A PطdJH  i2 J-})^K@{6oG CH_J+!Y|NSA?O=I}fXӷDU t2u ~Ϸv5Osy5}JoZWZIUM|?+~6-h3y}zy}pk}My-պ)A9VKZN0;t/W# |g$>Ů{pOoxz# "K_4lx.v3Ng9 O'rY(֥؝2nCó 2} #)8(R3LB1#Pj50Zh/ endstream endobj 95 0 obj 8769 endobj 96 0 obj <> endobj 97 0 obj <> stream x]n0 > endobj 99 0 obj <> stream xݼ |T0>gu3&Iv7&dM ! /H+! %(EZPkj[ŊZ}j[m-<>c>UgnB@ھ~nv9s̙3ȶ~'#ͽw?턐 ǜ[RB`xfO Q 6xZzMGh%}wW Y((^ __c>]!X?4?A@ZՉzd[lĤd)%5t32=9^?7/_PWT\RJ_ !7 {I٩< d"]yN˅&s|%ŴXgA$ȟ/!Oo7.#a}#>1J#0Bbw`0JGan٧k[%J ~/+1|8U=J9%Us` yNI;s)#uz]"eX5p?I}>R-X eysScòKo /U-++.(_VZR\T{23.Gb6 NQ@5g$'g\wbBjƉ8{4՘2b\)G1YL0;~gayV6#|WKR"\XYgMvjwRԅܡ~]ԉE<')X./^S-\]dB2 E I ct󴙬}#\/j&&D,H:DlyﮮzT !vN|@9KN鍥2֢x'&jډkN{^?1\&XHszklms}$iU{f:b ~+ݮReiG@\Od F"MѸ!r=,LNB+ə-ެ_>35(ヽ586p#%{", t(N䪮oP,Xjn)ȄY?\,K̍dwMO}}"p#a_[#r5rojNDov`}{8buW'cfpyR$V,b EHXH쬙詎h_ '9gdfȶGÙ6l\;J(VRjPK{rw}# FϬ]!djT:ь ZU Qgj0QJ*U ld#鯎UD6Bj*E:pE?~XXBÄ2Q`E2Je"vwýYۘx)DŽb5; $5Jg8 9ɱd%?VY?Y etY\9LZ?zBw$kU 4nO_46r|43g @ h tD}\ Yk jJćOī8R|έ+ ;0 tvBIW4:v]BNJ&*7gM1/yzCGwUE|B6_Jf;Vm(2ݰPVUWEAkvmٜ7t))6XT јߜgFcK~ Ni&4,ʑ)6Ko0NO-Z}XV4&%h#*/^VdR0ysѸ\3/@>s`̯Ϟ-ȇN!y4$ JKF΍EK19ڃH95gjaˣt#U.Ѳ/,T6o 7|= /l@QO:Iv==@F=X߸&2:KK2X ,.=Xॢ%I%N[Pɿm|b{sO^ghm3[7Ez%Zɷ4DMyv~=ݝp0mNU {tV8nxnjg&4^D4s]`0o݉-pϛHܦͬ A. ``rY qtcO0;g&> `60҉\\' VZ E.:xо_]󋟂~jӟ=2O&{X_N>F/=#:&9+a"%md %OJC`F3kA6>6Ftvv^*AHݬ9.֌<i{چ~o}n=Rnh}Eo {':h[/ ?s 0alOi6Bujj_mc:1%lVW*: +[$׵2lM R- n;-|O5}g}|*/[ͽJ fKlvneZzm&`gfV+uƍHʬ}<֍{3T{[wns+޼6 n-[}opئ򞛪Jm5955`ãrA`)czt+z~q9-ղ ZphڧgZTjhV_= VQ L em]9>ȁ#TԲW> %E-'<~u~|n^p1\>Kݘ+[ ÎּGCSG'{zuCu458lu BnS{zfs r|)ڷqeeVf//'NY1UP68pp`*=VPLJyR_Vڅu-ͷTh۵6'wAٶuOKsROϖz| rhؕ&֜1?'늏_Ճy\~rrX 2 8b6.޽bnw,ɱ,RkMNp:ޣiTu.!lje<Ӱx܍yfyFĄwP2 <d4atGeQ8Ylq_'4YB]c3B[K@mfH 9;[yPW ߰l['дy?PL|զc:& D *kr>yճby}+v"-jץKLncQKp-Eiz2L١`jźr6-reOY33x%J  XN'DU6"⛾h OO_q)'/Eh./ Z A3m!`BZX: +T}=VC*m('D?Ct{:BPk(#DU!PMF{flY`s\5ge[RDۘn MEB$S~!x,GB?X #~ [!x%Bh`/O1V,ZY5E l-! LX!p3U"ZAuW!G9AGcd| >TB1u@+V^Q0[J؜w^Qڧ2%`!.Q> TpPI(B:v*/+gBL#wuvvhȕOWg0ħ)|\h!ذ1JQE:YJ,1p% Jw'\܌nE2a+OE}#7ZdEٺ>6jxR\|Fg~͞gB>S}CG|/+ZR><2krtp/Durur!$$=rH wZawA\!NdhH~#|2G!9hf/6: fƦLn)[fqͬO*uLV0S;~VV_7m'BS<9 K_L_hcodB$H7Xű_\+sKK7[tS3iɝc%kcaWһ-c3%d!,oOڟD7dBߴĕ+M1.r9ivkzvS#=>~&]Hgk~=5^YX`NHKH# fO#]q(lEmU| ݜ^/|&bQtP1 tѥ+Ix=RB6N})PVͧ>t*2[h5ʎM շ6Tyk,\ߥ igy܄Y߸aњPzvD{Ƶ>^YtwwGT׉Lt(0Qt־9АF@NNQm`c"4FɬjfK+~hatȍ_ee' hY* piOmKWחO$7]xG6q*8UK76o)e)ݝZ(2#[~}%4au[z+RoسF9`1qQ*h.v K.9ކlaWiY[:Q4cбeRmkL1M:mBthŔ5 -V8p3Nd $K -QE$iyޱ>WLܓ憑;*&_*ܵU6ۂ2kŪThm I66F;I&yYМ=h y$ z4&d2c0eJiN (rݻ~ke0 P;+z3]Ku"Ssqzm0t䳨mMi [&VT[8`?砧,va8 n9_JW?4twۺ{ju梎]EI.%xCA͖n.ׂy;Zr+Xzt%e<+ߐΘL@{MV j6:۴6l `8d8n8o $LR!9SS$kJbtB O6 }`*Ȭ |Rv@8{]Mc*[vVe+C9YpW:흣.RSqUxAE(Tr D7 %AJ }tDM2D TMhzRLռ@U zB&Ie0`/Vl3 E̴Ihbal$bA5<©H~Z<JJړYAUdOoU>ħRA)6[:j"Q7&Ƨ=@M 9 Qµf;|*oITo8jx3 \pbn'*9Y.>ͥ8qYPhz5XjH%XmhXm+{X=bf\ݢnS?~^͕®v/R[n.ƙᅣ^(y;; [?x rZ/KH >/DRje^6~W61idl*uXimFm3S9 u/T*Й{)E^3~xWX7ckO9:K99Ąu(ݡfͳo&MS?L&GvN_זrE65b3myrƢDgT4L&4u&^CUïۣԶx]A)SFP5_*ÆReiYN(9p;EY{|W6(s6fܜgw3'Z@.nmo橕uNO oūdTp%-uAWo1[-syb}D.1aaz82dc-`hFGǸs8\N 0oO4M@i8Yz=%lJt$Ds:-Ĝo9ӧqޝ]:υO>K1YŕL^{ A𭭮4g龷V*^ :gvN<4pZw'-*׻&e^\3L0Ďqfb53z VJAJZuMa=f0qr\cxOӨ3{Cl!3`(c $&@ε|  >-_=*i._A#*+**m;؄FlXyq,ңDI䳁{ۊ 6K"~s@b{JPzBL+gEbzĝ=+r 4=  CDž3´bTܜ*'M(d:ccf2fcƅ*eG%y ZyŕK29*,>u*5,2 ̶4T)z{՞j`vƙ=-m 攂 7lFbժ>2s n9 nŶ Ab~:n~ F~N- JP\wͧu~|}WrL^[/Mu΋69ԓl&%5ꏪt _*%M"(A>nvr-zm; vyg-RWKR&ԋd$UYQ  4[_jNaDyVZw@GON6upZ=]ۡ]Σ pApDBIpZ'$xP%)a $ȑ I?%?y $!: JL;^H(<-g%/v $hVb g?%w%@ aCUEc@ ~/O%xYg$IpcI\j Pn 5%lջV7%xeSJH(,AJ ;DHpBE H,Al?8GvZ$Q%oSПOlՌR8T1xVB;s$_ACzkh]+)CɜQxSh_-NpzRaa!by#8KYl"Sҭ\H g/yrm;S^Y/΋MިDI^QN+{Vy89衞|4))RHaF %LSR-[jx~@]]=WNu032l46foٴͻKonaLTwi;H:84Uekz)) xñiqzmt.#tMO UKs֜oJ9f;9twZӒCsrG_~8zF?V?O椥ɒ5Yݩ*>%I\%I%m?懧pi?CZP ?R>?%GxqR~x_!Z>?~x9~S)pLh=~p*xd(v8tN}"? d--=Cd~3X˞Sp03UyOa w;'SEةG0-@* bZ+zqƢBzo\'EęˎMJKf|+1 Q?S:N'% mQhԓ`-NTx[OsL]N7OpҺsJKOzL!'q/sGHE߅$Qt8(®,74a;vCʔ )t\\7sH 9rsIJg[v,Z $Xgu8.rݓf$w !gt琙xZKsnlfL/:y\3!yޑWN,gEv*NIJ8cV և5o6~3۾m*]uKY^<تo\Z夭?oh{W SƪoL}d[UZni G!B U-F͙ kfr8[W6`f rw܁EshZv\˳?}QkR=$N6jJPDt.nnC÷2vs 58 _v,1󍰐ÆcK .~K|$om۔M O &J݉vڢSSsªLhHN8'$*vI+:sJFm9821nfT3w4cSy 8W|xrMC/xK_Ou֍G6<ȭ>alj_tƯDa'ȍêq=*ΩJϤAyv|wf MCa:Si7 !emzRiPk4"fBХR?6cP1fU|walI [ͩow^K wnkKq|Ζ3`~' y''ZCqpMQwѺ7*3CQ|,=Q+9)o#p 4DGծZQ) jㆁݎl&ҥVYQ4ZC!0Ȏj`78lo/ü7?7_T|匲 6 a@_s h4* X/j@Pew0&BX+LTMbqDMK1FS\T5~9r,i(9DHa"3TEIDx^E_"-]!?s@A['BN7^D[_=NϔYEZ!« JXoDp"a!YExGGO8 "+Q1NpXqFDX#BU"!Zb=V~"wDxFG:zLBo^QxzT P=w5W)mȘ_Ld(;WJ\kKC+k@WQlʻg\_R'RKwpYWgؚn}EV՚1biébNˡ4ޘgwR5zvFWT7g3ctzũл&G_-lq/(G?b=K8IܡS HR "^9Ua(]E/qUq%tThhR:Y_::(~) 'f ۄsOsnj{w?QKɉO>`韔=ס3S¼g @!Clli-5ayx*\ȉ4ztQR,~f5Q*ZԨtѨvmFh rHKb"fwjLh`G5jepz@ f 9`0000LF9` sZCƅ`UD$ N @ "8a+kL+Ȯ+~YWgsc#R(5ԥ֢j}S^SoC׏|ߜ~jZ_|'>ʶ}$yZNxM 5^asv9ƺh H΄47Kfↆi|kUYeA_*B&q7GLj#QMŒ}%\2.PG/bn.KO,ȃn*N_H擉7~a}?pvy;֬Z9sI,mǎ% ;6޳{S_OƊqԲlƹl#%ߑ}qjк$.T<4hCZ\ ZӸRiph geTR qg$G:!Q'I~p8e#V!f 66mZoY;4y;mstn֠0zOi&m8aSܳq15j^ԋ@ajc*uyC{Wa5?;nz0㟝:,/ƾ巬 y9-ݝL;6Gu|eg;6·:\ AX ӡ/},D(Ox6iECwkH7r:#l9r8y<&' Cf8g9`42fBjA f7CL=L/vYՈ,dNf_QƝRaş>?}uToy&ICiDך6Oo9Xunܞ%[-[ÓӲKK~` -b4>. %ݴr.aˢ`we[xqaNb}k6{UG8z8B^P=u+,Qdћ0e6 fq\v#(As'NO1}_}Jdh,/H䂲z{:*iĭJژDъk(.O!TYEC8G\ K5$匢u}/&y`XJEѶ-{\n:4Px}]^WNU:3疌olqX ;6ђ6c nnWe 2G*Z)?,E}uLypG5=_nxAЧ1MCtQl ysb%K߫X'AJ;SLN;P$zK.tg~s+^(dbQ;7uv>>=?dLsm9i'#t3EMLw85e-9#f3 {'D1@?{UJB(VvlFsO,8; {,pmSL׶M>2u/?}9 c.j yF4h:BoET~{tq̇#ބ:QFOHE啱jQ }>r y4;hKUHYV?]%hϿצޘV9/zA9W UGyjQ.h"gy`d97e2M4D+1 c0hn}U=@4yY')2_/οrҮ҉R:wK]!cWҽ%=c [K]Em2W.hX@bj^P\zs+C>Yk R5Ѭ|o A]J6AiDM&h:zv+jfUtnr˔VTɶ㢻d] ʪJhqJS˚w<|`pʛ/Mu7 g{ܔIOJ Ei/>ӴlOW'~wCcՋ[uC^N]SR?˟ nӂ#$O(mpRe:ϪQWL-#w+I5}G /J*^%[ipzoC 40C]x,/`3'w"4ޜɣeװ^W A,ӁaO^x>O>>}m^Qw5\Ԏ扼xުo+#-#3 h.UiR`ETu$꟞L 's戋l<چGc@+1Xb V]8룰X.k:cglJ^D[o628767ۦPΥccC[֏ vؑC^yk6Yu[y6oZ mEƷ)5"7sX;;kSw2HYпv,ohd]`@u+dX=gQYA'cĉZkI BͤuI/b#[+Ed9PUbۏە s "5Hmj:,aꠂߋa {lӆ? _r .[i .Zܢ0X O* _pW(xX+ew]:3Trj?Xo)TQAv+b,WL^cJm[؀5(\fmRBx}LP()fچ+uCHq]s>9^ J/q6F7O6#n1AÊ>_Shn\e^0 mƨlxU~3kUtXϲ_VvJ=Q sޯH;OI]qp[K^nͺ&aphE\s4|xpnLy>cxxse! aG3^8JmG =#CG8ro:8ȡ#G/pȇat/t{ާ=s{Ud֞89D:w!jww`%c\`OE/g-Ή z۾Zӎqo F+(s(WHmc+y8_Cۂ![ תBoͰ ,ލ~4d0W>8AlAq4h,omB*J/k{BuWѣi>|͹jhF^nnrSQiܔ}reZҤ4}/q/X K2rk:kX%QWt11<] k/Z&Zj.4R @0UM{L057yt4mRWbe 8 lY՟VO7Gԍ"p{$s9{M+##uwwv]*>R=ғQC@f8ԓ6R16:>oS1(ed<EXh4E}7~Y(K}t[F}kt F*VMUj1\cG!ERAa}h0i\ endstream endobj 100 0 obj 15541 endobj 101 0 obj <> endobj 102 0 obj <> stream x]M0 xl`W"5@I@w^J=$zlf3'_ob66SCbt}+o͔1-zf2?ӶOS~0<x_dIU.9Ks f=_1_c FtmҎ]MMfdeuY^0tn6s 1T2"K,+JS8W\(}(} ޒ7r ޑ=xOB}皻艬]/BRcP蟣ώ9ru9;|#G7Gn?+?MUƬ9&ߙ Y Y endstream endobj 103 0 obj <> endobj 104 0 obj <> stream x{ XT׵^33g10aQ` ((A51V2iDIc"6i^6M4M[mҦVQ3$kZkg6pDW!׷eܶgٹ>Gim`ݦ&'D-۸u_#DWLxpwLJBJ { jL|[R^ˬ#}+隋[)9G}û~ >h!jrK ߵ uYKs%oZP﫫Y@_UY1|nYiIUXH[LF>V5jsH~c e,GCC;z{'dCFGA݈)#aL*&m V簅ެuئk%DIYJ&3v;ְ% Bc N"IQ3-'Z&u 83ͩ7I&52zC-u QHUHB2 !:g?5qq;{Wu^;ML \Gm(w$@(Q[r2ˮxI FmSq\Ӎ(Di;1s|=S3;8lFdLD%L;YB;CƞAoYc(eeGflj}ni[@d3-#=l-Zǁllu(}kО3U8!Z쎉8թڐECbZW@KaU&JF 6e; SoLBP3\ 7I kj\@(>[uCJhPBMEk\ue[DOmFqxgM,xI1eR UVDGڐҏ#mbɝNG@'34P9lή5mƖQF"Y92K \HuP ׉F|p,gHۈWTV:BfPn6794RS,ҩi;푫 b-006q8 "dlpt:m!GrṬj!wPLĎų&̐i^z%5EŶ uwD |Q0,gA#Z E֎Jg,X[qdpwLpWkWI:Q5= ;'3 } ʀ,ccFif4 LNWJo €M8 #0Y 42skDO'q"DBq̟ i C:Bf\j ۄiR_hG&@\|ϤJU1bLr ,01q0d7eMZj gCA'k7{bC ԤsE-Y45\!K 6->HlJb9hEЄ.rdQ\_G/T_ ݣ\(r' ,xx)N(.N0y=0~=ӯB1{u8^-8gTCOv-{"+?"MdY}f>R86O͜SŘٺzJXe[Z93X i`o9IrsLQmڋ|;<ݣ&xl{g)\tt8J!<Ǜʛ+b-eYCJؘ _{CT} }>Se=wFܨ"0! 8(wu̘J N;0Y!aRvKf .ѹB!9Gd! N g9@{]Qqa&%ub$6¡"g0/`,Xug»u]:)rC:2l,T',)Oy]f׃ٔMXڶ;XH65{Z+hrۺָ<ٸI+Q ZhܚW:/-0׺0'Թdl_pSjpK꼤Ԕ-^i:s7GqGەrt|w-Kkc։hgnB|)Դ OUQBYTx=<\E<Vz{y&k{<84"feNT>~Cw{`   x>@l48YCp B5[<vyX#=H/39.3Ii^7yvgY N35D$q٣Wc6,C!ZljZsKxj[U4wMS%f%fZ4OCHlBq5:\ck^_^P@O\-r3CLsjrYRbnOD)l>Wo7 r3UំUS qß+D]^ {ލ%48ʟJ9i\+OڕWTR6ed6QR9'~'7\QC[f.əF|pI,.|rt >hTȦ\sRCbbe eZmjUrI;/ITcvuE$ \ݦrNv2mT&&'!:_TCItPg2o4FzΑsK< 3:}ޥۗ֌朊,GYN~?FG䜜Zܣ?9XRQ_QQlݶΖL*}]~mF݇G!'$ԓ̞@&M&6&A0" {m:NBqsTS^_]oM֝U_~˭rWޅ4ַh]v۶y7t޻ήIdpՑ%WC@vX96{&Wwݼs"x\8d`7]ot-ޫvME{f(@yl\/%%gdVl0rr#s S`Z!YiR 1&Crb/D y@\\[NlsLs3P{!Л6?׺jgKoJ*]^ulVXN1pBw<Ν:ݣ^T0ppE979wOc?V=e)YLY;ؙUJFOz[I^SRI%%5_BFOFggDDFfb*>n[@h#Kִ&QHVos:K[:ma&<Л[@Tf{Jae[tذ՞uw_`{ d#erg0X|MoKB|he X,IML#l¨bԁ`(DXcT!tٮwʾ/nΖEbz:Fݼ1R[|=^odxb?qP5v{({+h/TӀ /مvH|g!1%{I$Q4[͜[xfC?;X4 t]ؗn5Ѡn]}5'ۂ؈_Xѓt9NP$l11{hhE|4BԜs f{ñtٲ$t6!KN*kteUJJt;!s8 7[,f&GEG:ƥUL4GSGzF*<4#q.8QҺ"'Ÿmo>M~/5|E?r?kqOQ{u^ X^_*g|fdXwYu\h5~%|gq!|gi~\p_J0õp""RQ):*u05C C2p?ㄹO{W{?o[WgyzQq$Ϝ{6ŶcrKZ#kGT@g^*=nsϫ-lSt6kyks4J>X%;ܵ4>=竷K,2\3sV+f1k8,6RRTͱNWFܠ-MgѬ,G0_]zt]HwJ'unNg˳L9flhqu]vBq^k3q|n:O[DHS綔 JZVY—۽b&aL﮾XiƢ+vཌྷsU/֘8oE_OGB߽=ʵw-k+:F6$,=IbpئJbq[z,N o@˦qkFw%@7$$"fgs4g%!QxhR`_ ; uϫwT߻i(_N^Z;[4.KBa̟=\V4Ř?0&ύp'g7ဋ0Rh0h8Ԗɋ%r{]8%2kvX(Y%c~u7߬NK)۳pGo55jTOLyǘ䡓dGhW Biy\+cd[5ך5N6!*pW\*jiʣyyFc`t-PR,-qu3sCq-4^0*s赑W̐qj6*Q`"ڠuǃ%֪݃r#b_^n㺪{Fr+\iu-sӴ:KQf^5`ki_^?4%ۛVf1-WCI%(#RGLFj&S H;%r]6)o~Hģ|,q1B$h2j劁}k?׫H eAUL!(Uc['Ïֱ-|Ϟ_;PTvUlzεup|)iOxot$8ߦbY ̅TLEc0viJ%i*ʾpg^U:8%Ⱥ~H #nR`,_(EBCpU=yݡ^W} 7gҶ4̡EBNIErc sg6p6p΍=.([ U*$f>F|Yוb .R2h&-mG(g~UuNJ3y]QխLUz/ yq&*}{o91-[:,he6Wą?ܾt]UƅwlYC=֩c̟ݖ>YGd7^pdYG@w#UD;({!7E@gŊ.q|D ա7' !B(2LŘB]o#=D N>p[ 7)ܸp;Wu&ΜͻX{T Yqh1*æ9` `0$(ϻLwFc|o)Y0@d獱lhdIigq92b i V3 ⳽sbnGkUVdkQK(ƵlIlخ-$WUx|_QW<_~VqUV3*SbArblCP9'gf^Us=cge2\>'zY9ͼ?l0?,A6q1ϛzÁZo}0E5?sG -ΛJ!`MWYR-l>l3eY H&IN C//Z+y4K˴!(ԇȩIMB⩓/mH]8)j4!)$ )#ci5ba )]lPpz {~/h Wqؕ!h:59#@ :-0~C:a"HtFšqA5;~3l~; @Yh94gsnmbqrb9[vuc[xƕTkz:~=HE$2Z ipX Vc%`<or+.ȃw}a $3=b_Ao5gMEWUijU]6EsW`M jFC2Vk2Ojn{Ea D*ane[ZRߥkw=/χ֎gp+/Uvnn>2Yݙ/?+ɹ VܳmY~SCb`*e?\bPjN*CV+rpVA~~"/Y2.*mW~F/M®GχQobjw8X:F6v~0/Tx ??ϫ*`A d;}_E^ӏ)w6ҕa)G&`tKn{L<.~"r"[qHD`"}EDn "}_X쬇fmb?R}L.pՃ'E_"Ԋ`>ˌqÂbt" uY,r'zJ'B5/Yy^x*kݢ /"`qJkcHψ+DH˰vq(W>P _G.?Oqײ:!pChhFfGʄ{F<'rM_{B:+^gDrpU#"5b')*xTNSj_F$=w Ni^lmZ%6?xT|%j(VGB;D F8EVچ Ao!MVMr 61&m"w8 5oAMY ~@@&O\kΈbdigTiã_.rdz)W>6z R¿6NEW^asIM#e\,x`%ժ*WRZ:DD)[Z!, J(>xI?yA#?3%.}9:/X& A ne?]C]\ %PIJt^HIߑn mF Xf ~Y>&JҸDkVK)$|))]K0;S"e~FrD{%vKtxPh!K| ;=&rP;X X&h0*>>|[:&%"}U ZfItr0|@Kp\nL34D$¨!#RfFQvc2_HPj2N&ğ`ئOHX!>^uqr\y7FTb5=3Θo|qb#~aj92qql5;yqf߉MMx[dޘD@kJ`!" Cyٽ Ǎ|Ye쮲O ! 0Hq8Ts24`i^dm'0$;ffV}`ކ%,'{V2:^][xrV$FP#?0`U9ic4/_A^yBj,"J> a6q?( _ªŪWchZ^;n>fY[b@o37?>!!d2Hы )4BkئF ˯ʺ܁0Z<9b%h' hZx4"x4&kѴ$hZ$zhuC_Žh:SѴ̧X\rvE@Ҹh|nn4͑M$=H*x4"Y܏i5(֐WѴHR>֑-!h:F8Mɭ{kF[dž rrm̶l;o[4Wh[qMAc[ m-[mQRPk;6  Z{ G6/  l+/- 2@QC(\!źm텭q[pjŦk`x/""7 Xk« D2`[;>>sn(rlr񭁁кa} 2Yi^aTN-80`cH@?Y?7^82uІ!W:52J^mGHl%cd#dH#BM0 ~|7^"2XZ@6: A%7|oQ2Xk!Cj HjH{{wlـﶿQa%C?F 1k.tb +@յ]\ ^(B IҘP_ߓPD* B1Zf&Ѹڰ%-6ak>5>8#G0=zY bz} b_ 1ʑIqEisWl *EnV F}QJjbP8{Ft_܄\а26_Ljl wd$m,{UډH-"BNpS4. <7؟msѸ/Gz4Ky^34a2ȗa?=)JK/QEp]_xً۬;_e\UYV7U\ Xյ@i 6eS&$~XKOS?iozc&ν~s|>6gI6 ?ʲ.ϧg.;):@NN'zNNuęNS`cٞgg<}cctLn›# yu>z(o8 Q#OwKO'(>ќe= H#;)ρ{`.!T+=͕Gζ>70<˱~jz?`{Yvwհߺ߱f?/OngkK(w݂Ll{ ޹ 'y:x:2`y)ԞMjW{vj=V?Ww5XW+nvvvõp`9o5''#>ɷ%Ҕjm;)v6 5)s}EdknNՇBcn71S @fS`:femd3Zl%`ᭆj߰ .Capp0cPG <~;%` N:Se!uleO++DڻVvL|+sC֎PϜP?&d؉ I, 7#T'DRd nfPr΢(`p||DA :7+5$dZ )g8N6F #\B0 ƌ endstream endobj 105 0 obj 11859 endobj 106 0 obj <> endobj 107 0 obj <> stream x]n0E|ER&EgI8AY.f8f݇aNC裿yu!dڨ~e%ݥ<_4VY3]xW~~mi}MaVE4筝KO|L%+#kMnuj;p٪(̇`nc- S4pY3WpEނkNف5,e xG.LyMӿ h[a[п=h;yd_N4ooq.Mj[;8Wo0kӿƹ 5xܳYqO-LFhckd1CiP%O~+ endstream endobj 108 0 obj <> endobj 109 0 obj <> endobj 110 0 obj <> endobj 1 0 obj <>/Contents 2 0 R>> endobj 4 0 obj <>/Contents 5 0 R>> endobj 7 0 obj <>/Contents 8 0 R>> endobj 10 0 obj <>/Contents 11 0 R>> endobj 13 0 obj <>/Contents 14 0 R>> endobj 16 0 obj <>/Contents 17 0 R>> endobj 19 0 obj <>/Contents 20 0 R>> endobj 22 0 obj <>/Contents 23 0 R>> endobj 25 0 obj <>/Contents 26 0 R>> endobj 28 0 obj <>/Contents 29 0 R>> endobj 31 0 obj <>/Contents 32 0 R>> endobj 111 0 obj <> endobj 112 0 obj < /Dest[1 0 R/XYZ 72 628.4 0]/Parent 111 0 R>> endobj 113 0 obj < /Dest[1 0 R/XYZ 72 553.1 0]/Parent 112 0 R/Next 114 0 R>> endobj 114 0 obj < /Dest[1 0 R/XYZ 72 328.1 0]/Parent 112 0 R/Prev 113 0 R/Next 115 0 R>> endobj 115 0 obj < /Dest[7 0 R/XYZ 72 652.4 0]/Parent 112 0 R/Prev 114 0 R/Next 116 0 R>> endobj 116 0 obj < /Dest[7 0 R/XYZ 72 457.4 0]/Parent 112 0 R/Prev 115 0 R/Next 119 0 R>> endobj 117 0 obj < /Dest[7 0 R/XYZ 72 322.7 0]/Parent 116 0 R/Next 118 0 R>> endobj 118 0 obj < /Dest[10 0 R/XYZ 72 384.6 0]/Parent 116 0 R/Prev 117 0 R>> endobj 119 0 obj < /Dest[16 0 R/XYZ 72 652.4 0]/Parent 112 0 R/Prev 116 0 R/Next 121 0 R>> endobj 120 0 obj < /Dest[16 0 R/XYZ 72 531.8 0]/Parent 119 0 R>> endobj 121 0 obj < /Dest[19 0 R/XYZ 72 408.8 0]/Parent 112 0 R/Prev 119 0 R/Next 124 0 R>> endobj 122 0 obj < /Dest[19 0 R/XYZ 72 316.4 0]/Parent 121 0 R/Next 123 0 R>> endobj 123 0 obj < /Dest[22 0 R/XYZ 72 422.4 0]/Parent 121 0 R/Prev 122 0 R>> endobj 124 0 obj < /Dest[28 0 R/XYZ 72 652.4 0]/Parent 112 0 R/Prev 121 0 R>> endobj 73 0 obj <> endobj 34 0 obj <> >> endobj 35 0 obj <> >> endobj 36 0 obj <> >> endobj 37 0 obj <> >> endobj 38 0 obj <> >> endobj 39 0 obj <> >> endobj 40 0 obj <> >> endobj 41 0 obj <> >> endobj 42 0 obj <> >> endobj 43 0 obj <> >> endobj 44 0 obj <> >> endobj 45 0 obj <> endobj 46 0 obj <> endobj 47 0 obj <> >> endobj 48 0 obj <> >> endobj 49 0 obj <> >> endobj 50 0 obj <> endobj 51 0 obj <> endobj 52 0 obj <> endobj 53 0 obj <> endobj 54 0 obj <> endobj 55 0 obj <> endobj 56 0 obj <> endobj 57 0 obj <> endobj 58 0 obj <> endobj 59 0 obj <> endobj 60 0 obj <> endobj 61 0 obj <> >> endobj 62 0 obj <> >> endobj 63 0 obj <> >> endobj 64 0 obj <> >> endobj 65 0 obj <> >> endobj 66 0 obj <> >> endobj 67 0 obj <> >> endobj 68 0 obj <> >> endobj 69 0 obj <> >> endobj 70 0 obj <> >> endobj 71 0 obj <> >> endobj 72 0 obj <> endobj 125 0 obj <> endobj 126 0 obj < /Producer /CreationDate(D:20191015133449+02'00')>> endobj xref 0 127 0000000000 65535 f 0000163388 00000 n 0000000019 00000 n 0000007048 00000 n 0000163668 00000 n 0000007069 00000 n 0000015004 00000 n 0000163864 00000 n 0000015025 00000 n 0000022711 00000 n 0000164067 00000 n 0000022732 00000 n 0000030934 00000 n 0000164279 00000 n 0000030956 00000 n 0000037350 00000 n 0000164484 00000 n 0000037372 00000 n 0000044694 00000 n 0000164682 00000 n 0000044716 00000 n 0000052202 00000 n 0000164880 00000 n 0000052224 00000 n 0000059131 00000 n 0000165078 00000 n 0000059153 00000 n 0000065238 00000 n 0000165276 00000 n 0000065260 00000 n 0000073459 00000 n 0000165481 00000 n 0000073481 00000 n 0000079104 00000 n 0000169035 00000 n 0000169174 00000 n 0000169313 00000 n 0000169452 00000 n 0000169591 00000 n 0000169730 00000 n 0000169869 00000 n 0000170008 00000 n 0000170147 00000 n 0000170286 00000 n 0000170425 00000 n 0000170564 00000 n 0000170682 00000 n 0000170800 00000 n 0000170961 00000 n 0000171123 00000 n 0000171266 00000 n 0000171383 00000 n 0000171501 00000 n 0000171617 00000 n 0000171734 00000 n 0000171852 00000 n 0000171969 00000 n 0000172087 00000 n 0000172204 00000 n 0000172320 00000 n 0000172432 00000 n 0000172548 00000 n 0000172691 00000 n 0000172834 00000 n 0000172977 00000 n 0000173120 00000 n 0000173263 00000 n 0000173406 00000 n 0000173549 00000 n 0000173692 00000 n 0000173835 00000 n 0000173978 00000 n 0000174121 00000 n 0000168865 00000 n 0000079126 00000 n 0000081176 00000 n 0000081198 00000 n 0000081390 00000 n 0000081696 00000 n 0000081865 00000 n 0000101738 00000 n 0000101761 00000 n 0000101957 00000 n 0000102569 00000 n 0000103028 00000 n 0000107814 00000 n 0000107836 00000 n 0000108048 00000 n 0000108365 00000 n 0000108561 00000 n 0000122317 00000 n 0000122340 00000 n 0000122534 00000 n 0000123112 00000 n 0000123538 00000 n 0000132394 00000 n 0000132416 00000 n 0000132615 00000 n 0000133061 00000 n 0000133368 00000 n 0000148997 00000 n 0000149021 00000 n 0000149230 00000 n 0000149777 00000 n 0000150174 00000 n 0000162122 00000 n 0000162146 00000 n 0000162351 00000 n 0000162865 00000 n 0000163235 00000 n 0000163331 00000 n 0000165679 00000 n 0000165739 00000 n 0000165978 00000 n 0000166097 00000 n 0000166257 00000 n 0000166389 00000 n 0000166593 00000 n 0000166804 00000 n 0000167068 00000 n 0000167313 00000 n 0000167692 00000 n 0000167913 00000 n 0000168297 00000 n 0000168721 00000 n 0000174240 00000 n 0000174357 00000 n trailer < <64788D7F662C278EFF35F015FCD48BCB> ] /DocChecksum /3501DA01CC61E3579DBA3C40D3499F6F >> startxref 174533 %%EOF grpc-1.30.2/doc/health-checking.md000066400000000000000000000061201370425124100166330ustar00rootroot00000000000000GRPC Health Checking Protocol ================================ Health checks are used to probe whether the server is able to handle rpcs. The client-to-server health checking can happen from point to point or via some control system. A server may choose to reply “unhealthy” because it is not ready to take requests, it is shutting down or some other reason. The client can act accordingly if the response is not received within some time window or the response says unhealthy in it. A GRPC service is used as the health checking mechanism for both simple client-to-server scenario and other control systems such as load-balancing. Being a high level service provides some benefits. Firstly, since it is a GRPC service itself, doing a health check is in the same format as a normal rpc. Secondly, it has rich semantics such as per-service health status. Thirdly, as a GRPC service, it is able reuse all the existing billing, quota infrastructure, etc, and thus the server has full control over the access of the health checking service. ## Service Definition The server should export a service defined in the following proto: ``` syntax = "proto3"; package grpc.health.v1; message HealthCheckRequest { string service = 1; } message HealthCheckResponse { enum ServingStatus { UNKNOWN = 0; SERVING = 1; NOT_SERVING = 2; } ServingStatus status = 1; } service Health { rpc Check(HealthCheckRequest) returns (HealthCheckResponse); rpc Watch(HealthCheckRequest) returns (stream HealthCheckResponse); } ``` A client can query the server’s health status by calling the `Check` method, and a deadline should be set on the rpc. The client can optionally set the service name it wants to query for health status. The suggested format of service name is `package_names.ServiceName`, such as `grpc.health.v1.Health`. The server should register all the services manually and set the individual status, including an empty service name and its status. For each request received, if the service name can be found in the registry, a response must be sent back with an `OK` status and the status field should be set to `SERVING` or `NOT_SERVING` accordingly. If the service name is not registered, the server returns a `NOT_FOUND` GRPC status. The server should use an empty string as the key for server's overall health status, so that a client not interested in a specific service can query the server's status with an empty request. The server can just do exact matching of the service name without support of any kind of wildcard matching. However, the service owner has the freedom to implement more complicated matching semantics that both the client and server agree upon. A client can declare the server as unhealthy if the rpc is not finished after some amount of time. The client should be able to handle the case where server does not have the Health service. A client can call the `Watch` method to perform a streaming health-check. The server will immediately send back a message indicating the current serving status. It will then subsequently send a new message whenever the service's serving status changes. grpc-1.30.2/doc/http-grpc-status-mapping.md000066400000000000000000000026101370425124100204770ustar00rootroot00000000000000# HTTP to gRPC Status Code Mapping Since intermediaries are a common part of HTTP infrastructure some responses to gRPC requests may be received that do not include the grpc-status header. In some cases mapping error codes from an intermediary allows the gRPC client to behave more appropriately to the error situation without overloading the semantics of either error code. This table is to be used _only_ for clients that received a response that did not include grpc-status. If grpc-status was provided, it _must_ be used. Servers _must not_ use this table to determine an HTTP status code to use; the mappings are neither symmetric nor 1-to-1. | HTTP Status Code | gRPC Status Code | |----------------------------|--------------------| | 400 Bad Request | INTERNAL | | 401 Unauthorized | UNAUTHENTICATED | | 403 Forbidden | PERMISSION\_DENIED | | 404 Not Found | UNIMPLEMENTED | | 429 Too Many Requests | UNAVAILABLE | | 502 Bad Gateway | UNAVAILABLE | | 503 Service Unavailable | UNAVAILABLE | | 504 Gateway Timeout | UNAVAILABLE | | _All other codes_ | UNKNOWN | Technically, 1xx should have the entire header skipped and a subsequent header be read. See RFC 7540 §8.1. 200 is UNKNOWN because there should be a grpc-status in case of truly OK response. grpc-1.30.2/doc/http2-interop-test-descriptions.md000066400000000000000000000177071370425124100220320ustar00rootroot00000000000000Negative HTTP/2 Interop Test Case Descriptions ======================================= Client and server use [test.proto](../src/proto/grpc/testing/test.proto). Server ------ The code for the custom http2 server can be found [here](https://github.com/grpc/grpc/tree/master/test/http2_test). It is responsible for handling requests and sending responses, and also for fulfilling the behavior of each particular test case. Server should accept these arguments: * --port=PORT * The port the server will run on. For example, "8080" * --test_case=TESTCASE * The name of the test case to execute. For example, "goaway" Client ------ Clients implement test cases that test certain functionality. Each client is provided the test case it is expected to run as a command-line parameter. Names should be lowercase and without spaces. Clients should accept these arguments: * --server_host=HOSTNAME * The server host to connect to. For example, "localhost" or "127.0.0.1" * --server_port=PORT * The server port to connect to. For example, "8080" * --test_case=TESTCASE * The name of the test case to execute. For example, "goaway" Note ----- Note that the server and client must be invoked with the same test case or else the test will be meaningless. For convenience, we provide a shell script wrapper that invokes both server and client at the same time, with the same test_case. This is the preferred way to run these tests. ## Test Cases ### goaway This test verifies that the client correctly responds to a goaway sent by the server. The client should handle the goaway by switching to a new stream without the user application having to do a thing. Client Procedure: 1. Client sends two UnaryCall requests (and sleeps for 1 second in-between). TODO: resolve [9300](https://github.com/grpc/grpc/issues/9300) and remove the 1 second sleep ``` { response_size: 314159 payload:{ body: 271828 bytes of zeros } } ``` Client asserts: * Both calls are successful. * Response payload body is 314159 bytes in size. Server Procedure: 1. Server sends a GOAWAY after receiving the first UnaryCall. Server asserts: * Two different connections were used from the client. ### rst_after_header This test verifies that the client fails correctly when the server sends a RST_STREAM immediately after sending headers to the client. Procedure: 1. Client sends UnaryCall with: ``` { response_size: 314159 payload:{ body: 271828 bytes of zeros } } ``` Client asserts: * Call was not successful. Server Procedure: 1. Server sends a RST_STREAM with error code 0 after sending headers to the client. *At the moment the error code and message returned are not standardized throughout all languages. Those checks will be added once all client languages behave the same way. [#9142](https://github.com/grpc/grpc/issues/9142) is in flight.* ### rst_during_data This test verifies that the client fails "correctly" when the server sends a RST_STREAM halfway through sending data to the client. Procedure: 1. Client sends UnaryCall with: ``` { response_size: 314159 payload:{ body: 271828 bytes of zeros } } ``` Client asserts: * Call was not successful. Server Procedure: 1. Server sends a RST_STREAM with error code 0 after sending half of the requested data to the client. ### rst_after_data This test verifies that the client fails "correctly" when the server sends a RST_STREAM after sending all of the data to the client. Procedure: 1. Client sends UnaryCall with: ``` { response_size: 314159 payload:{ body: 271828 bytes of zeros } } ``` Client asserts: * Call was not successful. Server Procedure: 1. Server sends a RST_STREAM with error code 0 after sending all of the data to the client. *Certain client languages allow the data to be accessed even though a RST_STREAM was encountered. Once all client languages behave this way, checks will be added on the incoming data.* ### ping This test verifies that the client correctly acknowledges all pings it gets from the server. Procedure: 1. Client sends UnaryCall with: ``` { response_size: 314159 payload:{ body: 271828 bytes of zeros } } ``` Client asserts: * call was successful. * response payload body is 314159 bytes in size. Server Procedure: 1. Server tracks the number of outstanding pings (i.e. +1 when it sends a ping, and -1 when it receives an ack from the client). 2. Server sends pings before and after sending headers, also before and after sending data. Server Asserts: * Number of outstanding pings is 0 when the connection is lost. ### max_streams This test verifies that the client observes the MAX_CONCURRENT_STREAMS limit set by the server. Client Procedure: 1. Client sends initial UnaryCall to allow the server to update its MAX_CONCURRENT_STREAMS settings. 2. Client concurrently sends 10 UnaryCalls. Client Asserts: * All UnaryCalls were successful, and had the correct type and payload size. Server Procedure: 1. Sets MAX_CONCURRENT_STREAMS to one after the connection is made. *The assertion that the MAX_CONCURRENT_STREAMS limit is upheld occurs in the http2 library we used.* ### data_frame_padding This test verifies that the client can correctly receive padded http2 data frames. It also stresses the client's flow control (there is a high chance that the sender will deadlock if the client's flow control logic doesn't correctly account for padding). Client Procedure: (Note this is the same procedure as in the "large_unary" gRPC interop tests. Clients should use their "large_unary" gRPC interop test implementations.) Procedure: 1. Client calls UnaryCall with: ``` { response_size: 314159 payload:{ body: 271828 bytes of zeros } } ``` Client asserts: * call was successful * response payload body is 314159 bytes in size * clients are free to assert that the response payload body contents are zero and comparing the entire response message against a golden response Server Procedure: 1. Reply to the client's request with a `SimpleResponse`, with a payload body length of `SimpleRequest.response_size`. But send it across specific http2 data frames as follows: * Each http2 data frame contains a 5 byte payload and 255 bytes of padding. * Note the 5 byte payload and 255 byte padding are partly arbitrary, and other numbers are also ok. With 255 bytes of padding for each 5 bytes of payload containing actual gRPC message, the 300KB response size will multiply into around 15 megabytes of flow control debt, which should stress flow control accounting. ### no_df_padding_sanity_test This test verifies that the client can correctly receive a series of small data frames. Note that this test is intentionally a slight variation of "data_frame_padding", with the only difference being that this test doesn't use data frame padding when the response is sent. This test is primarily meant to prove correctness of the http2 server implementation and highlight failures of the "data_frame_padding" test. Client Procedure: (Note this is the same procedure as in the "large_unary" gRPC interop tests. Clients should use their "large_unary" gRPC interop test implementations.) Procedure: 1. Client calls UnaryCall with: ``` { response_size: 314159 payload:{ body: 271828 bytes of zeros } } ``` Client asserts: * call was successful * response payload body is 314159 bytes in size * clients are free to assert that the response payload body contents are zero and comparing the entire response message against a golden response Server Procedure: 1. Reply to the client's request with a `SimpleResponse`, with a payload body length of `SimpleRequest.response_size`. But send it across series of http2 data frames that contain 5 bytes of "payload" and zero bytes of "padding" (the padding flags on the data frames should not be set). grpc-1.30.2/doc/images/000077500000000000000000000000001370425124100145415ustar00rootroot00000000000000grpc-1.30.2/doc/images/compression_cookbook_incoming.png000066400000000000000000002624431370425124100233740ustar00rootroot00000000000000PNG  IHDR]$=bKGD pHYs  tIME DZ d IDATxwXS{QDPEQ*ujmU[[[]VuTܣ-nU(U*( ` B~*ZTy>pͽrιDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD4IqىR|IaI^^iiaDJd%jIEDW_G&k%* %%%q '9'=?e""b袷f'FG?q}6*ZU';%ŧ`\ 'fJEjK2R~ 'ODD ]}ᇢTI¨%ej C~m~J~tDU]mYVZr9<]>Mr23vg=1>M $\]~9IENf*ۯD /xZKWk%edLϚ G 1tKڵvozk }<t|m:V^;ҢI?˪CUjw;,vk)CѡG[V9r9b˲]g3Ӳ3|C=[ iGu t |>n-X +*Ɖ~غru 1tѓT[w~2d\?#)Y&7:26@RN'"k]*\IkQ5]DzFVaQceEŗij2DDU?6otֶskќ?fڌUFv-vI$ KK2DD&px1Ȃ2rO3(١m'+ `nz5i䑗sM3 ppmٰE1n*DDUG5mimb\<տutY7P}P'k=23JX""z8v:4ڙ+2)GWV-X:k]~ߕdi =z ˼=w,dE2@wziUjWFKxCW-\:nAEK[AZi&էT^U!""G$PMM ߩpV ^Fzn x8NjjS20ֻ,\'c}Vw14_ZZ^DDU+\NblnĊ6fX""b̌]mbȜEZ46JQע+1tPFz ҏ+UQk#'%8ϊCW o3PRxޟ  X> Nf)"DDUstT> xG޿]E"Y""zY\k5cgx֥5Q$$ay%%"DD2Uʹ;to|؄Vn3ЁNkP`;+BDD/}(EgaˬU#DDvب>P5a5_7`>o+@DDU*:ez⬱'WiEzzBp!"`OWH*k3 \D[[5 ""7C_]S}\[p%+ADD ]oL#aENe5E841nA٭QI$%#;MJ*aEYu!gિĺbcXjյi\rndEqza/+U=]H&1b.RPÈOjCW2Vʠ~^=5Y >^=̄Ba1tU7QDxML1c7 یHOyn{ ̬Lz/ M~oVXM-m<6DEA./ֿ(wAjb: <& 5e823rjg@+6DDBa{k:NnDDUu.vmd*m7l奕F^v>͍j; 0๡&0oh O""b:f.v.ˆFTW `p#fm#bPX 09 #bj7m^.t;5pb1|W-X.tlˆpvkǂp6| ׫[mǠ.ure;SdU1tcH_: ?u)X LV-Ȱ(8:kع;e \a`ЛH1qrW>bߍn]' 1IB`n-+w39Z-۵+/l,ЩOhԑ = IߏUshwA_1 hݵܮWx'k>o6pvkK_|{-ǠΰhhMk0]n-ޣ[ITgU ] O-oPӗ/CZb:|1ܭG'Ӂ`ħC0o}?Co۱sЍqNW*J kOH s\.dda  x]z:fĈ*Q*jOꉰغb7vaYeϙ=&AEEivawQX eCsvtAM|4svstuk]g ?)""8JT*3Ib(T1tUH*W?'z&DDpxJ_%WȊkj)!+* yTBc\U'u=zNŸSϫ> EW򠨂lq1tQ9~k7.ߪQ7&""b誛݊K lh)^5 """ ]7l u 5=YQ1^F>72, VUy=\.؊@ 矹}?hG+D!""nƨDA9Ĩos^G^v>:u=oo۱oQA~W{Gr,B``c}zn-z 1WT1<}`OWU%fFv|}CCbˆ}b}-~3n-Cʫ"9S!l{ VXޭubH%&xCWeKu}6]%*7(+*F_C&?+%3 ztϠ5|>qbSZ>MpEz""zËUTZZz=&*kVºFu 5lWn(,wWsWm'Gf,K)YHBw;TꪘH9DD{HPs=fZ]oC٭ +l%-?NHOCv\4 ~?HOu* yuy.!""w4Th_a!)N޲9^4;|pO Bl]~+egVxn]啀byC˻_UPCG '!/){n{R}PP[ |p#& alnkA7&XmI6DD򤥥gC_- 6 غ|7\;@@dE8s^Luǃ?lUn^DICJxѓ8%(#G.Ŧ.e5AvF3D.ѳ=:kA7`dtD] x.G){b13rѳ=OԹ=|I1DD$!KR3R2 5tjѲ] YL-Mt\pvk\ԣYCE @fJL-1pLLC45ON.ldc~ϣg4m٤NRVT  dR2DD{^(pF͖[։jfeQ+չ{?P(D>\ZnppW>~|Qث 啖Ӆ9]/duYKML c}TgfoBO4mPovekWQEI)~|&C#PU|bP'ڙ{L.--)^|yr[x#,cKqRG'@^"5ttS ғ \DDTt' ŽW6> or)+u8DK'/'.eK2pCW5+))Y{'P#F 2Vߡ3e)c;fejѳpNcu ҄p:I#;N/p!"g,&K& ~D=rOV̭fDD<^xD*ɓKtD )Y ""ztw%{ͻ{Q8aA^Nf)X ""ztUWco\':[|n8HDDUĉ\@M~ijX:L/ΟJdRlެU"Lz,Gݵd; &(eE*8XO KQ7N3  Ňx1t%%"' \.KX:F.cK LQ /Vbnx=EK `+~2&DDU(s9yb;zvfEj &}"DDUCKMPSW5hѦW-ӱkj+Y""bqXDXTFMamk+kU} 0*N8zˊ=~ v /RMPp!"bCvkްI拹'br|q1tբ%KÆMX+!&I>u|YQz\DDT 8yX,+9{P]tL-9[eL<#CZXe+3pQ`Oכ礮0: 5@Z2gIdE:&^<"h]F j ɤ<W.S8}liNV]=aUucOW͢-T.ujj!aWuX;wc=gX RVt,2EHjbz~nֶ*ֶV,!w#cѶ:.1f$`?D""z 8X jj>9sXw39ܸ?߉o`xj""bhXW:}=,Xg=sM\!"".*;@𣁉~oM9wgIuflݻk `;YRX""bW_7k`t &m/Bfi(~whz{UYQ1B]hloks+SЀ$\8v1ŢT[B`/}CD Pv" 36.١aM).$Py%ʬ@j1tQm'&YwoкGʊ/>&dHk&2P6""".+h%hZd7oVCCFU&4͍̌ ] =;7;OS*HVLɔee"7+OWV$Q*P6.+(ź 1tQ} c(4{oc6OUxHѿ(L}߽Gx"""` O1t1tCCC1t1tCCC1t1t1tCC1t1tQf@@B, Q;(t8rvdd9^+(R>󹈈^;/,vJ250F٤z""""A?[ ^;tw+k4@*PU\_t_ K #b]+7o&n IDAThf%{nm7ÌF3}K1|1t \Y`7R> MWAXm<.)9]UUm*1tU,MUf 7z~aXq<;?ወbl۷a:¯F{٩^Tp(o-yX H&gfՉe™cGk{=gw\P2|CՃImwoG>)Jտ><{,VSSInAA?""b:ҳsԧὺ})˱ \O[|ወS.?o֑ g$!;CUoLP$+ƶ㧰jb=qĉS#"".a+^x{p@&)}sH/""bZa_N:2jmOƘPWPGQS%"".a+8

x+?_v2ӯșHtYVN)K2k[Sr|\Iwm LE]FZe%s)L&eY6B+)tG"h QIa׆Lv]cȚHhhaF?oxjq)]e[.Ӽk(q@TD/!C"jҲj[?e d_W*5IɕVQi.yaPr`I/7xi;SZyLƒiҟ8JseQjZZϾLi3IDEӥ7zxk|s_RzwΟ@ʈ`/$SZv-)vmSXHZ@T*bhΦLAk3AWGνѓwiV_~%;S~H*>f [VTK*bitt/6fl=Quǻ"ucn"9_ƣGM$l\ |+{MNBDP_D`U@TQ%UQRT^ye&AT Q!p w9YF^Rƛ<<={ *A *A *A* A*l@+<A PzXG DU UD byB;oW@T (Y837+ A A @Ej+?x+?σ6A*Q%Qէ~DRVm=iB;}S[bqY+w+w-ߛ<O~*e>X8 l=>?mK]r+c eh,XG *ҲF\Z?f/={^V/5+YV/Q/D~hͰ!`+4+ޣIENDB`grpc-1.30.2/doc/images/grpc-pss.png000066400000000000000000000754361370425124100170240ustar00rootroot00000000000000PNG  IHDRgiP zIDATx]l^Yy.`i]Z(H~iZ\Hi@AX}jҒҐ `f2 f0xy0&3c 3xSOiTʭ|GA'9A|Wگ/Zm߾I{3I`0888p]w cuKn8]Kl:"ůʲX>jj뺳INVn)r⳯k=v&wTG?уKjeߘoscy3[~zJ躇>ͭ|'/{ZU8 ]#qIɺNJ+_'ed:)S[<W[Vcm:zI`jp3>9qw~T ׽|{^|bK__ ^ _m벮 ]*Ij$d]'y22t|3:k=vf?Oss/Ŝe 0 0lLD0aa0aaX+ ~GO0aaXؒF/0 0  Uc%baa`VcBl 0 0  0 0 ` 0 0^OJs@ca00 0  ` 0 00 1 0 [V0a.]O2\N<Ϧ?M $^Iش{i 0pK\ַe9MHz#/FZ000lpL[?})H fn0! {5˂I-r?|{92ܷʐ`yǢC-%,EEuXQ@ 6^_8p@7^+60gtp׿{3ū{:׵/_#w޾'JgWH_`Dʵr-؝~u5xrX0>,ky;LY G#/~;WI׼UR~Oz|'^1ywmU=$|s\I[w|V5Vwɻ=mx[@c汿94p[h˖Dڹ\R_" O_09DX{ |c{IG2 أOs4"$>=7,?9yVjZƣl"jC]%k/28!6a7QSat?wM/$bFԉOZJ=lϤWVؑZ93_M9XW `Q{C_#j7XG-RΕߵ[džDW-m?$|j0ciOn~#Mã;n?Czx!ӅDCߟœkvkz}Kk$bh#mͪL}1&BGR+BX4+b"A끿}\]eIe#\ &G b5J0k>{=g5XBw^A|ѭBZ9@cVڬCzU`|_["|ј`MXWQ+DdV^F `8X!. ޚg(l{7[K<Ƅe?:G6 1  0`uQ%449O.{*N=7SZ$XKz~Uť^I sc%.fM vzBqư1wnpppabhl`ͪE{»XSd~?Wo=~ߺn$KΗ^Ujm$e4ip?un,HV˷Ec 1 ˝/*=o֢GU `;VXUE ɢM!e{& c-cf P5Z[^P]m/NUm/cqH4 1  0,hVQOb"d߃X=r WjaEY X#HaAWZՈw'V-:]M*Baz.H%v-y_=n{ael_@aWFkKI]M[94֦z4yeMI*Y+29a05KK8t 1lS u9v$'w-/TϽu]xaA#1l+ےF/0 0  ah 0 00Vaa@caa`0aaP{\aa-k 0 0 C0 0  ` 0 00aa{i 0 0  0 0 ` 0 0QOāZaa-mK` 0 00U1 0 [E0aaaa!Lm{'O+Sm_N _ܖGۿ}(GG+q|᫤?_ }k't7[^(>} l n #`yðƔ  6ٞz{Ol+ `3a,p4  70  (1 a7 f[EH .|{,?};78Mb_/EӞ=CYӟ{p9Ti6E-y< c  P9}6>ģ˿y;ىm#tO~a:'<ْѿZ!ÐW:K^ׯVVG-l*V>񣯧GH!/gg><\z`qwyoRU9& MBҔW@ַ%oz%9aC"a2Oˊ`?wU `ma7\R*\Ӻ[Eyp3 oyDӋ_i&qo󈔧6>v<"iG#RyDҤ\ &eU `ilyyn9nly?oX46c>F^_8p@7^+@ `h˷T"piH,΅81r{ߵ|\S$ߺ9,NkOI-ÞS-N^mM{1y4,|OHX{NrofIK ?OI#_֛GΐdӕmPkwECƣ=O}6غ5/jln6H☉Dx:'rmWAUG_DIH?=&S*VִCĴWPKcbq.Y2Xo~sWtn#*膜йL{",垚ĩsbQ]oICv$ܡEr$L^ b"P|-&b[eFo$T4\oBy/;yo|kDF,_LJ9M4`mlȳF]HJFֆ.U{&4ױ*,=F"ʼn-HL8G `" !Y$عYyDV9t>ݨEl٩eДX>JEk| PV)%]HZ,K#C00JfX{pY*Vq*y{ b/B'1g.SzO^fI,KĻ b̹ݯ.*(6]عeDn`IÔ\R} zM!cI\P2hmT+;ꊬ0U7O6؆ZHի@-WF#ZF7r$YCRɿRyeޣ]=1[Ia1gXW /+["~xCM |CŒFY,4^^50vKU`}/M9;Vrm6HR )wK m6H-d44(Hg^eF /27V#É:|ЮI1#7xYtjA|,D¨˵);Ͱ U7 T'#Q_K&UGeZylꘕPCӯ{]zGz\o0M-ν8Z:QPl*,J:\Id6z`.;^Y=q6HkM텭'w)_%MCKTJ1yz ͯm><"i^Pr~UMlB!%¸h>=EGo޹1X<6!}[-ˢA+"iFz["$ȷc=kuy{Ie$ + djxJ\X[+-y@OYǤGlߺsɧnqm7]W!&yQ ͛ծ%:0ԃ'am6Ha&iHLz<דG$3(RkْF$m}s}EdjvjyWM^yoG$_ B'$j a?K8䙵c + Xt"T̨(mQS*r}P/5W{7*MF-VQKLGqfʹ∨*wcӉw#}llAgR|kICuOKMs7Vt&aQ 9|eVt!JB/XۧUҍse ])8烕 _?4@X{}Vl~zXl0-bM>ګ^<"B}7:4j)~Xz`26✉#em%stx^W+'ef3 `C=AoyA RJ^^`іY  P9}ק_}Go3YAaN$ 782Oņds/׋LJqf"X΁W+\pX`0Kce Fn$sdq +&j]Y{lr<9O-ŎIGSoxC)L{{;ӯO}qÝs$Hzo!HN.bV%B^y =jiA R򈔹5ԺS+[x -\F p%ӭnEcz]}J!׼&=W-W:G>>O/_^SZaX `@oYL "sEGH//?voz#Lݾo*L?z3s}eq3 İ5Cur9K> в>8:F=K( OāZ[t[ky@55z$l }݌yaA0-|5z6J7j$ #0 0=ȑ+/[TBh aLcm h0  Fn3֧1 00^+ k aԏ{o,k\l>`l a8la` `AEðK C: ` CcXyc$ j10@ ?ٗ~< )Vh"`jKce bA6ig0Fc aMkam0 c0xl C顇>~퟾L-;o雟[>ىiDo$%}Msy%K/I}@bQ6ק_yfx{/;2#|>wPio-0ڦ_Jz㒾9 'w#bMXM[aW`pl mƴKO2C@ {#W^巨005 ðZ  Pmkq1ulg[/=?pTzg?L?ȃcr^;lјKֶ>PpDlLC9;?H|=Z;gt+ۥ,^_,=Iwg:Օxիgd^7;Ç>}^rRiO-/bl v`t/+?$_oOG^n"ף~߻>~c_ۏ nz޿`ʻ-;Mle]m%gydY罰֗DbXҡV^V'Cߗ~1t0~SWgpFWyMFpue 7}O-;Sshu oWHw3}ޏ-?L 1eXFIT!*N?{*GGi ]$WV˘NPLaD#ZF6HҺ}ߞ/|8?j{QA /,;?{t/?~bߥOu `GCw.&o^4r^$=tQ7E.>[{v‹:Y(}7B\ˋDޕwUj fIUUUUk1IWbYH)Z.T-%Ĺ1+n%ˆR7ޛњ:Rߏ>9< M~kky\;>W˿r~hqz~uַ%ױ2 ccw(dxato[{ߛ~7xogo"H>*'N˼m7(ZM{_ZQ"iQNݷI ߾m+G+DW)]ݿ*߻לͳ_K{HjmǢ嫖QZJ|_-^ק<Кov\ҧ-#+zwŪ)k-!iRsxrUa~C_9˴r*,`c0J/uy#k}[oO0Jè匦,R30@ ?ٗ~ cOf*Ngߺ|l ClE+T2wK*qqr&u'E7ZGI!q~w=wˢBǮlo8e:GL3q)rV!a{nJůط;ˋi5@1_piD4"IU{*o.x{1$1*H!Ϊ/B帜+ϗ(=jb⬋-Χ/\9\y 'gaU ` }%%.}#q+SD #u%F&TMuEқVIϊVȊ$FTln-_4¸Fn$78DW)-RJo=ODqҽYIUܔK+ԤKz`cTFK2#6Z4C/#WbaYS@4.!΋8bV-Opd9rLm9P {?_=YB\Ҏxhחet _iVlKۖ"X1"ŸR|XMqѴT8ί9?F[g@Į/huDJRp1AvcxgF8Ё bXh-ZTWk {-Cwy zk+_ӛO}PSo$_G9aX{eMgvQF `I:JBMvF9Bse\ M{Xz}Am"T"4W%XJ9V>j6ЪѱXZzaWl#Ի揬h*FEP"T0"-|5z6J7jJq$WVӈ->UVc[u2[T!y6^E{tr;/i8SyĆ+uȢ:}<9i^:ym4* 5rp(ZS.*HʜتW?X;_TzEURLK^ءr]6rpVJc?M#o.H*%.BΪD@#*epppÏ/F q^U#e.uФU[ que`X΅ӕjQJ qV/ϖ8О{/YowMiz,Oz4ph"%Hcv~]GEo) " [5KoGLKo$n0  6h<0j|p Q1]WccXҕ!Uґ [(Q҆y^{s%h^yTK+q!ߵ{uz\3j]i[ŷMhC_%<6sBIíO{ROI￘69r͋F"I0ݛE VGYf[:hrqï5,eA*+T4#}+<\^ ?~!m `^!8j/I ghkh?-ksϮYx =ߋehP/gpBo6H:8lcIPO+ǺlMl Yҗ;Y4g-׽"C3VII+l8m<(׏ڨ!+D' O^m<4 -8r]rzYHMH̜K\"+7$K-r^W^˷˰Qjiz3sKN_=׿>\EتhO3+iF8ne:?f KӚ<\{'']b޽tcqC 68d0%|Lq%Y#U+JP;Iиs"FIeWEWI\I;*5=4xJ>T4`lêģOzlu4JVh#J Gmݠk^xի7!3#˗6 g_p=zQ$<lco\IAzqto*M'ҟ-_,9!2jL=udذ3e)y3*F]1d%,eFl$ ]LM٪g;үibjtN0E uL6~lac ×Rb`MV"avس6o a[$/Ho,}`=)A°f˿Ryn!*}6Ws͸HFmas!Mf_ 6c_Jt Mb öf%~ zeÒF/F `/^4 ۸K00Ԉ'>r ưM0 f[~g`0 0  ca!aaaa5do컇>~c_ۏ 0 0 kYc`0aaaa`@ca!y_d0 0 lAO\Q*kZ:5ǭ|4d]Wi^巂׽[2[:u_|䓬b rz׵ru;`~jC tm³.tX5~YVNF+d]7||Ïnζud]'uo$Z:'YI~iֻm^3^+@X*`Gdnp>Otupf]I8nd~uVn)^EP_+_[N>o$"񹯕|=|z׵ru{< Iv.YGuQzDoz#ϒv 0d[۶w[#uo 0۽C3.gVUtʝwIWw 4lXP=1wOCx fВ 7wd-S6֓Kveɶ-%;Wҁd3}7"Ɍs2R'(sx,lc&,VVM=, HG"g]{шɲ"ui|#ޱpp77o6&'{:6~? 9!zBjs߷tގ٨ĉ=@c.:][Uw=NeSV\!͸o?Z]7|H,5-;kql ht1^έ%Fobl/t P)cFLemz{{IC aNsjɿ=D4 8g;6iy1ɐ)W͸oA˻49%9;f8τ|R[63dy 8dy^:r%)Sg'ku3;t2>ۼos5nLSvXġ}nO ]Iw-̡H̄ 1^I\w]7o;~9gbsf{p9{.$'|^g}}>H^z:w⻼4zڽ[-\ti-NzqhRmi^y 6=OzyZDx{Q/ u,u!ͪn?i5e$<ӥ߈6O wq˿̘i9sڝ–W{tk)l}p*GE6lPg~ﭡYi䈉3^oƦ* DH|#Yow%YhJ3`ஹ :mMptq+Y=4O*s眠=*E/v vT$;&NlIq!ͻ0Qv_uq03j ۂs\8=GsuwwE1<Νu8•:g%-#HoW]<-kN{Ahνi{S \.:Q唻q}^ìg\|ʮ<YAB<+_4Ey9ӽ wO[VIeJ‹NJܘrUZ؞nwmy{_U'EwU1' Gܵ; DԌs;Rd1!w:Wi]ho~*{NU=ncD! nItWp>wK:OǩdP^]pI6ܣ{~}%JG}qX5x hNT>QZ-+E ƼgDaH}<<-'6Ny.dB6 ;/uOD@rǧwK*bqYUmx[HBK_̋Áoꟶ:;=qipH9y"PC\e4ג˧6@2 Y Ϭq {b:gV7y@#] (r^ϡ)  S{?9xz̻??d9$}3j|L_< -kǁ5y(dI3S鋥v8Y;-|9׾8S^鬸js@Iwgs[hw/"oxUWg<\zdNLz gyiY7 y %-glmɒد: ?5?Ylzڌ{ ~5U@Ϩozh~2?u yn'眘=G\09Op#;y"j ,C: I.3!AlsIΘx)" =wy8myI}__Ĥo0Lq&va>۽xoOVm.::׋62h sN=bqF])LyV)ws A5Ё>gzL_5b [: =xowyղ)NeE-{4b uig2ĕ'ٓSZpihU꙾ oNI5Ą~}o,eNo@ x0YVaٓՎd-L>a)#uihFd|" G=ě}yqS*G"f{XKV/•%;ղ}rp$-Fy*7 mċ潶HEjw:Qg1Չ+nKV梇Vi>pg$g'd^Ib{t2QOllsdeLl ԉde1uBd8@p"9XR['yJKzgJ{9G9Fy}NLVk7kTu$Oè+Gsw\}7+jcq{3{wI*)_"-hcb{seʫ 8Jo[CV1l@>kTw2ΰͳT}%_7znmKUO%iawD!64aYi7o5o`^`ĻMM?Au {vTzYt*,;W}}!zU&}'0xݿ!wϑ xxiD(-+,nTylZhrfr e*TzҒ|8}`px=Bl `ŕ^0x `Ž{ P=d4ܪX*3K6d@]t[9r7Ϛ*&}yWA<9~iɎ/ٶ9w~Qۅ'u;wGZ1q tϽp%o-ާw]_vJklwy}ѣˉ@EsK.-mOV^v<үEø{~,]3n9IIqrE7pD3{~{$i\8/ճ.̹ '#X2n{٥@#i~+#37s ^S5D~D_ x{;KjȫI,=nsIx8~7=^w,5[o}O'lDFWFz E3l2؄cz3Yb3DO ` s>{W EWhF|<Wqs4;x˅3zp9>s֜ב# g;xw%;ð2*ۼwUWyg^wisy4'cqlľ1MMviiNx⺋sswλIw[ƹ~3q0o@>h YH 1Io=A2}JAΙxU4p/oS3Cɷ=s'\|h/io q{=ĉ#]My6g'&̱1f >{*渖3&|Y8/sqrl=o)#N:zO p̦.Nn]uvU$;;\ww 3I*x=λ1x_) qW+]\ϻwrVΛ|t 76GbS8hF;ݮ qwsjzJU9dDÖ*z@v,",Zp\ēc$"z4iqT5-6s<1`9K7~|y{Իv8ఇ׸qFmR'O~mKhWS'|/&k{5o*(;MU(v=6e̘B7ؔi/:AD@#}!Uv8TBkOe&BϛA;Tu1)}qir.>c^Y幝}eWv_Q|û^iS]w";и|-1qޥ@cjV[̶@~8NsxwFڜo{%[vX_w^ 4F :M$& IuxJGW =瞿ǫ8k^|9JϹthKR$4w*pN~kݷn+.ROt5I]&>B"p &"qojwg $Y-Bojs>casgeLgBN{߭M#ձm˦S(Oۼ<3e[.R’Dr=Uuxqx@C#D͙H}=Slŭ${kH%kˡ&rĊΝU7A)SfT=GP>d7n8YJJU:s PWRAg9R/di/ sb9o]1鬌Wy<yf7 iCтB'}ry\Z 7sk2Ig3Þ'zwNOPG?^MHۑF]=TBg5$G\$ o"+|'+ry1o&rDMVX 3nHF5 d]̣2HkWwG'+ Li㫿eωEwݱHY2tDqd/z:;Bh:U¼.:6p8F '>Cbކu;OW:_ޫ1Ow߬sz2(';NAIxt=XÁ4'5 ќ\^i,ܑL9yGӅ#"Hˎckcj+D9k W HWVkO?E**LVϫ- { /˧L¶@i[L a"ҨsXG$miCawv$6ĄyWS)OKVu-ȺHpU =GnUʶ'=5T:SKt;➳=e:g9=ʶLrhKV\L s{'+=G^8 ;+{3,*deٴi9v#ݵW F,goOVQvaiP'Qҳ>[%F2/Θlw6OyۓgDͯǓys;txi2BׯljM1iё؊{026?PFĝ ߘ>ݧ57N2ܟʳ C%ݦQB;\r0[jrϐI6|c<=F .#m?S-y"uM\/{JO)+۽9S!U,.@2 '+k/FFȖ:6i|IE?d+{+_guv%]+"q{P&qv,1\.e׵dǜ;^ ~ori+y{lY?B2%Kvǫ V.L޹&y%dc}e]CoLeVʢaʉoHDM,١&s҂NUo,[ 29N|cM3k4jN̺n87/~Zl*S.r'wϒs-Ml!λ?궻qY7x*Zf *fd,nuבNw-[@Sm6P \+sq7缞&ZlF~?~%` GsS7AݪPyXn4S"[K}Y]KvnWE7p9wYwYrwqɶ%bteދ7)=vŝ'_X1sw}D{{xvTp?k#󳻼F =۽ew1@h!S͹x{wVa}ڥ+~Cmf]I\h+(F*֙${i=;7dBa;ֲ{ք㌗&N%SNXʈ+.=yeh+lKav΄6&];ZVϚ|WMXob)?.Gꃝgv0hX]UFwNq%zR;hy/3f"e6tt]%{Nq4_PQ5ɜޜ4>N0{=5oLY=\d}6W\2qHyFԔZuy#Ev>O)[6+Q6틔M¤=S:hX =4e4u8];v4-zIhPK80yG h\-DZO{;W\CiJ='͝=➙֘ gByΘ+P]F,!Ϲx9ϕ{Λ1s}3C*yw t]pq~ܝ7g*p?Ӻ{R:`qaŏ-Lyl+(wd+^_oih[ IMv#&=/x;ꉂcr ߅-QOPfz w݋c??4}0/mւ)#iiKK=n2J"y%T'R99,(G"uWp$--xsqHm9q3PN, hsqr3k\bۨݕ,vGs^6\^gݳuqh%ep(go3}F S2ӽw^'Dr~@lQ|.YISG@>oW)E &__[a;g+r*j\Vx7 9ﱞ z#vcS9++}N[s;"a3Bosɋ<eZ}ᙷEOλ|SfH~sB:ωVG74dE/ϳ7s81B `ߗD~Jlz.rװӕ vyCq?{$09cIxTP@ /zy37f\5^JV|d=RʉIxEa/MzItʣolʉ"2%񹐣ĕ3S^Stsɫ:6~m9qoƵ=X$}.>PQL$CyϽHjf* S=gw*`WX#&+OXj u++~.{NV\JVz`u.l|"Ϊ0Y-t&Y"MU8R>[c̴0HH05=y'w{\ IxZ=9qٱ OE.F4:<7wܥya9yB;ȝƧa]7M o|.̻Z@ϸhqhʉgLöv<kcHoZ8n\sir_Ex: G{¼ik;c?뜓coȫsntG(;i8kN{P]+GEʉ2x4n_|ldh4P%X]wgӈ+O\ Y0-i9؂]I!1Y vxϏ4uo~W8@T +=@ @<@<@ *Ċ+X@ ++V ǼweI&i?9=hHI2_2.+H3_ vP[9x"hMӮ 7YHiW'҈g2kD5*MϾ7J)po5v<3CYu;Y1 36WҨ.Fᒋ_Ὁ}}a!кhثuq/[y' ]R޷2a Gצ{LsYD#L{g|X#ڥ") EB򗠞xHݢwS"Q 5p`;"kV!'݊-@ ]ah23' ,JŴwC˔y=R'o=a-sl&=O`0,워f>t[F\ǘov8^l$*3n[N?8m'I=e8` O,+ZOHe,nnU5gjW)˵=9xůR`@Jф+,r>`Xֈv^сw]J4Jթ{aaSC3ڠl>H9T *NdySAl` m.#m?";7jQ:M3h{25  c`_ƋZ} ,rDjO0>%|#'KrzJֿw#Z;7A~0k-Ѷ9 Nvםȉyw- vq{#[%S Zs~sʺ+Tnq]x&-1&:N̅u{S'u[W ?'Nмc cN+{ץѫg o]ㅚRkP5Ft#} ?a^sQ> .wE,8h #)deiò, xtOSnun kOnMi`m|L3gI"GW]6up0e)<]й|,OF+$O|ԺYlhK+>nȼ =>N>1d?uW6́Ymv4Pt$ܮ9Yve=О[ofn25|uKRΛC`|*J>+{"cSSOtdm.}3:6.u㭩C;͘ߵGG7>xd}gw֤zD,(7xHٶ ,'`$La/~&Z#tn=s:7R{Bm9YƜ{9>ŻmAO͘z0L}Ssh(Ϲ`i`{|߈yoDxڞ5ArS=Ѵ %7x*Jѭ3I)[7dM{Rn* la*h3j{'NnAlO ~+ m b=un.` # 98߸cQ"gvrPȁvQa5H, s瑳e] zJ$˻ܞYoG˄V9ν15`YLYu݊عF#BYƺ.y/.nф==v]^ʰ 'ս0`uzT?_`^zZr/ U it9ɗϑm2|ëؙ=t- M\cap˜ķYW|`1Vɮ~vBɣ`KmyNUPݖe0XEpZ|x' wgꦇ3T(]q/˻|32> :ϣH<]2Q-b exʻjqWS;.պ`B^WG*.=q.NdN75giew;]IWj|,\omuL(+jD-F:neW"M?C\S#wr?[Pڻr1/z,\}- ֐[uIЀ?Q#kb[GY?52˺]{ʺ)PV67X7\h#WN &4Hƣoz/;EޚyDQD>\mP%n\`1J}9H轁U]tŏб0T=6mHn+``䪏?.|WGuIQvdU| abP@)r"y,ʺnpES+UOH[c) _gMo EHq*{=@~'0`<݈o_wϯW72D39xN{/?/e,}%uC{c'V>8NaILUB!KfgQ*ڐt=׶ ?$ȯ=6_߱`|-w%@:y^¯%O;'$*|L>Օ[g{'l}\rܗw4f#ކ7[`/_Ax>ޮ [.=մ} ծz{yo._ tw8?^I.S1{L{cꮼ$?^3k|7{_ 4q^烣v^#iw2pӽ7 fy+`ێ|`$߰`|S XN#8y B|e,_,]~H|VX;V;o!_%Z]KjdeZ f"|7%tgfy:B>}_| 0؇K"zk٫>h !Qj+<{^=nUa2]2`vty rﱭϣJsc {og) XfIENDB`grpc-1.30.2/doc/images/grpc-server-cq-fds.png000066400000000000000000001221601370425124100206630ustar00rootroot00000000000000PNG  IHDRsSIDATxld]w&-Vp`-.$&u4nd8]?$q88I [-e ~׍Lp_R,`[,ih)E-uE-dUJ[R~39w<ǻHWs9ιsϹaUm- 4"V} J񴲔+˖lTe4 >ED(K25o,e}0-nDmV]lCn+K_ϴMw=%^g]a6w,Wg2 j{ Jc\< ä= CK后Yf_V~1SNw>RF\b|L&_=Zn<.WAciψg#`gmu87MmnEqK-cLބw#^O(+˾c$brki}N{m,+m(Izm"+*{S酄mWv;A߷+韛5o\WgT۔%y⻮\q\&l=eSilJcb;Q$n/͚sZXN+Fu;I'MOey<1xQ|Pc pʀĦ,ؑj[/'w&)NV+9}_w3;;A*2a"~m*ӲVb8|DzfY߷3+6Q|a~Jߋx}&q6Iܼi]GN{W;?݈.$m!^ߗSm 9sn=EҴ a]PָDsr]Lu(}SH7!YgH^ِQV=Sɧc*8]O6kfIf:iuN}rj{⻗S'1Ituҩv )y&osr5I\޲RGR Y6!YB'YW6]rN.V+:Qθyl3/0:"J9副<ӷ:8vRG#{{h==ڗ!l$ݶP;؋s<=Ϥo ⻙ o^ΫWv_ȟ|- P;g7;fⳚ!&Zڤ8U8>;i\@|d}7R~<"Ij/Os2#nFew.l=!_!}n^ǰķUeY8mh˸;T,^I% ,H82$y^"d±56RĜh^I/\@|HbeNڞ@?ˑˋo48LbŷKQ{ &> ՞K_ډ.#J#WMUgOH65coBmor11C:vP>=I8<7SBBI4<d"Ծ3<3~3yj^48m878gCvHwWF :V>Il^w3_)YqRU6J;ۋ$ʹYtGY>qC`R_4%TGHϸyЙK~_ƇG@lX / /@'6/>;nn{~bOs΀?뷽~G!5 Tu^}ğ:qc &K=&E|_@|_E|_E|_E|_@|_E|_E|_E|_E|@|_E|_E|_E|_E|_@|_E|_E|_E|_@|_E|_E|_E|_E|_@|_@|__E|_E|_@|_E|_E|_E|_E|9_E|@|_E|_E|_E|_E|_@|_E|__E|@|_E|_E|_E|_E|_@|_E|__E|@|_E|_E|_E|_E|_@|_E|__E|@|_E|_E|_E|_E|_@|_E|__E|@|_E|_E|_E|_E|_@|_E|E|_@|_E|_@|_E|_E|_!¯~7+._xmOh)\m_GG^w꫾4.__YG6Y>ݦ~ilw.߿w}`uoGL6GۿmzW_yWy_!&a|gt*Qp_Sq3!u/Viމ 7o<+?S-~q;A`128Y,-vkkhمsndX][;7FLKמncmn:g_D|[|W"܄??>]om7oTެ7m齷Ly1&9n?D6va,󕥘/h-o#Z_ k=9av~ 6Q_ ֓k?< |vo6֋u_׆Z _o1y 8[/߃n|eIgEoZw3tH6 ׆-ww| L3Ὧk6Թ637.&߼F~aYul7G_$qm pB|nl %@|ޓ=MƓ>M͛.Ck3 =9;kgٝ+yCmr8nڹw!p9ΎdnZg+U o[,V6ӳ} yϪھva'6ӧyW'^s>ʮ ${}TȘbj\5n=n7>ɭNMvf\wb&b[b݁3ﶻ*${݇yy0w5#f0ejٰmey6]ݯ\ϓK7\Yz]yJT=C:#>EZ;={Q|7i*e2}՞:#&{-&bbř}M~:#΋MfY5{s7ˆ3[]YWWY]6b7+?=7_v__#Q!YYͫJQR'[kKQTߞ&Ƨpۮ M|m^[s*_kd$._o{7jO>}WCE5Aml bk8١ߛ'Q~kn{yXs+'}/'Q[хxuK_WZfXe٬,Jۡ]*zxף]Z# „-H"T|\z݊LR7YWY»tƖ>8ؾ]ڦz;"PE`uiIkT6\뽜-jrﴶ{|ZLg\zoA=21q'm1aQy-Ög T{W]; .FڸiN{qk λsbS㸞Q6^vzzL^e7W>x}?{%N מNۄ;%};dD\m8Q~2cVܣBPI]XS9ǾM: Joڝ*k7S~FV|͛qmwXߑkox/n:9fgo|>WzM쁷٠߻'ۆLۈ k= K_iA|"^$& FQu%::{HD.(=Nr>@ =U5#~$`1! B_3嶙P[U9{2{|#Qj~#Xx_jl:a;Mx3fTߖs,1FĎIcI"u?r7C&7s΃zM:{\>Ym|W3o.w3Mo;.=Gq&^ߋO5#G,߳=@|"M_qnw]ukis]2b7djP|7k2'~{ydjdRp'$T{KcI9bR9&Xo3oZu|"! @z.N u7o3͚<-o"z 16T{nΣ:eMPn!ԞQE|/s36јMluE|obM%ځO}$﵈]mZu{U58sA|'%Eu"g9,hķ%>':$ KjgpeH /$m85E"wFNFICmovȠzW{]<.4zxٳc9G\-n1]D|XA_R|0xKM%ȂKǟ3Mbӛ_noV#D|.m]C'/!CNH%=^L@&TuGBuf?O|u>/(B>s9;G۾t'!TcM Q-/#G;8ڒ趪'meաb>'!T'QUZWTܞh5-A!>k<ľQ{AO3YgMZ}vY3oķŵ:mWer{xa]em뗞Y=ko,,.Z(E|JxuBk@ =NFv.]R|lA n88BY ՞֌W2%v\(H'T'eQ1 Y}rn |6Tgwuԭ= IqV-?;%O88n'7 L'v|3ZoYQz(i6}|GmٜTߖF3XJ;9BFV,kiM?]D|t߻/Vj>a~BBWb}?tCRyz:葓 *O)Nnp 7oOC K|y:.Y|[wٚcO}榉o|] /C~o9"/ 5{gat""/~] ٯIA|_E|gIiZOc|L[}uЙognvL={U(\sU"/){;myh~7In>ݶ Ff@7 o%,7X%ա_lmIX&:-H峿ɶYK!w{~y&ivut=_;P;$E|_o{[Ozlo1ܬgH $F۷L^lfס7{՛}>u`u_ӈ7H%u6i=utsb?G9$f|Q|Q3 vۢKE c "/'5u"/t{};n{N4!i&ûWwv:x֏wzO|߫֍%r4BF:('L-T{<|;2HcZ*Ԗb`7Ծ۴ۉ_͏kvIRVϖKoP]T!{׵T|mA5fE|_[tBc~^*]wZvWidDU>X.L2mHH{$lCG9 !;߰DcS nC''ڋ:*IkvZ7ұS9m%^VC`S!n@|_)EwCm)Y_z\:ۦ߾P̓S+N|qw!4xE|_ķ*)4kqҳa5TXD!KdDbljDl_/ə٩#$= ԈЕc\r1)H.(Pv\121ҪDlI+)mű%BtSeQy=n?~&;hrDE|_kߗ%vGNbFNVJT'T|'$-M'Z՞w;II\(NÌ\D|WtA},nQ:t&ݲل%m9֥ն牯pvt#CIҺ]t BCMΌcxJunUZ?<:/^/" ߱P6lv'MWߴtg]%vCTF.(ϓ|T=r X80D-J{mVL%v&CZk}D.N Ҡfɷ)N5#t̍obK1ߠ WDY@|_E|?nKl{$0M|>քdPi=۹C:*3qr2{sǐq|NzIِ' i|7$T-JM'K^2^P,&P;; }ˈ~ zֱM9QS\Cuhy(K7)bq4kr ՠ.YE|_=gY蝒- TE'8+,A ɋLY_ﳉ,J|ꈯӪycxϗlVK/}vIrԥ|UkA?bӐ-9i(8Sֶ-mi=Bu啌ݎ9^^^6tOB7#'{Gh[}*ÖbJB~9R"/ /&>5%]FLl/"/`o ͛i}ݧg4;ɹMX)@|_E|& 7Dh7"/ /"/"/"/ "/" / /"/ "/ /"/"/"/ / "/ /"/"/{SY^Y -.ޚ,=7;t ט_8 /"HJeg7eg~eTֿ͌,{v2Yӷ{sAFLt*ˑcm_N":}:-o+˚QsMA-Ai6+ݼ:h6pݔuNXl7}rrX}@>η&&PM6 /"7vIikڅl+a7)8$,6(Ō ӽD|/zIeYwkح,ۆs JgE2ፎ;a0bS&2:cE1hVϷІlSWnF|HMuo "/JL^3.t{$뺐 xntDͭKwY⻤cIM}ITV92mD|-F3;W7}mz@ۍ8_J;[PvuLmo7Lj5f0~qY 1f*zZqʼe>ԎH7~.R1{lqq9gRlc[f1ˬm2#6^)cY,#ޞsC\Pu-gѬmgŕ}Ե)jG,$mlA~MeA|E|_EpمJݬ^;h~ b1{۠NB ' Ew o.ڇ2H"<:sķMry-*{;tYT:lT|u<êgYHivhʼK͔;N3m@"ݛƢ;זk+׭xFky.-,gƀ+5C>8;pmr)/ /"wPMe!]h>ENNU#g F@`blѥ7b5=P@2U#{^_k]AˢnX#m>Vw~Y)V<|)A7(V?"x+v'Ѯ=FUrӏ_@|_;LىZ+E=$hhl#ڢדz/qw!_LĤ% uxST8l #!o31o^7n2^n=mP};O:nPM^U{YGT]ynl,%[ne2o+FɒFw%ntmgG!)#6Ӣn̕!nW#{3"/ w칠vHl!оj#0Ƌ/. .dۑ!KQF]c#fD%YY~١trsU٭}}O+Cv;1ʗ w<=*Ww?2ԓgI&7Bi!s'ۧ_2?|PF7F FL3ŷU7k|}J*Sg'̛YK|ګg⻓ܘZF|E|_@|.cCu9힆(Bu,T]B|w>c)cy%4\%]? W::1^qRy\qXꈯ]C^N#o89Wb9,!Wk뵩EZy\F|7OQ:\O|gTwC*P}Fw3TqɖLUM٤*9#*[6Tۗ抡yk/s::Nk6dOխv[:G|]/(vL[J+O|Mg\>o9s%#ſnTv3l{ɶ1+lS_E|;JIB/6p_}0eLڅBxE~_qKCr׋o$dIj:l .%#92bG;i:nBC3Y$7+UEr8%wÞ_E|ܞ<;Y!L^Yt@|_E|K'!@|_E|_E|_Md36 /"ث=  7 {80)Bk+p0υF7V֫orĶZ ٯ[qK94kنE|_@|{&畩 ˸2A@oW8Pɾ[säu"/{צXf}}JQvûw],[6~[w&iea}] ^RϔZNj"z]p61nSi'eխqFTFyA.ڙ-/M46N'3Ծ9e YʷuL 9ex6FķՇo\N^s= ;][Q+ "/T v] Izû!N2vJcEAu!{&Iҵ$V;oyLer*󄄫EuI~v'Z_p%Rhq)LGʳC',*CѕmPey*˔k3EO̯U2=4G ?U9 peCo ŨHcEt cI I[#V'ߔ61U;jT|ٲ}wD{/i+ *WV[_"/Ns\uq}jܮ ]ՑX4a'Koǭr`1a!d?%QBCma. ny-/I4"N\\z&dL: *A͊.eo|^8}U^|ut"=9#ЎoZr{}HdYu1/]nLRo爯ķ;cfFKwmרJ`ytu1ěUAЫ*i9m_E|)_tdl?N%QK,1-eNL+<֒O7(& oKD=~o+I7d^@Ԁ'BK!iQ|sʔWV-X{ZncIsD5vŷЀ.).qEķg]^i;)ǜ(J% q#m_E|)}]gHMeowIbk=[dݮ'3ˍuCd_bEs8 5&Uw=ķ=!ZIG. i~=j o<ΥPVntQM[jkϖ7~"ݷَkag;Fŷ5i3:7ڋt9=jϱ\ u@|_E|ons.byFB3HV&ƋPmT|[tSF-JTz;$971vk9-׳r]E|(ķ5T'+M<;jD|i+TmT|K:P{zmg_(Q=oc͓΅cwS,lq¯H$[%|GbxQ}b:ڵ]YYzK?/- }UgxBTromɨ N{Χ\v2n ^f'??/O}=zhF|w|fT a^Tn:=O%p߲~8fdžV>36T.,Ot/(:x>T*i:'( P}z7TH?}ƵO݀8V,k۸1m7{E;{R;#i4!3$&9B"#vd)1ӗЩ$YlKWM(Gsҍ g|nL.fOb8XeıER  c"}Kʚ>ٸa'__E||lf[R5&`=4@|. /"/6Mct"/vdN.iE|_6o|>ڔ @|f_󨲼|anาwC[$o»^ m;O3zz[кr+IaC_}QY$O҂dvۯmL%S%'ؒ_R:^['Po]ڴ(|/?)Otp??g2d,3⋧?K?s.=>zdFa-$j}k~E<세,'  [mgUm_m+9߃{'o֓,cN0vJP7>>#QpL= zuZ:5'6yTբڵmzrl}s}W [˿+iӓ*/_ _w7_t#~gpS8nC]_{{;ߧh.IB$qb* ~lrJd})gxkJNeΈKSۯ߆$mY|휰;Wl(~߿woZ~i6ڔ}`.P&jf_;/Ξ^l#{|A&nDP(M޳YlHgUGR|^?7yZܻ-Yk=kbM;m@3.跛|nٰmߥ_[8}΍M6dOf2t7AT{Vx'8ex;%ßOνO'B|&oAaog拯> Q|ml%këM?LPm 몾{E{f?uw[ξҟTLM_ҡ}@qu+s3!{׿VKncƞ9[nS#?:>T}em {s_$Dd4xWt7 1nIN2g'g{ϊҰ៯ϔ׆Bo=ʅMdϬZ]lLMמ9MBd7 7{NzFJ {z^m)O;WlfەotM5So wG|'Lt_s|5KzV%$c=3<]l.{!uC5%-[|mfٵֻy\fyNB'5/?[ko(*mVVknhMaOOf6amIMj}v/c~w|FDBweY,ەe$⻭΃D n=p!q亮,;ieyk6"E|5yh{m,*K[o05] "_ ^{;}B9!5ŖwVe׳[WD nP/3"=X[3YExG$ω6{-eT͐OBVψ*>n/no-VdfHEz;KQG= ' 6] ahKz/yIEz_h[GEzG5yh@Ƿ@4WĖ_{L$Rzwhzy%Z*;/u5P=+!pks{D<Vn/b"o[ "wV= Dn5]k&D> whmI wfH+|JEx7$#Dn56YhߗDdWD$G&B'[Ǐ;G4`%V +;"&!tUFD>lH-o*;_nݡ"/Z#f|BIB4NGeio`Bei㱰j`;dЮ:It)6 Ƨiv]`ۛԣyMa wh{>!W$s_eٮ,-\Br~sٰ%,oš!-Auq(6:i2/ݠo_CyûIqg`3: D~²wh4W|Im=_eķv=^;^Y/o^GQ p ػ|%q黎R(4A|$8e6GZrx7Nx׋6) }J;ze c_>ʣmg)O웕YS-ڶOEeU7Mo[~n[K{Kv}*3IĬ AzhN9z&AWQdK:M婻ŷϕ~r٦wN,Iǿcu\[S{rڮ|NVtx<$6B5 rT@b^ܮvE[ۛ#v,]{O${յx>XyzvV?*iau5̵\%&Qq'b[*kImD% Xх}ʒ%iz$XPб<Ӓ;lib>8ΫL ŬUvٓ8(Nou}W,{UoP)=P\]uH'nsEa;QPgo NJ}8A=+jk3sD7^uYPۻ_r۽rϥxc)Db|+Żd3D_mEH)Bu(Lywhk=6]i|Z|x0(Ӻ^$E>8i.'3o{Lde"=hq.-$F:^_JZbzPUۼCu0c+d?률I {I|}tR=ݡ:1W{3.1_W;+:yDCwn%]ܦI^\Tߩ@rSO|wt|É ؔoo|g&괩uw|mLT~ǺW#s_Kv 26YX,{s}C4>H$[hP>TZ~9VviZuZs{g|{ZxI]ɐG+O*CBF${l"u d=ToV\~ˋxCߣc.͹un^T|Bu[WT|s/n3`ʿC{;ߖ i{en$,P&z=Tw&"/'%F|;By(v}Gۮ&wj'Ϲِ~vyX_@|{\s*Kw:R (6#gk?qݠ σs-Lq":h;iIya[EzOlD~Q'yh-^%h>Q|C΍>%=. {TNQ:h.psęl䈯bN>WJyi}oH}l_N&J'P -)ۼm؋5*?bT zp;;]-vqyXb{v*z!fCJoF4(Cm3-{ʫne ]M(=^QSoqU ̝.D'o@RQ?Ŏ$ݖ{ʝ?1PۋnyvxJ:gbl}lÐ?U89bWR7[gTwO;@4>᝖. D(T|{%q39; ]~.pW!=E:vѧDzċnB"bء8 )&O%yOi<~K1tvߚϥeߟ(-ߞV@}NiO4קi'MRیvZb8R}GYh@|tCdLcֶ: /(^8Tד<|bM}dr^l[T*۾ٕNBWo5SL+v+Nwu%wkG,:gbGee2政pUm˾N{OwѣGD^;C4G1DHtC]oKE5T'~1(^ZCPg/O.=w/:]fd fn'@mw.K|,; If-S %= ꨀc+*:1'-J$T{!sO/% w?RI" pRP'I?iY;b:Hk)IٳvNe{m!!Ѹ⻮_ީ DV$gvD?q^DHb/嚻 /ay[H]NnWe"}$a1dQϛH-Tan8a(?k=aЌiPi՞<=y Nډa|.#K.>ve?G|}xȟ)ޔ1:$srE-:uv5(+:BzLЮz@|Sm=;J4.g`IL~۟#(Ƣ._;^ .gCw6ߒ.ǒ ΄dAK7sfWb=KqHi|~M58~ÊiExtMeNi:;Չ.7c>QȑM<-%}PTa-#IQ{dg|$S ٥+ﰄtTqsŊ${4T'oe>T^wtj flg߂',ⰝtMP;`"ԟy.YtܟqmǏg%D9ae5$=z!yjOj(:P*$1>SfYBu1V0-ئġr}:DzBj?촻 QE'1tFd"'VZR}m`;Iv߇{;PRvx3(X>֊5|n'"w_/ ӎ_#O75=[?z1{^}}:\:VvvguJd+z`sէ.i5?گtfĿ59B=nWƴ.&.1bĈ@ &A ,w2@ < @M y E M8S~wj{{]IWWuդQ .5#s]o'm[|t*j}dCZBK]qSoi _2j+ޚ+KCSڮri<=."!}ű|Lnuv)S݀%ÅW |RΏtt=Z2,:_i WQyԢ dԙft4737U]xpgV|;wZ%h*klh6"{|Ah[*Et_qk˺ 'tlZ';ڮ|5\?%gab׺r-ZPM:Cp_2ks3q&k 0pՀ{bRӲirS}0<³a$"]t4׌P]zKoAAUx0nõϿxl.U߆ko=^([ q^QQq F7=N$r!O|<3fb?Ky+GzZiky|ï☦2:zuGד> f\n_5J"&n[uSVgF5b@ K%ʝ%9;NqsE#ڻ!·;{&GUHtS]3g% .Jxg.fY̐]\2Pǣd?ksхvSSfKPg]#e}c_rJWciڟ%K}σyT߅4SqNۮZwo#b2ұ]Fe5r3gH'< tO ݐMF|2kzؔF|]{y#L-齑g~"_9<ɔgh)׷<z݌Lj׍ƌuoW鏎'G|]]&p?ӽE]bDV9~ ]c+9;䒞Wv)+ѵH_pg$y~7J sMdpTO+8C|.nFL1撖B-ִ߱K%ݓ":)=.%s`oD.Z?%]_sp|?MŽ4DC3߃H&j%]"=ۚh!o;[z%9_4.Ϗ53AQ5s[rI h'^;j{<@|?Zƕ߁x璮S&[f܇,nȫ^{m啕.XoA OdL_ll2ie%#IS #:Fr7O9k~²K Z0Ikh#xY1.|Jڃ.޼P(Ͳ}K1 7(=;2cٔ 璎>XYR\:i m,0sx_oͬ[ EG{"+o=dkl;# טc+)Fld6C-?0׺爯ODtL*W5G$'9i]ҦKJ&S uo.1Јhj9.y`l%Z#xދa }V)߯Ϗبŷ} anqiDU>XScWtS?UzfSr< Oʂko̜8ޯt\r1}8dH)!j]%_-ӣ3i hnoKz$wB{@4 ~Tg;E4.?VD]|%DҒ5. Ԁ:_vn>=FO4&-=QW9K|ƗߦZ|Dw/+G"H8""_ +=m=ΣDk l]U*ZwJ[ kswI-kD noKz~BD?ې. ^|>C4-ݗN Z»Ɨ3ZKuھN1}8q||iGW'} c*ߞ=֋(^~QTkO9OwZԎ y췖;5H;H_@|?KTwsV"۹>MetE4>'~Iߒ3[rZsCf_?ˉ_ #妾 S}wֲZρKy.jdf$ﻢ}&paO43tZʝưb7[٧M#흳A7T츤knbyG&~Eb>/MfM~]Vrq:oDxg :oWJӧs=O p̙:'~j9sML~h=]Dw]:Mq[X5/S#iIZ|>IiC7N5n=(ɾz@7FNg\JP G IxHp%Yew`)9qTCWYfAj?KA錚t_Mx*cm .y>ﮌMh Lnu>?)~}Wbm*Z*Yi\v-Emn֜ }k$DTMSǎM1Q((.FLC Jk.(=#Ð7l4Mݶ 0P!IoPq8RZ%_5Y]V<,}S͏5To.Arsݜ߹ֳHjFvjfӍOX|owU#'ϒvLW$f[/ 9;|9$Sǔ'+m?(@͜CVڔӊfG4ׅ15UȕwQ tvM86<ٿh<ϚdքIcW}nsB| M{Fa Bi}=E|dL2"$nΤwyB:'):t;)ou璭 GJ$G̎m] 1=ĸ~_/wQd݈oK)݂}K]s7@u& mkӫ e "|-䈯fS3K}9ZВ{/߾}cn-_ȕ-c#D$*Ͼ.hy&sd"~w2EƵR߈Kgl?doTRSYqvĥ|8Y3ӞT,v#;w\2+L5h3OrT)S:!pdIiټcyuQ^6͔}ꪗu=iPzS>G2~2LOOշN4>{Nf'/j7Fh{\cyxwDK7 OH~ s_x65 |pn\{H4'[%tnNI4rƼץ:K9碠z<5؏ZMڗA=u/_)uw>"hDex`[ 77M?"h>s.͔)xS&t˺Nu?LҺ>w)gky[|:~E[yMK~'o)a:_xex'Oyh|:=Voh@'B˟I({Wˡw¬-mNݯ.!mݮrZݯJB~Q^X~M Py^UmyPSZ|z|켱3ʣ}z$&ֻ&uZ Üg*O\o]z7#dlI+N7ZOq9s]҂ھmK:?Mi6 .#}Swʦ}ʳf2SY.,^_*]Sc%!Pwuķnh ހnt9Ѝ}iõ+S}+Ḗ4XhO`E ϸҮ-ϰYHkpPi<q]V[4qKߍ(U,sL|XQ_ aAD=0ٮϾ͘X[)*oEco~ߍ %=#W%l_G'koIrZZJX^JV?ϐkxۓςu]G1koeTzzyNAŰ/E|=k}槈oYH< z%n :Z^TJW)ugb6ը]ϵ6咛4]47EqDe^,)wNK4>MJ|zAMs NC+wESt5Y!0Y_Ϻ&FB\Vk%%=h}وoE\*'K944w%cz$޵H/Sw;eI%{\ ;ޜDtN?.9P0Y\w;>pC׽VUxK&%ԟMY_O{K4>-]2tE>hyL5ڻAҪD F d悤@ eO(Ϭks”3UrV fIRYy4Ir#İGi4\{KH<[U}?[vҜzRI/tmH Q:i.ވ^rc[w]zWp>ӎ1k(K%)wO-SD|Kݙĵ0u"sBZ;DSz:?l-߾}+/[RZ{|lj_hK];;l㻌~_~w+~s^eV(U޴ a! fėS̤܁gz]{wOkE)3^Z˹3(7,QW }OF.h⼪4ou&J%(}݊k*4Y3pu7}Ԉtz+NwzdoCq}iZYaw@Gi5IBѵwu>,Y]x,;dٮY-HZ2Zf%76P{?Z~4K[͙Q #$3<`<}m3%HyP9iⱘ]I˙)c$=&N-+%IfxRW= 0ީ5?lz]6>ؘ"sL ZһǯP޵w+b5bķ X!-z-ķ:RMc˯h|^x%@WZ|$vu6`9չ_+-հ9;~;ڻ4{,\ݻ܆KދDz}WVg-˺9_A\}.eH_0?H.׷>Z}ƇZ|{/ra+/xa0sE6oL{uФ#Ir*[L\,C]20h$tҵT$Cy \90q-ufa)גK bP7ez[y-*>.:' zݗ#}ƣ< ]\{FdG\Vul]۷RKzNDޏ_R'W)f;Zߗ̙<~*Ք:6\s _h>_XzG6TFGDWWEߝO KZ9 /̿9/}j_@|5&x?Z;m_0%SPWÏ+~p_Uwk-7k~._ohW['@{T]ߟs[ToM9=;+Aŵ蒑ߒ.Sne>9jt9n{ΣD(c 쪛u <4BM9<%^BTNx!rN\\Uy7+ZܯᔺYx~8w~O4M+}97]ksF.߻Zƻ@Kzn3X!< mˆo= #J w?3Jҫp?J>stn$+IDAT{꒧%oo%U#gg_ Rr\kqs&=S~+fcS>RA{%īB=Bdzi 1 i-}+}.ǒXTFRyq -rnP”&%ܯFۈdoVy7YSI|둘Kdu\~9#.,)Vm2)~$|W1+.g3%huo|noaKu3ڞ׼:ޭ63ķ{Vu!.ivboJ-;y;~876fToh0׵՗v}$#u>x}|+h|333ZV "W{J4=dT\?XO>NK$ S&-齔2+) lK4=HG}tAT6T7/%^|DwI-kDg|[\@Bhoپr"[wܬė6$ DjiO-ݗN x*;b]+^#W9; i KkJ|,ўxj}Q׵/c2Z$%;:qKS50/˽~* 9& )W]ՙ_/HKz$xU= x*S\$wI4=H&^CF^8S ygAe duuB6O]z~Dz&aJ}&/ߗ~nW[/~^zߢz![8oєtܯV=h16XT9,B6u1C)2^"&CjmסOޟDCM"Iv;Gv9;ZgK޻.lkrLY[*);!b5>8uzhEFO4^ο[&MetE4xݗZ?NҶ ~ guu]y%W.wG2(7uT/3Z2_h? y,ATUc el?[=Qʘ/8kN弔?G|UEz⻣ѝiIZ|yޤH5,K>'%f;7o'\r-{^Ń (r+O;Ԩ٧;dH?\{v~׊{ّ(n'8LfǮ>%Dh?29!9-^۷ouujx6$+D /`[u& ]Ғ ֈtnK;K4> ߿_ӴFRzLQ>H|{J4^,5B\(ʿS*wϠ-jOoLUI96|W{f=0۠ս|/(O?Slm>wSlÏmPY(~. y $&:Hi<(l]?~Z)? Wڨ׏L3oc>W{fgoKٿ9HSDyxwDa[6?D 5My ->C|Td'ދ?|L/~Mѝ%Dvb[Y?@zo낤|O7^ύ]eo~mZߢ;ndN`85LD]<$ױf2\)SvX]聈?muj[űGw'S6ݵ~Blԇϑ=)ۭ|^*Cs^T%ό>6ݣ~* ]sɈ5~JUKS._'M2iEC^үPzƠyGs+MẐurAoh<z-=$_eؾ75( lKlvu>ӝ$aPZu-IV+$#ب䣮ߧfDr0nJQ $'5IMMK$&9t٭ʧԃ}ߘ9<7G:g!u]h/.R2eH2d3KF-*Iϴ]Q0jF F0}x ^_m?hkNƹ}yO)<,0ŲG tMfMM)GՔo%nJz-{ڮ<5ŻI[-齑7oX_=Oʒ#F|$fD7'v_;ĉew.)EkofۜIJeY2ml{=˟[/Ck|.f%=Ŷԗ? X|/]ҪYt!=9RGhD$w1\H' 23UI硨.CbW0c]y^U\k[͹4J5莖n7kY'J_n>O?Hz== OU4.1ؓ(>Q|k)7 JYEs;KͲbuK{!,Eh4,yY(oHiXB+kEGuF>ķcM9A#qfʘ%if#JuF72J߼(G5Z?:~eI|wǷ~,-Q/]uDߤ>bG2Yrwo/t0K׷k2G|vVv:~O lAIL{뒎,]6&n=QbGەUޢdi<:9u#}6&xFysyD ÕASC xK1t?G|ǡ'.iF|\҅ة|E^keW]ؒH#ȷo*{?J|sZ{ס38hnt{ߩ, oܕl l7 7کҼ #`&b{}.*4v$A L۴mnx[\vkfOaOzc-*Va3bO~5}SKoTeuTi_*~s~9I0ש\g:= =D:2y̩%SW]ڍ:37 l6:zg>9*LAՑ;E|?kZ莖isw'ϵ~ϖ( lTlR0"I0WQYÈF&Ǣ1qHT1}?[+Ⱥko-d )#=źK x>;mCASɌ]{`Qe USb0ho^ro ]\T9(> TeU>3ڻܸ{OJQc&f2SzNm|2WO_ߔ-WC? )iwUDk=HS"_j{tzW7!{+?LOOJ|ψFwl:>=ѷnunc/ߐVߪK2-}δDw4e|YN۹R$LwQb]Ғ-N CվPyk:ҧA[L}pݽ}dG -齑h]kZsmd6=F|?T|75 ?ѿ>ѕ_s~?/~k9@"kfُ||mzH"ߏpv~紛BNk~g&ֲܯQK~T]}wK& mӛ3y_V<7oP,bB%a:aše"E|}|\|7-#Ck N*P]|.aph5eZL)St(לGM=UnRqUmwVFR7b_Wwթ~Nj*oBe9usqx IY-U#IA\*'ыYH!1hYvLӈfE'Q1e6⻮ .wݤLˑK`'{%3s|ubخ 7.iUzεnc H||9/c,CFonEEõLlv1+wd\ \3[Pg#/LW7v5W!3TCo>$:zL))ˡK:p}>ko1e ڜ'K|73ߟ cY4{[k8IIO߂df@u~*۶Ir!{ am )3RrO2x3M|{Y0!_i}]Q15/zzX8ͧsBts6$Fm̪:kIm5ktb}ZF]'zIt-^t-HPn}_6\{sӵw%NewsB6/|qԌe0 ݦm2cN0ed&%t~}rZ#t{^"kq+Fñj{t.HϴY˶PKQ%.iuJ'M|'%v ]Q^ee`Z1qumXFuҞx/JBKZ\!^zn۔v!*wzEķ}$mFb\HFW 7EF܋:V_>[TY]2Gr1bh1 cٙ?1t_}+M< J;'ԉaP>lV!C|*N$׊MlKy 3g87ցy_61:US՞ҽ4D_W>ݰFkKZk'9 Iqܕ^&$O^4FbFMzt\g_PŵV޾pF].0~oIfc{ε#UlF#YE_ӹfE-DOJFL?&N{Хjmۘ :͐TT>ū'Nٺn xyw( _cB@vP1^;Uս@yAOԙ?]/a@NswO/hxi mtVRg>}>0w'o /WZBފbm>vL SLA uXvtWJm7Uι'PT YQ܎D)|8Ks%-bkaR6!jM݆%m7!~#0X|:3&ks- )qj\1~sA9C:'E?`.-I*:(G)e9 1X}35n=R9 Jo2Ն98 ypJ:I9gVM]86 ,llxuv+%.Kfg J&2A|%v#^^,v%J["`a@i{Nv+G|.i5RtSA|;owJ٩D~ʈo8՝>ok)eօ"7t㎏?n\fv䉯Z:Wg㸌{n/  BQ375x܈j7tǵr-D=$"'.!T4lKZ8tVߥ(oz@$QN%~94r"Drz"/>5ω}$еd-H;{gk[Eto>fwåwg+Q 8Ml]piaVr"9z.$̫k# vc[CeYϐнwUyU>HoВwfdd%Fz:}Q:~:wEy⒖QEza*@mǜ.w_R|'UӵKwǜ#jvT].sNlR;Jՙ: :phKzté!|:%Cm֏JXnʵw-kݔDb8建k(I y 2bq8F:m~#Q:&];!qpFE_b;UC=.v4K8j퓖m> g"x _/P'L} ?Z@d j_,#X2?+.C[[EIENDB`grpc-1.30.2/doc/images/load-balancing.png000066400000000000000000000666511370425124100201200ustar00rootroot00000000000000PNG  IHDR_wmpIDATxW}{Xl-fe#9mC,d# a",@8ZP ax%+-DVlP& h"eG(yJ [};ߙ{nu\Ŷ6vآeeYeYeYeYJ˞ ~gmklb~l}ͦ˙=NĶ-4@蕧HlkhB؆^aJ{v!>PW )ʋ\r'Kh)1&('m#\(l{lsi r 4@[jΆ~Y94ZcrY6 Cr>MQvQw#dh iaGl#4@}NfŶfh/;.f.)Jc36 PT *4@[I-y6C,5,u(+i0u4"@YY5?iҢ:-*5c@3@m Enj+364+9, S1Ib L]^`sָvzk/W6:.S36<'^,/<#/p8h=M z*|/% 6!'ϭ8_}`?zw/S4uhZӁO rl_w0Xt.m~ `hqy3n ;܄위_^q#,4Fr5(qxչ˳kFSm\AI ęy0Wyܨ M#~&XJ-87ñ&iD_3Mʋ m@WYszWܬ"Xݹ5+* E.?xlI܇ u` p!V4ˮ\4 1^֊jΡ unc>2l];k,:hmk,$|,}f7!7s׶`@uk<XSy7ő m)z~2Đ<0=M ,0@9 3nbfck r7"=k X{q;/gٖ ˘}Al>c[r`@C D=i{5? N)Pd8V{ȍ/o`[vLM 5^HwyA|MS?7#d^Zl7>_Q/:%MBck/v8ƫF7B8/2B\ IH`խm./85\`hpM^9^ЭVs&q\nv7*OB?./VŴ喤{YƱ=lo̝멱sOӟڇmOw -f4Am0+|7,8<ۓ~)`)T+U>sQ0n UGV%UoV^g,0M@ MM@ ^ !`0ni0 Ph0?Ph0 P`m)6q@0mm#uVН #a4D0 #-ч k:󃂍t=@@c'?ޭVu0L)Cwr1rXC&#w!{]ws{2 kt8RZ_ye& -g3[#֔aPھ(w&t70F#00L,0F#00CC#1 0`  `  ` `  `  P!!z`a`00V <@w@c`0C#^`Fc`ɮC_[,?콥Rb͎;YÅqo ๱-Cc3;U,;զ0֣x/CW.+fl`ve$Ъ$YO޶lN)Dȇ>׾q`W؎Ƕáض߃BQ G˶m+WMehyL>_>, `yA:CMHyOǶ ca/~Y03o.\u.7ګ.H_߸ <x$~` Zc6YKc;,e=P<'GW_ zN]}D#촜W':&8WXmCg#k_sUo}g-E>u\緿p}?;7d.-%h[.ݖV>أϋOxOu V;}ڦ?м*jiFc\ϊQL0%;TKKْ[ %%w<+z'7\NﭸOrn$!7] Ŷ$坞n{ڟ GǦz_^dE8/9Vse~՝m[/<ۛ+<[m.< _XTޮd:k(MJzF#kc;ßC[ +$z6C@W `D\::-mkPɳ|m(e˚P3l?zO^-#qiM-miPh<*篸 RۧyO;fyWͣfۺ:D|ZUmZoJc~s7Z&QN/͎_Zy6`' =m3m5C@3kP2x. ^FU7/,缧4P>}ya*7*aصcLoOռġ W5/rz[:,,$`m{j-#sz֖v|&\%K> CG~WjK?=0i!mC`(gY8-tr2*"P"W^tgB}l:׵ ğDš%VD{>$<%P-k R:7YY'1s+%a}7Ǽ&rʜ>V [pM{`'zW {V.@`֬BW6"ժ@Gc=&NBwS,oW-׵U{kVT:/X9M+(mt<*2u>iSG9KO}uބd _uX+?10n){\m>ߴYO w>a/KX0NB1Yy!CaJ,"U<$BSRXr^+XaAz ` !C8g<\ ಂƺ t`  nC 0t?~X[ڬ9zjVRsV{HȪ֕w6?%Vǯ*YZw yġ(?ؖG#1p<<}㷿=71oyoN^XVV+@ `'RtP\ȆLEH ʚi4MdE$}mFYnQB^ F|*5;?D@ `_6,!>/^|啥9__jJͯ9gF7/?30߷/G@uBy-\7ouJ/#!{kLy"U.iQ};-~:ri5 7rnE6S8rz婕UÝ%r Vӡz6 9hssg=}:Rem-$[)U%돚ekm)pȣ)qCqg8KgÏ;cn~ zd͛+/>=,<.Y=O={0OOu_y~vJ$oJ/ 1\Fam6xIa,kcplwTKdJ0Jmk 0\x>'M볅/_>B录7M͑NŃE}XWۺOn肧=-m /L^(D?{|y/g'赶Hz;睗lCrڎ/}_l[v'кE&!_'rqkI-_9ՊBjS{3ϚK^Ltf-EW.C]rU`@c6pc$Lz-梅dȓX MHtJ$Ű\^+Ly!amU.U>JtzݟyӄKju-yCoJ* 5akNPi,`p3/ JyZ@r/U^K_+e`UBQ4yX;C<Z.=ֱؖڶw_nBCg0@0ƺHo`Mם㯟*5g Sq/Z5z9 V~suN(+(oJ*UJa ଼tDJ{B%0ppVh`25k95i `\y^gy% Ť+o%. `t+YW™Ӧmj2Gz?:uz.vJLPu: \aOٽ `+4X^M˙Ueg*1`fM#$Ϫ˙7OJLl&q,/TE`kfFw<ğ`0TZ>_3k纔v2Xm*ow(n%~vH'W{o2-O4wUV!,KECį:,ϭBEOVh0T^WTP_}_y šޓwޓ5 Ĵ ŭ¤M`yuzOѱ֫:-9;7 {X[&|Rί Z!"ZN~G 1#Elj%ӕX `1~oSHKjwZ%Mڶw %eyA"ӕk'p `  a=y%"sQM)Wtky[-~g`Y᧴H5%.C$%r[%-F.#7 q3~Tr A&@Dp^"BaGKF.#z \͓~˯CyBWkߝg|6M,ufbh !W`oϮV:+!|=H3-P _\v>yܟv U`9O݅WISEueYe{óXeYð#~[&{%7緡m.knf@wr9M\͋fD~OR7}: 2?I:¢؎e4 BAf#z.?LZ!}~=Cmۑ0+<i3&(2“Auwlx7]ZszGiN~;zT~V9@OMvAϾ@ϋu fo[0|PU(P}!<Ŭsl($MM"oC3ZUEa<@MWW* sp=X dB.uզjSgKcҡM9s@ku6p3n>7=دQ$<>\aZ/ʎ$aQ:aF {L'S]Wt_ð 1"@Ōy3inb94N ;6t]0vh0B! 3F^!Vv|~@wFc` ;,nv`  Pr4`1D :WKZϑc#,wSrπKb;#C#10@ QcbB 8*&iO;c@0CuXaBh!%dflb[LSB!!v]-RaM]!Y3Xi~?zŪ`(dP \& Ϲ:2 z ~)-gQh~n`ZJ.`0@lS0mM#z1(F#D{ܸnje2?U& oou>Q? ˽ ?n{+UwEC9|Ctu'hWk c#4}v_si()'4+AtKL[Um0k./m"n|{Y&Jڲ/{]D0K\k= !+~xB<7#/Ѫv&jU߰;y_F~]p%ܽ}g`Dg `hoE~/s>S7,yjˏeZ Sf~)K(F ,BXS *jD_Fn/}'2?7 dGgcy{ClQn}0@C3&c`2Bx̍W ~6sòmbVZ ..fA9ֺYXy Л봫c1pv^P|Z(z]xdO/gm*p%/Ί:|C.ULųnGkhsG|^A@e|^0_rΙȊVYq+mK8k#T7ag]豛Qy"A m[`B_3=^ڭXVe6wyuzO2_MYPg{}/;YN> H}k?ڮZ`@$uYy^FL& Q}87\^ᰐT=X 1cC6w)s"sߟU @ %mm[lb;ެ/Mh  JWBA?cI14q=M]{'c[522ǟzMi1M?sE00@& g9]!a:Ѐufa=Xwv]ñNԭYf,x%Cj3 'ހp#T68@stpբl2Wcccc0屸]] gؾHzGb^/(gRR`͟e;gf͟d;E4cXlh0>kPM$X>3BŶSŶ"k=!v*KF -BnN K#>Q4qxtot;GKx^v#‹(zxԋ]E`9yO:j)#fZO!:/,e+$y Z7 գ8ݡPf-'#|u~[{cߞl|~` , {8U~ǍhTXqJ4Sˋ=[Pf#&y^';&:}OiGw=9EϹ:q~6z?]yz2ya _:1yq|x+&]v ߳6zO',CgW_m +`6*9.}niGѺ"X3GDsd{Ggءza2yDV>G |$JWMKX.xK~g߿_;oF"H%4u&YnֳLDn%I|j[_&z/:EϽ闓H4k9m# ,(/ iVsrm6@^iUֻ4tk|N!k;|yBbX^d( Yz]V ` =$%@_',/O{bM,Ӛ%%Z7\OQPؚg7\[? 6݆z_uՖ%ۗ8  bvʶ_;Fo! uSI^Tټ hR#{žwZp$ 6S&u5ޓ[4Oz~|J/ Jɭ> ww4XBuޓ*i+l8(Qq-3PPkMNBۇ:r*⥐lyuJwɊN؞ 0`ְզ6j M 8@"^9J BTΡ7x.d~| :H~:X= '|\V O% qM͡[O7 hJygAi!Ǘ_`f+ٓxvk++ON@Bۇyui/yMS hpu<&zwQBi NAH:ܡ<1LrcS(¨ Zyq?zKw*9sno/`3T-# {ZWbV\yIJrv&+\t~*Υu/ehZ8 H_xqcOt:OȪ=|\q$0GGGX+q*ywW6))ϯKBty}8ytȲB'#%%[!:Fjt,C3iH#gӇ-yr;#[GP. e,S͝J`cZ OQJf-6-U:ئZ6sZ*ڶh.cyu~ӌ@C{PR :"AzUol$l􄄢*5-{DTq2MԩPay`\ e =9w;a:ґJ#%6uI0U(%^m $,U]oZ'V`,iyoԟ% _&UZ}?zo{ NWFL~f0dBxV @ՇhBĂi{6xq[ H+6:{eU8v=y&﨎/ HRWklsY!zOTy ּ*e^fL^;m:&M8H#& \D0 ! 6ؖ$‹!yl[g@ܚύU*][Nteok9 sFO4MeY++qkWۖ'O^sJHKj=2+/`mnN5*/ M20˙`  G17š 4W@Sbʛ&OŕH<\%|ѬPfa-@;+Ec`<ԩV0IW^n/&4nRX*417y{D!9"Es,Op^kzQAPY\BA^ȭZƇ2gz7 "_ևkd\wÎi 10@r}yZO,7J|~Y߷:=$v/c5CLp"Y|"^HBosU7)}eiM-kw?Y%maWFr$1e[L^?ɽa`fЍuLq`(b[J[Cmpz˚_O@e($XZzvegNU '<>Lyήk,2UWP O^˛Xel^.4 zЃM0,Qf4 liqe[GSN{oOdNZ· [ P fcyGT(k_d) |} -Ct(ݠB^O ?)/àɀc`cc}mT`!ȴCEӶQ/Faz+.9>y%¬mFӇUS=V-ߪ@s,v|\UMޓ KY>6nUA*4 MuIߙSt nES.si$Pht-^yrvp=b/6D(s[>qFh 0q7>"Lƃ>4yvԋYZ67rtttBkt4}7Ioɩ[)/:WuoP4^<*$q.M[h`.m-*$zMV9$b}(yDKR D͎)x >p}#ahl^~5$qDs^]lK2Q(aއkf.) 8@1Rx霙#Nx %B{Ֆ|N{:)14Q\!%'ixi(d*&'|q5ož)4lg[B6+<EI nC$ἂFpݟ!x1BGf6U^+6{ ; My;{@W(.;LCj"}pz-˪%,qJ>OĶY+0VhPV6^ *n<mF9 C^uy"'Unϫ mEv9 C}]R%/9%fH}p1_-xZ#\^ͱ+LXeӳSĭ\򶬅T ;GU\]7 P4}Ƙhc#@7Uݍ B7da[ jM~z{s3} `T|Z(x %G7^`h4 {dw|ӍV.>PN(%A/@ؘ'Ȁ\- WEb/`x 3-Yyq3K^4U?E% /@р.h)MRD7<222BJ8p2%8>7^ytly-!|ZG4 L`򩧞Zy*TX?|#9#|Uk; J{yku d}&!5a=)iq&NyzhxjD̫fZ8v`huPfGV(@k 9|۝%eZ##pƋ]b+$HC+n9rl7Ưe'ňBQ7|L8 IռͶ؎ ۬uorg-Ct) iiW=OKvJ 㧯:_k{8x4ӧ!|*}4Co++|@`{t5Or/mCq̨F>`W^W4 *[=L7꣰uTJ ޳ŕM)% eQ|8eޕp(TVPS$9i CņA0a* qoZ{ݶkaGP採v 4UzYAxl@ M|)A'kضJ zQ\ZڅDīĮ=^y4|eswr@*ٍPiی= \6.ՠGT9~Jm6OpM LJ&1rubolmPfE,y2|'|9P_ޡ?C~r*e|4n@\DBy 'dg,3ZSx:_E|,*FKXvSU }XV8]EoEpNq2nӫ.^J|\2j"423ze> e>C.$/q#h& fA;)a\z4Pۺ<|\hSxGY[K~ U`(}iO[,|_M%GS }%Z)DS@}DޜzUjvWyxrdA]Qă/G+}Q PB?:Ѡ_|}J t<~ͥ<"Q40vca?;s \&@j,pd?tM{k _r|zyxepe=UUX=G|hzs{/30u7 VyJίԂuM߿ \u@>輷-dSwjؓ*/![o*H: RIZ}7gea ްe/3T[˥o`Է=}_L*֛eGJΔUr7vA'0o^!OTt5Y׾QÓ8S-~>t(zU~Y6!\\r΋k?Z.YLyqU]v7 =D3Lmib|& ǴyM+¥*җ@IQXG/vh _>D}6o9ۛYoL=Ao7~4G\HPZ`ʳ;A_dZ!4PW>+r Gi:I᭩:|4+T6b5+{衇[o#;w}p [g̘.k:vۦ>/n}Y }׎tl='Rv{} '^:_lCo_SO{P~WԇdK_cd~rrzz?o?*y&}K/KWG ޿ik_o_>A^Q=@M:{o3m>j}Fxs𣟎~pDǭ{wEME}~ 2L7T'~kްÛYѩeBMni%V5h@BpnkW&m.(s>>w7z[ f&~g}U|,g?窤mG`13g'۹;n=}#﩯Ϻ-TF}-쾣}s_>I}󁷬>+Տy{1 x;`0Ф.zl4=x;>s=a *t8 ࿞J7}yO`J/= >٠;k{<kᓼZzOGYDu=O}oNe!%{PFׇ_&7>W uWH=Ne=w  ԍ8)s=,3QiO elniu42~=AJ2gyAqwRmmkWhp3~Ӄ]o8|.Son7O8J'2 ,:MuT^%Zw\^8i=S_Ā_H߫fFELjkHʬ嵞XX!WQDXy"&s/ ھ^X;@`00nxFrs֠X7~O5#m2Dn9j G7z7`<N{lPowlbiEc,{rª%' t;YD-hwuY~Q U2aHoxm:]KO& uEzySfzj;f AUrP$l_{|xi8ж6PU/wWv8"!]ZW^"Thzmu&!ONCC#{Q;Ig^d!{ײĶ~^ bvrEmI`0@@7C 7֍J@_ݤd`(i0٨J<är+ö51x:[nxka3 YSdZGǫmk-Wzl7~&6T<xxn &K?Ӿ4Wξ^ z6*B `?OڵԌf9z(mjEnw~{Qx^ =Q"/yne{[_)͟mo@7L YRIr^,ȭn^SjHj;Lb\-nYObY^6 tt3>C1Ӏ7Kdo{zt [Σ=zJ}B|* :-@LpV,fhHNO׽h}5kLV!֨1o=( 5[K](֖=|Y{^B{ЙYEôA/[i˙g:(doL[j<>igaQp7 V(~S hP֓zXצY @7wy@8po,m ]v,6x'Yb<&xMCҴ\x,5kJ ;dXO6ϑ@9g]V$HWךYue:~ۼl:pߑ<> pV=~M$ГemUWk0+J N{W7kh{\TѶ6dMdKֱEymo,0:#E ï$Bm3U0'#%-#è; Τi3YѴYgټώ\Wxsm+flٛk=ζmfXG&sX6}uxv$x֟SgAƙ5X=Qj}Mzlk ˛uɬ9h6f3^o0#YjnԠwz]qֲi{XO)}i[]\M88-|]|Ip; z=sW5ٛ=mtlיYNGɚp?ugn26n.5pXaWt9ʵ|]9SVp=w>mޘ6:gΜzdNNYy}fّ v 1h=jnPcjdk-MQ>LXkʏ9;ݲ6 cݮ{k ~Mk>[`ps\3=s7ya)1lR<;W6-dmqL zO{&}L:h{] yM'ZzH]߳4 ^'N_O?%}wr;>5V}3 u$yVh/=픋U=Ws|+V_=Ocњ^;cmܬ:} ~{K47WB grpc-1.30.2/doc/images/stress_test_framework.png000066400000000000000000001744001370425124100217140ustar00rootroot00000000000000PNG  IHDR!" IDATx\eWy'b[ZiWG˭\%:*v02; 02CHt4E˭\;U0C2@:ZbTZǖV$! IHBóŞ}wsYpw(((((rI%ҧ˘.ֲz]VkY+EZeQ- sYTvZ˦sټ8\qNM[ pMQU.t@ @7!EQFxaz., x(*qMv(@ښ.u!EQEelQ >(*:x((,W.MRAQߪKyYHjpj!SE<$!˘ 4r)Ңࡠ(7t4ϹV&M$)ҢZb͇qH(jIE\κa%!OQEQ%_FHSEQQiMJ|~'"Ĺ (*>~sE>Hl{ܚ@\&$RE<T6DD[@ene%!(*w@,TH礳HH 2̒@z8$RE墊NS."Jr"BbDHoXt)eU>\`=B"EQTnJ GfD鎟Pۥ˥{Yb]\(!(*%Nı)*!q ko%hED0P$p6wCt+P,{(>b1,X64mH DORT6ɤF(_Jk$$qH(8.18p6gI$C6N[48ՐhqB"EQT &!iCr\a @Кc, FgTR{@gNn=t`0sQ$AG~o1ےk󥛹sk;1_Ju=v}ׄKj3M/ȭ__mJgȾp6#-/T)A͂+$Ƀ$e#$ G3~O9Cf a$D_Y\+;$%٤2Slկtkb3- qg^9j͟>.^T]Rr';J$DP9-ΆuɆ-~Gk`WucQLK3n 2F#zXӲX8^2i3iX.+tk5o qns ,{cmc/тiUX@+zº'],ӢC 9E Y,Dʴ{'|.,Cxg]:BH =ٰ&`vJF>^IݐXcAj]{ږlCQWuw$q0gJWsh'vZ/uEŖUgzpuFq`t5a"@/.4Bbl) zՂYK$vXĢ- ўWв%NHn$K(*5RYBX/\Vփ׎݅*{}V)DyA2A)#d5a\&L- qnX q6|,׈5U$Ab;ֱ,bcΙͮcMevPDAbUx ĝSy;]Bb)~G%$&^借pݔCE{ZRNP#%_QU yJwP5sMًGs{x&ߣN+;`DKݗ<2]%.+R-Oy<<Xrsx\sfC;ݪSk 8KNc)2[Doj͒4HpGi S#OQE)B"EC>lbEݥ+3COQE)fQ!1gݒ+A9EQEXnu)(J!!QW%56E-+Np3E,AIs'˱#n-:vK亴[<}I[A%/T b HHK&zٜc￝Ԍ#8^ 8IA̡ޚuZ&s ¾%+eT 3AǼ w;8? rL$$I"Xߗ H޻ؖBNQh>%ۨgxC7C9I ";ld ᎁ?nP)|EO6_Lݷ 5^c_rLؿFW㱘~Xsmx@bN%%cg8!p'1$4YpZa[,c ֚?u,!}jJ,^s=ˬ$zgYoH`m} Lh^q{ey XNhg1ޅcnF~fk?'s8=Ǽr<^rqM3qL}&׺z^يygsWcھݦϋPH'^gNQD"$&]-iD, p[5KwflR2 hZgc`<]X!6v]߅Xϔ-7ܾMY p6Gs6vpمbCbp&s>˶V<7CA{)ԥ1 H\p/2} NlۂcL!񈳑Wt`F5IǼ\qЂVV;}vCĶ6N r#(Bb:F@-*6,ḛb+ż%lȲո0ω·o08CX׉6[E.q6D?%V݂f {e93 š-ڍr6+<3~V8 qʺO-)Vƣ_AH,u ׆y /Ht\G0=t,,aLQT*ۺ]M-̀ࡸ ([l {V<Ыv7hi8(&gg q <'x@b4ZgN;FL7w0<:'fHXf4Dzk7Mfzc^=f^wZJun d%'${:_#B"EQlhv#Q  V$ c<ˌa(_2-cyˈ9%%Eac/C*EW i\.<$Eš]e $m KEƢeY>+ Rs8!1TD$P$khOVκUJJtiې>d PPjMiKz 9VFKL蓘k"ubi 9L:\/YΆe1)*ɒ PTjklڱ6{%%Ы':)p( ;v0OeNQTrlGeqkW^^j{EylUh8|܀KKJԡ{UW*/W١qYg=}γƏZgy 3Z@ 7s|95_{ES-,$:;ّ\fb/g*[+v嗓!h{ֳB#vݏJ?z͟_WS?xϩ~ zWvՋ3(E(ЧӐ"7X>E0iАzsѡEaHWs1PtRɁX;"зx+h諛ZSΏ[T WA^W}yݛ.uX?>n>9R9 ojHPϿ4$nzW/y|zw~ۋ/%қvsO3C?x}{?zw2ĹrR^anWgN>(}ͿݳP7yVeQ Lnzџ7th^[Ϝ>=?|zsꥭ׌. [R&7!xe^8Nb#(*e|ת3杝g>p{.W\QV[I싳ecr +{nW/Szޏ+}YϻQ a=Ww۔*~⣷<]sϥo|ρC*kx^b9/s**Q׷2HE4Me(*&93LRU[Go{x~k^=.^e/}z[[>?J`e/ 㓉MZxgeo 8IlDB"EŦ %W^>𑳮:J=k7=u^;WqԋK/RP849'ȏ+!HQ9FC'`_v;__x>~/0^t[ $wm >뺯>Y4Th縁HeRHH$$RT.ɢ-w~}i7VS?zNgTgu0pJy^*}_|ah($!I mܴIμj}?PsNü;|x^}ǫ/98ݭN h'"$-]<]JYy繵xEMx_|ֱ7=Cw׎ýy˻({˻Kvj879{Y;tQj W[7L xK1EHd!$&WuYeXǶ,ؔˤbRq* QUԿnϥp8_9p;x{Vy{ÿ'^pQ==}O^`w+}@ў>]]F_wݻwk,8bk^+9mc1L72¬_"$&ZҽX CK'{~Ç dW]uSqe%%4UW=[C/GvЗzxm|}O 4t~P.01!HHL!$ DX.eeauiѥ^j]mK"揊yǸQl66by+ B_,{.==@pՕ^yo뜥]VyD奇|>BZ.ݿ s<U7wi@Fu+7]~8LCc-9:F2qm ˽Wmk~s睄&]uzl_0”&kn;@)C唉X^^X^v[ !1Y4}낃w7~/|50@+v>ەY_I< tHOV{Kݬˏ4(~BЃo~^v^\c2YN{{ֳ6k⊄G^~󞷩N2O~Ȗ!Dw`u8 l1Ebw땺ׅ,`ftkq+בxt(D4zgo|a!]E,? 2O@R 8_oIY^U{r$ۄD*с+o=p fɂ#ٶV(eϻ , 5>0Œ-H8c6,w6|L7>(V5|IJE8`Q00oc[%踵`*4 cD/>^֦n&˦2徾}k5CC BH4e2o| ؇>oC,uoGeϗz~S֕~[|$9 ؆x)$~(Vy|7-?Qhu'k}۱bRD*瘁+!1(anB40 X)/͗L?sL8FĿr5S_ٮ~%lnPnFeէ-RWOMS׶ֈ-^eҤ$K؂ IJqwW1iҵzLOcиy3sҵl43Ǵ29&$RWF bi(d4V6 㗿<47Jl+ث^Ҹ{e[2- *nie&+,L J99yz_bҒMp߈+;!ZXk\VJs2>`6&R؆>,i}퍸gsXOw]@gsYyE c8*wDcB"EyTBD8ﹻndtg N /$!Q5R2ڠ*KS{YϞV7ۅNO:}3K08Gtc;Nig'FDs O;e3`@!tچ>Yvu-ZV0bۤ)żL/LZ䕦+6L6-^sASP9, x \ّ,"eOX$x!QXM}  }o64-Pv啡(d? WX![ofy@w5]eRy]tY. v] oeyW]AD X/u HԭzB {A˗B:]Zuр8O$. L2"e=[r0#u% ,kތshQ@ 2K0] h+/䒫,[oӲh {mE6VS N&E!2NIC0,| KQZ-\Y7f6Y7M*t%WGB* JcmP{$ʤ\@[߯2 0AHFLC$b]xN=f+5ݶb͓i]&I[7C>&HD"6A@`ӈ+Ghk m0MdX9)-&bZ֕}3*ɀD97Y#t oK |vkZ|Z. |!LtYտ9B~.b24ֽe{[h",*,) T%Fu0=oz0=Jd 2epl%$7Ylk_+!"$RTz';_8,=A(κX2 ?Z{DPN؈mwQ2b2r;c v=]ؘܔuVPͤ[5҉r PNfpB"!1m0wcܥ|oY{7!1!OjE:뾊mUlM%Z"=")}<2>ȥtM;x՝\ku,Kₕt7YۚCIt7+Z'$)*l6"8n+"!1[ َƟ/ӬHώFQ+b{-bdĶg;Wk`VdA4c{pkF*_ DJzg &`I8ÊHHHt?jĪۢSguZhmlB|'CɈmvbDZ z]'F,VWAHFLC%{VDBbA"vl+fuWYDk/#zmJOjtUna6ӤΙHHHLʕư߅.P$zY bٚ@R\*#;b[2lĶ1#NZI/%:!_YSj5ui g78a,Dj *&WhF 'iFC# }XhYx`eIKB"Fyff4C𫙱TưVDBbALX*Z*Vm=ƘN $j5 ؃ﳤKɲuNd^A!)pq5꜁0ºiq$+"!1 ݘ^5+&xC|yG&b EvhhDFl nb@ @%H貂#V޼$B"EE FEXL"m*A)p"Z gIlFˈWXU1sdF ihD1@2"1՟טEB"P,  dc&aK+؇>Dz ~iU>yEl ,=#6,]/Xג@5$A"_>ma,L" q++]VlJBWC{H<-]OuM;SE &b{ ۡ"3^V'~vIt6m$A"W!ьoZo`1֖8/HU\/Е%% $u BW)foIÓLd;bqqSĶ'^Qy3 ],m9ب}%l="3UJ:="7 f^kwU#E#κfd쨳1cr av:U`$7N6ԆDI9caUaHY D[Ul~$*/kod *XVbȊ8/H{ֳ,ʧBq"ASyy?yEl[C#6C#mY/_{ _C[EՐNvxX^q ؈ lVld{aXL47fu7Ol ˧,iO#HQ[¡)ݰ9BVD}.~>/Z%h7yx֥!^ |пeTDlKI-C#>m?#oޠ?qޑ̙-',65986g#Pc4X `h8f&M7#@b9 ~9\⣕c juhCQU* 1mlyXܐ(l5~6sI@-~ Y7Z /H4]ళ]!H,K$$RIb`.  qL%!q8q[$tq;=(˙]UfXmɃXkٚP9 "g[v+` xtCtOc;Te-c-CΘ w E*"@l4kYē8I;A'^/_l-s ˶ܙQaH#]_ڿ*wHd *"$VXK(iRL*J.GUx~Heι7M#̫Fnc۴"]/^x)IFgAH˟)'ԙH)b(az`̫D 6"K`LX#A_XO;FRr߷"$R9LCmzX I.,!iE$$J\˗U HBmz@g"XOiE$$F K69G"{<!"$RCbcxXt`L" j$gHYˌ.c)ځ2ˊb2LDBb L,aa1◈|]hE$$F_Oө c. .y>_DF7 $JC"SPg<@0X$'k%$'~lJmRaUD,$ I$nǒh' AI*# Yu)!$F0ݙ""b X S.t{*hk;"9N=!Gأ>Msp. \aHA78OZ VDB+\M2**b}=b%w1OH+% q6o,w%O~gѵ8-}UlQvN%*0(]&#u,Zu4sIHn{a(LC<0"c+JRn8 +eULa0ڃpi(4;Bb (ȗ& - zq `Ζ-/#C>D[' 5VJ'/y $RÀyH.Xyc>1Ę$V8膝P.D 13-)ާ',0*"eh7VQҀދDHn[0m^Ɗn tA_5@z ŗ1Q35lG`o֣NU [T3'.ךDyZ觼"c#jZfY- j1HֵdK*u)Ǵ->MHHtA g#XE_-߇i Ȍ;3X6mz#,lXe1/Bw-[K S!H$CnsYN:]\Ŵ"D8c^-ZPhF$k{L=]VE4nf8K+VH$:s&湠J+\5p6R؀yXF+zxEnNEw\Sl~i*tO3GH޸p,QЊHHL$/IэJ2dr)$UqQ*.8rI^9~\?:Lxڷ]BnXLPI6$Ҋ՜.$:p,$6;r4}##H-b95EXp+ta%$JrM\&|ؐ(ɽ t>pAҊ4t<-q#He̾λ(W3VEht܆yEyo)B"HǛ~$Ճ1qa}^t)#i~ 'NUy|ƈDW4Gp!$RDʧߪ#JD-Њ1,?c9೭CI0|YE2nrJ̛GF qmHH| LCp:N5ъ1k2 :Nsi&22{Ky hgvY%5mJHܮNu#&*b܈ Zkpe@ywg5TuҤ˵=Z.r="{R=# p@9 ,g8!1:_nKx$.0}D/،R gr+TZ6/*527KrZ2AQ@Ȥi#RhU^BOYy& 8v`#l 1BhIE |ڦ_!)prK3ɼ|z 7,+~8!.t.gX'@d,k8%x|rI{7m$5mስ\2 q7mzͰ`z7F,)Qk6I=ڭTo_CX>7-uEA$| \ ?_[ͰFʐc+]1K>HP4%;: `##Pk8z׈y3HZ^"c!p'I L7[ gӠce(N 굼]"l#$W86pAhvTZP;`AQM|HĤc+V!`e"ɲ*9~%v730mFh4H $$`CQNK`Ĕ5^nH uF ۼsfQumI@]U%o7#0c\ƶ]Ɗ(Im}`E$$fɱKbc-U*JbZdZF7"YI=׎y)ēNd|(eѵ6xkVT 7MVNp~l5 vة0Kt= 6mI}Ěg0]vRL=Wy)Di >6Kb5Q@o`fdqz6l#$ Xr6z(W 19NYT,pxos[.ÏD7{?q"h&NX\aUJU1A-L b'[1oUerpҊvX(_F~;pk .c;N= BYw:-p"M۽ 8po,$]e 8+ _DB"XI|VtOjzЛ-tʪ@Wp]CÇڰ|6ILe0mKE6E{n89 y @[*gkdmؿU2| U%t?E旮xGow»0phtEvHƢoF->RHe !re] vr`UIi*lz(a`rvϹTw x|VeCH!ޮ=#<4W"@F07oa0E*!18cukBqe} {dh` SD=,o+2舘)H Aѷjsh<sX̘D 8n7S(ҽfږ<wXͼmྫb~eImiËz#8q^#MM>Rk^9i'5YŜĝwלD>ZHlzYמnEAaYP \3[c+^lH"1e,V#hZ0 9==]hW|Z&ɽC52ω 7fS|EJȈe'|Ik8ߒ۸ g{76ֵP' f[x$VnK^&bED,VZ@{GiĕxA\6XHK.Yz=<;dJ^Ë)٪v6ÉH[4C`X *LKWL=1 1T̔[ z'枫$Gqѵb\d0 8`>N]3R?y9-X \pPƉ~Ѳ32j+bI󢓸1S~l5Tae4^g:SdU8G8'eɶ챶EZp!] < R#Wmܿ1Rd\d=U%xﵺ:%<.S)ڴntE 2}$dd ùDЇ7!QOX喓Oj_DBbn*-V"o_I!˶-*u&Fx:EtN;uXK\Vp/N83Arݚ|N_>؄nS>qBޖ/"!JHw{+<%*N'ӪZ|r| E9V<$-[ƹss3?V#=c+tAr (*"Η۹ UO\ v"8 9r^łhRZ}#1XG"pDHpP,F&XQ 3=9 #oCoT% OCn3 $ǍiDbUI ,q `i~=7,قI%w^㩗d8CI2NaHH\l{M]rbF.lDX;1黕(-*vt&oE,0Z / R4.g=j%!E =8F N>[ ʫ:bOڍ`'5=1SȶR4xZ>.wFheyAe+ ]^ 9!q?ƷqK\s.Vۗ ̭io6U:9vj  y@ ˖5mPPK8"5^&q5vFb F+bDGh,gĩ|lj80ے֒v3ғF*qivf#$VzO➜v&*61+V6RK֚ErCr=]`݊G']>BfȼZ eEXAL/!]kqO,ҥJReUD/I+ W5W6kl|2E~ ˙/dHd EI{2Jo $8.e#v7`qA-;]ۨUc@M+X }2,ߐaۗVTƩobamCR/B亜h8$bvu @A<ֺô"$$fՀ=pfv}[؊%_*Z/Ko"懃Ġ+6:hU$$f}߀Xhӕ,arAdRY2W7h};*H,&].Sa HD7TbIUg8!2G,jH`Df*/XI-˓苸7.Bb|)ִ.^y s EܻW.D$H)*.ErBьW=HˀFS @"cP,DÊ >XY? 't },+qC: tV/*Ju}x_#x//bl5 ИJ9t%Se XeǨOj*VE]r_FtQ$)pT&q6뀻Ȋ79el0/|6)r,?Fv iXCHlBC!oCɫt+QrUc'cs+ IRXӥŮyW]pfq/7N aiõBgHe9+mip<;VD1wi bBbjñ" q?4Sxa:)gTZonr'$'w#Gn5 !1EߴoM,*XKQ$ `)%$f&3T|; X z_KJkѪ>WU VŤ K_!א}CNּGwwAd`%ŠBf:,)$6f.č=nR}RSXm R! &_AOyhU3^Ěg, Uq" 7$32P ނ؊sɰ4G4"C%r"x/Y"EFj[nMҋ>TXϐ zX<;DsH,4yH;UY|hE%]VE*)Bړ8bѓq᝵MҬ[Kt"]i'30 h- bP?P, 0OfOX>X2 /$]p!(*;Lo2ïΣ Q!X'GʤkWj+uf3PNA8[0H琨ZV^d!+b8:Kîg*98c%۫^@{|[ySAgQQ⢀g)0e.H˪Xm$Aj=$SVm(ON[3gNTR!zK?9ᇼbLPFt%A+}< 6ø"!]5O,,[ d$ո?3@7b/ ,s'5$+dleáe[P_Bw7q&EڜP2[>^D z`X jy2庪0܅|V=iՂi8nD]fLŬN}EX&Pk، *rGbUeX k2fk1륅p(p(jϽ$Ƶa?u3ފhK"G{y%RJ` =_1MskuOb:D@kg3j,-gz̃qa:31"HUP\``EFg=üXxRJb@F'8Jy$l4K$>B2ku7Z]͛aY\ˋ!Q_bн* ֕rT?݈YeEXo%Z|^%z)AS^XĘ1(p&N1PJUuM58bk|W",%>қ!nTx1 %!D Yg*nE%/{yl'=J}.v--Mu{C r}o2+_s'ovߔXCmw>]6*lʚӾƮZjkh2I\ ݎڇ癿ropai \̺DlZV~H $e 0hTln3,$.Z^*(bY@QxXLu;gM%rPGŀYZ)*c 1gku_D$rgtA'-- +ni(ϰI{!J ـ&$$6cT8ڀQ'Gr+VfJ,s7:0]\#߈ƜV"RTtuXb'04OToXLZF dUF888!JލXҊHQIcJl0;o FQᄑfexE\ŀ n<D*7.Z jVDN2Rט)P^b969y<ϱJ t7D*XAX a$"RT8qש\V\g"$RɇĀ. _SҊHQ1*_ׇ@LFBD*f%êH5)$64K4OjI+"E8y fa2i*u Ȉb3!(Z#('5Ґ %D0s/F^}nGEC^ftD<"DE+}@OjG+"E%@b  2Ꙋ[뾊mUdB"&01`+txɜu%_1/qVDJgxB{Rnfv5S~ibG'Dj {VʨFDԳrCӟ򅂎S/VE]zhU$$R}1ҊHQ)ígY9#LE* y!}fO+"EѶH~i$6f^遁y?[ouWy|^q&!J/$6nyMiEJqZ]˦tRQ0LcI?d u?$ś(aQ"RT%\팣m@j odd?:S;Q}.< /=.{{V~_)&$fV_ *s1v9ӊHQD8'G /y%)h,p\\E{{W?S5qeMO|iMsEBE"!1!Q޶b,b`VDJ#$J8ۙ<48v=ɨVvSncU˽7s/^( 8s!ɍ@+"Ed8ږ.0G@Mf#R;.}⼽|єozWK/rgtA +u郯P {|RKZ)*0fKq3à}, ߬~kߍ6kH\E%<أ= > ^QGiE )AbNY-ִjHxS* pM" 2'^uYl"t!(,ЊHQiAg#B{̤O,cv{)]T3=ҽ#$f}Q% aIMH@WX 8ҊHQWqCq;sC@3ދTBl nu,ȽW&$fd(?O!T@bG#>ZqQ]v@%$frӪHHt(Ba5,V%Xy(78&I,+cG2{/6R;jƕEE[.]QoT}[_=ZYU>|$l;ޕ83>J2)?Cb_VUGTH@iE(Ab$֎*.eUSx߱. jk^W;V)37=Ǟ֟Q|qΊ,JHac{w ٯN/BB*/B"LH܅b8*E,gЊHQ~rM9%Z*OCZ}ͱRs*R٧O?~T]k'Q?Y|R}u_O+ݷ-<|J}Zu~1uMjR7_iR_XvZ %-Ce0؍%>5CjxYN&$2 hC{o|HaudB=3jԭ\V{Ծ/-ѓ+®{kQ#_>Ұ5=(uc;j"!1S!q~Zޅu.IԘV$)\tE.^w'׭FZ/Kby Xwʺvk]:w5?=_?]sC*\!w_-?NO.h ;T_wWmEUuߣ;էCŏ~iEP5u]C};^on}uL[W?>=۳g!uӭ[D{9[ /'u9?w -S9 |1^N-,"f!ͨ1OϫL2hߠsLQpݺ$Kޛd ~kH'V㱐S__]|ݪZC_/|!G~_V7"\Ezzgm^V޸`wwhIYb-fICyݻw~ 8"kp@*ncO(/X1o}#2&ot_|q9o@*~_%5EE*ozH]sǣktz^v߭?/{ZSO?NK>Ku_^Ґ8Z%Fow9o>ZӳvBbJ.AkHzt9˒1WFz@E}C+b7U~v#C%ZCS(~s+@ċ4]a݃T}j'C}J}ZP{7AzjoŞxCws[YaU'#Fn]aIE yG+b, M<"T*$#J܊=kMjH|uq{4 ..O-w B}j>52PKOQ zo9 ~ b]YvZ~qB"V׭L\DC?ӆğWFrY5w }O+6P'kĮd*ŐǺ%qX!}er3WO~uI}sTO>Z%(),8Ҷ''~bYyjJ+b7LD@8ke8s }7E.oZ{?3i?D Jɯ-QJĻ4$cA]VP\Ԡxw@HDX3ê8^ԥWHb Xi;X}R&ZI.nF!Sq)́a@ c]G:O=&?F;?Gt$PiPo|=D* YXS'3i0yH}AORX(}ѫ9ZË(\Js߅zN"hH\ Y[?+5+ky7mIZQ:r՗O>~z[KPz jP>]!$XeN]2mAӐ&v*j{Xmu/Kws6[%cbE T.A){-Ѡ|#4d$KӐp5 +n_,bMW.uBs/7osl9D*kq`UU1# ǜ.}t %z \-5|7xڊ:SȰ7%ʧ2ruC7< Wݯn!K<j/4 T>KXOؼ+O_/['So.u4 -zw"!V233*gX> 1LCJ|XjZUMVKa1dE:SAW,<O!BT{@=,FKnO[Ro_T}?J}H+xOO/{}BݯyY9~<^_/t<u;"n$(le#x$m,X] EZI-P2\WɃIj!0(:x#/gs㺨H咞ߨ7ް;s,% =P_{ Y)su' [5?]:RTUQ>N8hU wmyqlӶ,&"z_D*S/S)٩Ϊ _?nR]kڻU}]C'~zBqc_:t]k.8 7厮 !J}X/d m]@"ܴ`g"XK]p)wZ\.q֔VDIG THtҝ)(:0s}#EmU}bQcw/T՟:;+f!n1 rdQR/e62RK n%[mRUUṶX(;ȡDt8l~TFK7?cb\pt=dl# K|Ъأ^4h^ ѾvǡY [)DZF tB&Pj>,~d8?h>6H,4gKYl볯$oĒי* ,)茤^nA"YPGqBb%<51,WJKc؊t#Y!-V+Hﲭhu@KO*[O3$RP}VE#ɵ*zQGZ.,k4M~ l-st[mZi?WgP g{gY幕m}n,&Plp8t|Ϝ6r$ݪuF<cX^1B˞ϰJlEtSwQN|&H Y:X˶T*U"".i ͏tãoWwY)dUUUއL1Ea Wư,]_15@)J-"R7(G%O>D~qҶ?}c/tl8*n 4S C"Kng\pCW CJW.? Eq5%hXa9+ [ 0kQZtaKي%KT)9"`HD*/n[4Txe[lҍ^9ZhW_W/Ynl# 3\䂎Ӫ(>tT!/wK~bV\UP|#e\lMB"΃Dff$J澬˶j^9Zͣonn# KݐV謌0U؃8 } %Lus,#hקahSftPZ# K4ŨgHmdYBN`UD"uN Q;#&J5j-%ˊX×ubV'|$6`sjBz`X h+D%Ri>%4YWHOu ƥaqmԉ?cV-ur+tORxH]J_wQq~!DѰ&ftl#,Ƹ ?BF\U#хd+!(t%$~M/9:%\ pc\'l{5Cao;Xtx S}O!%*lY7ӈo}?)f˵Dylr;V-uWsX|gqjg-QΗG7eQ+>c [V'."g4/8n Lbkk>IL@"S+ㄝ"4w c=vMץh?iĬ77IP K8F-(!ۅѐe|$h qcca e5hDw 6M/m7$6.iX^WoR̍+#۽?lV[0PgIam;WFs ~* pƱ@22*譱>dz6,mp߄"Jw 6@Cc˝Y>Xfнp$ku>CM l~mA*zht ʚdɒ WlE(Gb>)a tm5H'd0c@7!f j9 vZJ' Dz x%2 j ޿ZiP\NqaMLWKV1"A6 S m+txraHF)Z]oU}:81}1i樈-C [vqCAã 4Xz1u*>/)0̲nkV8/#a-.+uҕ6+jXp'N7pmԠg,u,Jwۀ՘4 H# KX'vqfM]MP1Xv =&-TF1V( ǠƀY;$FjS)qaLm_m[YcDf T`@)Sp  Q_#b[ZӸU@ֻq:aK-3 5ôI?|{(clPES/[ ;,H 1ښ1nf=]1XbEhE}H r+iȶlXqO".ٽʽZa;冕Ȕ(!`WCc>}\ 5i"#wslX-zpv9<dH&Ybm6/ĵE){ ^C^"NX$K[6L"NSǔ-&0lSTcu.m![YXZYsMz6,N$n\cm~ l7h!Qɸ2 qYw[m t `΀7H,sƬMєI$!Gp<uE&;!1{tgZ?p`e++++**2m0A݄d<X P"+fnbnfQVo1!1BbZCeԶQX*D r$@ -tC 5 by1a;/:"p2 _84$`9@ñ-aQo8'Є0J|sR @J.fI.V 8X)1[8R]TօČI74 5 \*!0ith婀϶m}9ٴe|0wZv.}}u9m{(KQ fپ<۔o̫+mۘo;7#-?B?{(1 cb=/ci7z>Qd<I #s-Ә~"ՅeQr ʻ)int%cH1$$fw3KͰ(Չ٬ߤ$oX괕-5E"trYEG0d8(T;xQebMYALaI]QJ}O n#YweEdRhH|XvOocaIp!눲D1>x|}J!1@ ,=QN_HҺbtc+" Kh٩P).1 KD1s,p!oq V."[c8ؒ²`EAb XX$ "g bBګܿ@XUѼP Uي`NXXvHD HХpAz/m ;2-8þ0J޴پ&XLc+"C" KԐXt/7fvDDNWˇgF̔c$zNRNVVbQ 32H[1!%byڝ,,,!AC||p<:N+E!Ű"~*uGI*n a5YEgDlEdHda,NPPի{tfa  w$!<9^6ű5$w=k ÄElEdHdaF`wD@|"!6}9:n8}a;bnyhx=nΥ$.2~[CG(SB,b [YXbEt]QdG;$jQOwoy>G۾oc}~οc5&h,yH>3O>dJr/[udwvv.Z1>+z]wEۢXf/oo2;x;Nu~#,<͸q\{ޘ;w$ڡ ermP% F.A^AsGDVlH$˦#yeqWtk 'q`Ec+bR^^^ Ng:ucTگ[ K%O AdNbg K] {`={B)E-+tM<{q XB0|!NەcH4ெ0?tFf$[a+]S YX<%YYM+w>DSXSĘ0u @&C-Cb|O:xbtkVDn1Z1ugXXXXXx\Ǵ>^@XVp-ū V/DND7=G&ي$-YF’75=2.HlEz']%ZVzCkh~T H'\C.lK Xp)A'QB= t0$OX Ǩ^1 `΅#H3Zf2 K -HL"82$3u\N;ܖN؊H$@<MS@5 ˂߭t IaD>vI|X,ualE$B:;;k|DYXXX'T^A!ѯ8Ʊ\†{{3N]ƹ `VtC"{BE !1-tD"Ԩ[{4\.%0$2$يږL͇ %ttDO.bR q(MCbR> ,,,,zvՍɌb؈V:FKTMN.Cb q7[YXAeHGGG zv?l6+bTв۾Gs\K^j[\bˊY7ט7OՉ"\lh{jlʐơP([ݕh!=C >峰$ {9aG(o!R(tZ̺63gDuS٧n.܅t1"Ίׯu $N'h"kqt^zm'kHsm4]c8p5'ǎ%aiDXbh`"hEf Xh,QZ@$LncQA" 2,3-Ė8 Ė8 1ՊllDA"[ Q {Lɿ|Y5u[nlYmz>#:N9mZ@#q^WŹAhbX,1%Q~q|;I7]qA ae@D! >̱!<3Y pl S#U e½ze]DHѷK 1!!,%ԓf[IT!oXU =.b[|rz##8A]WЂ }kB^F׆D bnQcs ı]e h :& x5)@u[ n1syrCWzCGي$ڶ|Nysrb!.E qBw NkJJaAEir;eYEp($?%B~3vw$ :F>Fu۬Z0Lۅyno1̖pX lE\ωV EEyn6w Q K 0P钕! $v۾C#F[2$f;fby\%fKi0΅]p |LOG { a}c^5*:r:::1fHdHd+"CSf}x#bgḆ+@\ "YvVtB4-Fii#Xda!&qXvHY/#Vg= 4FzX8a6PZ^X>.%ukBX{ N$8((7F^cuc>[=c![1=- :u2+i8^'WTڭ@q\!~uA+^H,bڽP)Do(yȌaKb )$MHL$]։&1DH\M7Mdl!CMGh:iO݂D{΋縰 QHm[aHq29n~Hl eeM*$j"2G?/.,GiV w+PTv@ʝ[D= 1J-, J\:5rMlucA$$fӟ.$'ISV2#} ,'O8΁xs6@6Ʊà4 L1ť}܀aЀ\K1i޼dB":3Qm\e`3 WNhk8dH,אCP;N=с.igӓ*b5]ӉR.Hc|ћ*HD[n>s9lYVPnuVogcSce;8j'|z2lQՍS_ ȲM$>6|ůMc+u?n֢r1^AJǡ|`Xbc\E/a_>G6OnƤɉDx$/T :Ĭ73;$ڽgKDڌ=1nI"\=S$n\tmw_O bVF5R-Hb K`A^OmX+ƀ6s=OEd sA p= xYKd'0Y;~,CxݥnC"b 1߇}rѢEqD2C]rt StyޠtJP II#*:()^qtXKn"4(K%UeaLHLTt-Dc$ݨ)HĎYS3pEqnmoϗgC&3\reȥQTqDj0V9bFwh# x߆ز’E?mEC Ú+\2#0Q05 !>Ax!.ELh1AG&W"~XHgP (M%uPz, D-~"9Y./n,;JlZS 8o{[/2p.ECoB,s8nD@b\2XM$- miR$gb~F+@ր ;(/Eb?Qx:' JePGrw 4aHL!$~-xJtc6%pP[z\QfHHx9JLQ4.%#Z愰"/6rnaCb<+k,m,1[憳%e eQgV"[zڕWX@XGGC"{h7^z(EA1R9VDMSA{J%7#`Y8\JBʐH0q0H,WX'¹ЂDtU|۶e`Ks) x *E^.’AP:F|8UY ńZ a&%b3Ӿ1q $jq ܓHd j0|* H[$jh+ de`XE5$! \7?Cb.y/8_^-eNSg Bn}4ty5߆۾`A /Ju >^2Z%[rrֺu<&ǜsΖ?tCiDS]S|jKYȈ6k0"c:xKzz o1{Mh9sN2U8WXS7e: ”x@"bu bݨi,Q4(A"-y{ 3 1nNx$^iqF$ZV\M@8b"P&$jZ۟KXt" .xHDY$Ba)DBFG^XΙ V‡i^L)&S@d:%+#+5HB;]K<-R̒@ DUF/dԚ๘ #1F}m}4><ѸkmH4v@ ftO47ɓ#uI&Jc׫Wt%~Hu=Jvl#NB~!H3C/Cߕ Z>Ax0L}L[#'sxu5pOwy8^W`r CC,,|Cu6M0”V]@G T>ꐙqL4,X$j%j7c@4?wl+d~'fc<%=#Sw"+~J(E({cWuIrvӴ2>ގHKmI)d Ȁ`(㍩jV"EAXNxQO%^Mx A-2N{Jѵ:hZ1H:u=\Oͪh&‡ɆDStfm&0k-f,めo==# /ӒXdR|Ni+ fh G%Ja_gz~E=t7p$ '7Wd<Sυuǯ7^:=gdt$JU)Ěvkb7CbqvGWf:$Z'1Qkݜ;F5$a;(Ț:!#$jeu,8lSWzWE JnpMt&"=u4_d 0*QAɷm۶A"jKIHXSPuxi0:y9`@?*E/V(Gcq"/*@q;8$MM BG dUȃ%b-Y_+c\Eiz/}0\~-^Ib]/3VͤAv3t*lֳ;!(eD H׳z"ڜ&Yu;^7( XL/^2p+B]tz#"[d ݠRU'Ff~U"9%1,DKJ&61 )X@1̬W*I]!u ɜ"E+](~]Ofܱm MkL瘹ͱ.J 8\N#l}D|er`2SqLU( x/_ kyxnOֹ<'$yz<9Tq$Ʌ{zOQ+c|J SxՂ7%@Y:i+ިH]mlcu[0*iDXQ$lfo*jdg*ˊt^pBݺf$=עun۲Gm$=S22Ir17-)׫e 'u1HNHDrfLF^F;]4 {„DNLYHP!%HIJЊO-X˲waaScJ#YB'2'DADDB"'0$2$B*$b/|,1UZceSx9ŨWw Q!!1x'0$2$R k^h9o`xSCjJx|C<^1CqDD'0$2$2$HNE%ys dX?QлWRۍNA'.F AXKRϾ8m9u䧎PcB%g$8̟ʮNȐȐ$F\g`P^}[nS^^ΐȐJ56 QKܐkX^ir9cD҂ :/dE^/8ʊp,%2\?8~z~ OCVsY~pvk9Xm3`i8%7twg֙PМ?xߝ~ILS NLctD,c)*ZVD X{-!HxQ؄(^v x jPz ZBc[@"7W@ jg1ěobݳiNxt1z 5$ޱfk}h0~|(b^~:Y qc~ϴv.uߜ@W!'0d$F/=LYVw QyʿԾȒQYV&en\qΖNwHĠMH5F/kX)t>dUi\(H4ŢDx῏?1 ^fWV!Ck&jH4K!ÒmҝPS\,zZÝEu+\M,H DbP0qRr-⷏qR?n'Ӂw&K>x\0_R7ݣ/ nI,b|v"*T~2 Xvf;7!ѼDJu^sFdB~ /ȘnN‹snOe(%;x  7,y8a3-f Zp:%.3gĔz G܆>O9ħ2sxLjL}>!quFDLL 8 :@ 'H`}s[vup>NIA hz0²A2AQb(6p /j0  b D!c<D% %ʴOVN@Vf$Xq1Shndq-ؖt rעt!D7s=>7"$4YID-0$Ht%3CXcPs5oOT\?3V*UA,, , D׽IӠۈq2$2$YS;!HD!`HNN,++ru뮻NXBfeeh.~NbwQ," 2$0$?"TGչ# eHdH8p!ϲ+RKepplxKY,o7ԭ梽_+ OE!Q\ݲ]{-^m6X2%pX )k.?ŢC^-\ԜxQkBy"FHy>wX5\~ D^|rbb)/Aǎ`{7atď+6}EGc'W[?aCbNH1=< prtőoxY'"b -4 f=::{v 7i:!qllze"C"KC]ͯue2l~zI-lmȈ~``@:tȚO ~gg;zo u*(ŠX3Vgyu^S%'l>U_̐TH Ed׏e~'xTGeUuj?׮<%Ce2+-O~cO B"hD0xně}#ghdQ m ɰY;Db'!0&/Bo:Am=ŋˢ"#g"@ \Z`XPP`͏t 7k^M Y|MuMS^Q̵OdH\BR?R=&ً BOXQy9 ~+'kAg~F# é#wcܱcG7]$[ʊ-))#n޼y)?Q^(Ffs C}_@,-=xW|yPwqz(Q%ɐF7rӫOWnzMZ˶Nߐ(S܉F+&[K%'|rOSIx}VzkyV)]I+ .;DpȔtԁM7UZ0aiR 9FKeeeTn]-<ȥHVz|Dӂu"h4$ja\y}&>eH8 iG܏ؽ*$MS-6M Q.Vr7+-$@!kTB o, ԍA0--w ?}, _{c<ЮM>HL6a[>a(j+",&IM!V 3 ~+L.3 h` ɐwH6p~7} qưɄDD!PDuzkY!!!1 r}3䗾%{uW+ַ;sN>m:VeBHf1$SWjDzH,o>S-ʍǥn:.;.RO{NOmzF'[Ͻ+|M[ߔerYJl:dW?d7=V0Ő؎aUmL7K$ 7M.HD,!" f,avݻw^+#IycncM>//iz@yK6IUiqY؏3!H$08،mAND1"ggiA 4k:}.yWYivB mH,/Ⓕ-# jol'w?{tJY~S\!@QM/{X0$w;,+9>rpA","8k=dՃ(ͣ.hDDDD$nyaǗl|R餟jo#r㞣@?*o/\cLAⓖ^bz' g_@bGcUJ4(-ޯ-HD2v1qÙtStvD8meE0yaHdH {r T˧.PiΪ/d2n+򑧦wbyZ#?#{~A><&oxJg۞"PU/R=32$ 3Sfr7 <1ڗѐm",o)2`EaqDD, rEQp'lPPdS7|Mդr{^'@*_?OA@lKnUؤ@Tզ\:a`HN[hѢlYY+N7JcuMD4#0kz͎|nyNX!YtI{2~4эb0yN+PۜNObY,Bϐh&@tӋ-U^8 Wm{I~mo^?{ӡW{E ,:&='d]H ⓲yU&VpC{'^bUvA(jm¶1y_/zt<.aCb~LReZG UHDW"D 6&5ġ!JIw-+|MC }z~XCsGS@$aaHL|jKOlx% K7yT##9yݎ(u -/Q`82G/uKo{|.jSAǮ}~ĺ:+ i|hIq,)vT]4B,ĸ/ij.Ŀxk,x"hA'#4$"\C%v=c'CbN<[A",؞:SyY'Zڅa(}UTz;V$>dñȠxT G_,uwѡ8,)D;Txu| WO)ѨC)@|[ۺy$ݬ N>9J~^>!=YH;ˌVL73$&_(I;kg]#/|;M-'8|4ᖛ>ˉ+,@"NI5^A^O+PNu-GK~h|[屮mCbɛ»LR ')mWJb|$_eEEg;$6@׼(ZLDuvV/yw(++E(Ɨ w:sΖ?~5u!ōJ$l*z?zME#Ewh|io%хӊ +c@) w++˫o%$W1x2WdW5QϔPyWΐVb%4Ys&E(m!JD^l5YM>c>T=duIXtanl`7tpH[ zUrm_E,K2nܻ}wwx?Y"ymQ;ZdG>`_!'~<=X ^xr0ʿCg&kh//fV1@%c?8i No!N!J)9cg|Rl3m]Ϭ+};u8 !dUԮ1r=avEt|ȲXxQJr:*(nZ}Dl7SFÏZqypa =@V ׂE @5 `˗~b8r7}:Θ ºp _X:mۂv|ץA&q<۾Wܗ 9ˉeviVX&Yp8F;6<17,,Ii|aw`Ftn"rFeuDrL+YG)0Y(-du)$"A˂H7[X0P5:C9x!L yΛ?~рB V>'HDԄ!%\6(`9n;$u{LG4*l"c!1{ѢENɰU *^HT8H4A,H09A"⭜QeZ|cD kHqe>~DuCU8%DZdVxs.c4a11tH7xBf1NOͳ̩єwĦaK)չ)n$TJ#eZa9oEdul!XVǷ?_4\9}?M`dضXZV駟0vܨoESҁnA"L4p^pݚ~z{ n1Nُ,& 求x ­G?& Pbwn;yi ێxV0(e:z=q K8".Fvz dq("7rGc8TGc.B!^]]VDz?Σ3VǑ'%aˢ8= Oy , ,K'Uc ׶Kw KDeejHm t]caA7HDƲ!@%Z:LjD0<,L r7kEd!`=b Fi&͊8~rKj/ Qq-(]GӺ w]IKۋEJb/+>#pNt?MQ}qoWk#-'ou!Tm~ M׼a{KC@bSB(:((aI DȂ܀D@ %lP+l:~2$b]YcԐ/z嚉IXJt{ժd:2BbVb`dH$#q%qx(1q: DH d-Ad@.9&WNV)blI 'El>rA<Y;d,?I>אzWo4(jwz=-~*ɓbę'!zMؾgG⬧ɒ9L!nxfah h$8 Hмo.wU >S6!1Q0 T B>LZ3pyZ.\sf! )HLQx#u,YE)t @HՀ%pݲ•|uUqRD$X#1&Cm;l05)CXC khP)ە#0O8Dֻ~#6%8!ȎٶqP{;e" oOQ}{8Tr$Uyô-yOubF'H<%ՎA(&@2Cb< K^(h*JWݺUHb9]nlN}N;~zFX'_NX- 1ȅ[OpC!2NdNUu]ׇ$7>$kc{@'HdõC:Lmn[ iBb΀J$} x'_E߉[+V"گ% 'x bT"?v֙-R^ȘDPj&xAa! eB3"R$<]n nGq;4yt W˪D(ƮG•." CbFkjj]cum cYEYR ` ) ы 6#O$և?p6476 Q[Fw%d=8k/8d-mԙ/Qo+Ul'8~muD>bSMnC"2Sѥ-nv]B)8Pt( aqB"bQXrkR&;{&(\cYjoIu;dBbQ~$^t,BLtcYIME'Npe@" _ ٲTr-yA7( g`qҍ )9e/,]Fy(ׯOCr|].۰8O6N!^ġ +ؘ+eVVL^+'''g9xeEM?)ķԫ1Q4GÊYRfb)~}h8<`WCcT(y$EtRWgamOp.`ҡr#z7SQBZum^o:?T[wTYK2CRcawDXlVMG}bz](0^$}1* 5l۶UkFv.^Xp 3;HD2 wvw3KwQ

xwY~?+؝ٙe}<<2tRkצ~&FwOe򚲉DqޕK-i(u޺j%Vo&O}K3RQ^! Kn"RV[tf+M(a[㭛Xx[LiӮԬ^5w;r>DC$iwP {1.i,H|7K* _~{šn޼iZ/^677ls_ykww"QƗ/_N6p_zv ]Jp@@)>˺^&&"zD}? A$>#7|/}}ڹ!Tg5,m:..<9w!J"aUvl_2Du!Қ,} }Aq.wZ69"!Zѯ"jX&amPXta$Dښ777H! 1;DvO#=􌏏[gϞJ "ѶXBb)j9Ea |>ZDB4n7ĈSZqVC-Śt"]$8U6wxD^*F$ƍc·t;[{\Dz)d$P ڕ"b_ά߫chV?Xpch4jG !> O[B"*F͠P ?M$:E[DilC$lO0PF jZތ Zpwsĕ]9ny(G$|gC;_Z$j눼n6W&ōs.8Z$v{{J^kwF;:ےq5ý> zr"qY P *R$BB''&=E"DSK{u8%~m۽f3 O?m FQ `X1Kއ"ue_b E")H,%n-H6mkK,,K󎼅Q4u` چl?flOy6sgҖP/.jQkD8kK>CJI7Z$(:gʒΰ$4XHl1K諩^Nt[E"\pC@§RDn .gm-\]]lP;cs"("ї#eTPd_ \PgHRM=<` A[: 4Ј\r`:Xvz{vትHg|)wEދr>8 { 8^r.QCpkߥWDu{ 4ǕfX `ɃE>vX "QAkupjp=cnmQZɼ)]3BFLE".j\w Qx8r3ߣk$b- J `t&Ά*H@A>g4)pmT6d _]"YʐDE$Έ[t}˼$8EbYp}ߠHɢϚ乀cuhQMo^,EIb^ HSR|#ѠB:]KF^E8.lH~R$F+ߦS[ n#-g)sD|T*UcR$zra_x ;,EQrT'1O9\a\\Re,2yނ[2Jɝr\"qll,luD$F>,r>[oee`ǻqㆽ?uETz1rY):FeEށ+ubk;sX͚bԥ -,WTkK]/7-;GC-^zob.Qo||ܮɌ{ P毾j,؆c8˚HXQO@c_xu(ʞH$bY+>HrG$.t[?h[f':Ĝ&3b.HD>iFy=ͳ>k?>#!"5f^B́ة<{"W6oh-&DbP!*7m[ep߳rĘ@.kb+}6B ܜx wHhwLƏ@SSS "1$=~Yo0 6~]'(d5R,M=omVnɺ7޸0-ܹY{M$^zjjj?c5Dtaq/saV.vtG""-P(\x1>l7Eb#\,U9[?`0EbD,JPIc; ȶZ}|Nf@Fuy}N-7wJa|з"t\-׮]AD$u+R5p#bߺu+o `CC /؟(H$bߓ'Of,ߙ~"`#[D0wp33.E"!{.;bY nQI=mR(VAt3טOיBH|Lg8n޼ynOTXvZAަΘ3Z?{׽Wp&_, S8@kq撈̂gX'~o~%;zH%݊KvޢfrrUqU5OGĕEьIYqorbG|WRɄ [ڭᆴk>} @["% `M0J8Z+ ͧyn\@{7HWG07ά خszX,Ξ Rڞ4 .k}"ѮmU\JWg y%" E?u葟/>5*c7"]#$19̋\!!pWdjr|{{51׾>Wl`k <; !ĉED@yd!<\80jZ?9k'y̅HR>$ʄxTCSssɡH$6a]VDV:9t,ṈxAߢN&[wf.jC)n +b;oall,<111Ğ@X,6DbjeJaXPwS'Rߧ@sA{n[<q*Uz:D՘_RJ<F}&+1f R,49r=tN˯?P;/sSQ[>~@DʂjߪR .6&p5'kP"q9Ht3jZ@j}L\ Vb1Mn|G*i2h }}XCZ ~~%kWP+"Tׯ7_;N<0cT3qն99b5?1aQ2\Xg_y;G޺zE?b+ACExήnj!b= %&A$v).}Sd-{h+˕j[M>ALWE"r 1'Ֆ7` Z'H aaO@Rl{"dWHMf:d>0֠J"7/O4~m9S="!?>0֪6{񖸍x5'l+hR2v bKȁr{BA'D"WL#LCyD% # M5y3 5r,H,E$H8$R+{HHUĠDBo%{E,.rΰ2q\#=5k_o!,B*8pG)Kl]J٭zq*)1KjW$<"!Z ͦZ9v}-]U|z ? {$e )\sHHAu]ER▞ uvˌԊN[O!\K]˄xR 59hЬm~dorxIna39IKLIG$$YʾO=_>3}7ǟ٪w@m|}}[Ͼ=~>s[:5-(ɀ9qst[6Z} JJo*) !8Țż_vJU&['BHܓݪ-`egwQՖE v?!R.v fk$fB!B]\Rb`ʗD -@!]U}m];▝mĝc||VB!_t [ ^5jֱiwlA".).)Ri!BG<6I$]ސ(>쑵MK ZE|YD B!ĭ±NQY'"񊸯ą5&ޢ kB!B!B!?~3o6?IENDB`grpc-1.30.2/doc/internationalization.md000066400000000000000000000037321370425124100200700ustar00rootroot00000000000000gRPC Internationalization ========================= As a universal RPC framework, gRPC needs to be fully usable within/across different international environments. This document describes gRPC API and behavior specifics when used in a non-english environment. ## API Concepts While some API elements need to be able to represent non-english content, some are intentionally left as ASCII-only for simplicity & performance reasons. ### Method name (in RPC Invocation) Method names are ASCII-only and may only contain characters allowed by HTTP/2 text header values. That should not be very limiting as most gRPC services will use protobuf which only allows method names from an even more restricted ASCII subset. Also, handling method names is a very hot code path so any additional encoding/decoding step is to be avoided. Recommended representation in language-specific APIs: string type. ### Host name (in RPC Invocation) Host names are punycode encoded, but the user is responsible for providing the punycode-encoded string if she wishes to use an internationalized host name. Recommended representation in language-specific APIs: string/unicode string. NOTE: overriding host name when invoking RPCs is only supported by C-core based gRPC implementations. ### Status detail/message (accompanies RPC status code) Status messages are expected to contain national-alphabet characters. Allowed values are unicode strings (content will be percent-encoded on the wire). Recommended representation in language-specific APIs: unicode string. ### Metadata key Allowed values are defined by HTTP/2 standard (metadata keys are represented as HTTP/2 header/trailer names). Recommended representation in language-specific APIs: string. ### Metadata value (text-valued metadata) Allowed values are defined by HTTP/2 standard (metadata values are represented as HTTP/2 header/trailer text values). Recommended representation in language-specific APIs: string. ### Channel target (in channel creation) TBD grpc-1.30.2/doc/interop-test-descriptions.md000077500000000000000000001033161370425124100207660ustar00rootroot00000000000000Interoperability Test Case Descriptions ======================================= Client and server use [test.proto](../src/proto/grpc/testing/test.proto) and the [gRPC over HTTP/2 v2 protocol](./PROTOCOL-HTTP2.md). Client ------ Clients implement test cases that test certain functionally. Each client is provided the test case it is expected to run as a command-line parameter. Names should be lowercase and without spaces. Clients should accept these arguments: * --server_host=HOSTNAME * The server host to connect to. For example, "localhost" or "127.0.0.1" * --server_host_override=HOSTNAME * The server host to claim to be connecting to, for use in TLS and HTTP/2 :authority header. If unspecified, the value of --server_host will be used * --server_port=PORT * The server port to connect to. For example, "8080" * --test_case=TESTCASE * The name of the test case to execute. For example, "empty_unary" * --use_tls=BOOLEAN * Whether to use a plaintext or encrypted connection * --use_test_ca=BOOLEAN * Whether to replace platform root CAs with [ca.pem](https://github.com/grpc/grpc/blob/master/src/core/tsi/test_creds/ca.pem) as the CA root * --default_service_account=ACCOUNT_EMAIL * Email of the GCE default service account. * --oauth_scope=SCOPE * OAuth scope. For example, "https://www.googleapis.com/auth/xapi.zoo" * --service_account_key_file=PATH * The path to the service account JSON key file generated from GCE developer console. Clients must support TLS with ALPN. Clients must not disable certificate checking. ### empty_unary This test verifies that implementations support zero-size messages. Ideally, client implementations would verify that the request and response were zero bytes serialized, but this is generally prohibitive to perform, so is not required. Server features: * [EmptyCall][] Procedure: 1. Client calls EmptyCall with the default Empty message Client asserts: * call was successful * response is non-null *It may be possible to use UnaryCall instead of EmptyCall, but it is harder to ensure that the proto serialized to zero bytes.* ### cacheable_unary This test verifies that gRPC requests marked as cacheable use GET verb instead of POST, and that server sets appropriate cache control headers for the response to be cached by a proxy. This test requires that the server is behind a caching proxy. Use of current timestamp in the request prevents accidental cache matches left over from previous tests. Server features: * [CacheableUnaryCall][] Procedure: 1. Client calls CacheableUnaryCall with `SimpleRequest` request with payload set to current timestamp. Timestamp format is irrelevant, and resolution is in nanoseconds. Client adds a `x-user-ip` header with value `1.2.3.4` to the request. This is done since some proxys such as GFE will not cache requests from localhost. Client marks the request as cacheable by setting the cacheable flag in the request context. Longer term this should be driven by the method option specified in the proto file itself. 2. Client calls CacheableUnaryCall again immediately with the same request and configuration as the previous call. Client asserts: * Both calls were successful * The payload body of both responses is the same. ### large_unary This test verifies unary calls succeed in sending messages, and touches on flow control (even if compression is enabled on the channel). Server features: * [UnaryCall][] Procedure: 1. Client calls UnaryCall with: ``` { response_size: 314159 payload:{ body: 271828 bytes of zeros } } ``` Client asserts: * call was successful * response payload body is 314159 bytes in size * clients are free to assert that the response payload body contents are zero and comparing the entire response message against a golden response ### client_compressed_unary This test verifies the client can compress unary messages by sending two unary calls, for compressed and uncompressed payloads. It also sends an initial probing request to verify whether the server supports the [CompressedRequest][] feature by checking if the probing call fails with an `INVALID_ARGUMENT` status. Server features: * [UnaryCall][] * [CompressedRequest][] Procedure: 1. Client calls UnaryCall with the feature probe, an *uncompressed* message: ``` { expect_compressed:{ value: true } response_size: 314159 payload:{ body: 271828 bytes of zeros } } ``` 1. Client calls UnaryCall with the *compressed* message: ``` { expect_compressed:{ value: true } response_size: 314159 payload:{ body: 271828 bytes of zeros } } ``` 1. Client calls UnaryCall with the *uncompressed* message: ``` { expect_compressed:{ value: false } response_size: 314159 payload:{ body: 271828 bytes of zeros } } ``` Client asserts: * First call failed with `INVALID_ARGUMENT` status. * Subsequent calls were successful. * Response payload body is 314159 bytes in size. * Clients are free to assert that the response payload body contents are zeros and comparing the entire response message against a golden response. ### server_compressed_unary This test verifies the server can compress unary messages. It sends two unary requests, expecting the server's response to be compressed or not according to the `response_compressed` boolean. Whether compression was actually performed is determined by the compression bit in the response's message flags. *Note that some languages may not have access to the message flags, in which case the client will be unable to verify that the `response_compressed` boolean is obeyed by the server*. Server features: * [UnaryCall][] * [CompressedResponse][] Procedure: 1. Client calls UnaryCall with `SimpleRequest`: ``` { response_compressed:{ value: true } response_size: 314159 payload:{ body: 271828 bytes of zeros } } ``` ``` { response_compressed:{ value: false } response_size: 314159 payload:{ body: 271828 bytes of zeros } } ``` Client asserts: * call was successful * if supported by the implementation, when `response_compressed` is true, the response MUST have the compressed message flag set. * if supported by the implementation, when `response_compressed` is false, the response MUST NOT have the compressed message flag set. * response payload body is 314159 bytes in size in both cases. * clients are free to assert that the response payload body contents are zero and comparing the entire response message against a golden response ### client_streaming This test verifies that client-only streaming succeeds. Server features: * [StreamingInputCall][] Procedure: 1. Client calls StreamingInputCall 2. Client sends: ``` { payload:{ body: 27182 bytes of zeros } } ``` 3. Client then sends: ``` { payload:{ body: 8 bytes of zeros } } ``` 4. Client then sends: ``` { payload:{ body: 1828 bytes of zeros } } ``` 5. Client then sends: ``` { payload:{ body: 45904 bytes of zeros } } ``` 6. Client half-closes Client asserts: * call was successful * response aggregated_payload_size is 74922 ### client_compressed_streaming This test verifies the client can compress requests on per-message basis by performing a two-request streaming call. It also sends an initial probing request to verify whether the server supports the [CompressedRequest][] feature by checking if the probing call fails with an `INVALID_ARGUMENT` status. Procedure: 1. Client calls `StreamingInputCall` and sends the following feature-probing *uncompressed* `StreamingInputCallRequest` message ``` { expect_compressed:{ value: true } payload:{ body: 27182 bytes of zeros } } ``` If the call does not fail with `INVALID_ARGUMENT`, the test fails. Otherwise, we continue. 1. Client calls `StreamingInputCall` again, sending the *compressed* message ``` { expect_compressed:{ value: true } payload:{ body: 27182 bytes of zeros } } ``` 1. And finally, the *uncompressed* message ``` { expect_compressed:{ value: false } payload:{ body: 45904 bytes of zeros } } ``` 1. Client half-closes Client asserts: * First call fails with `INVALID_ARGUMENT`. * Next calls succeeds. * Response aggregated payload size is 73086. ### server_streaming This test verifies that server-only streaming succeeds. Server features: * [StreamingOutputCall][] Procedure: 1. Client calls StreamingOutputCall with `StreamingOutputCallRequest`: ``` { response_parameters:{ size: 31415 } response_parameters:{ size: 9 } response_parameters:{ size: 2653 } response_parameters:{ size: 58979 } } ``` Client asserts: * call was successful * exactly four responses * response payload bodies are sized (in order): 31415, 9, 2653, 58979 * clients are free to assert that the response payload body contents are zero and comparing the entire response messages against golden responses ### server_compressed_streaming This test verifies that the server can compress streaming messages and disable compression on individual messages, expecting the server's response to be compressed or not according to the `response_compressed` boolean. Whether compression was actually performed is determined by the compression bit in the response's message flags. *Note that some languages may not have access to the message flags, in which case the client will be unable to verify that the `response_compressed` boolean is obeyed by the server*. Server features: * [StreamingOutputCall][] * [CompressedResponse][] Procedure: 1. Client calls StreamingOutputCall with `StreamingOutputCallRequest`: ``` { response_parameters:{ compressed: { value: true } size: 31415 } response_parameters:{ compressed: { value: false } size: 92653 } } ``` Client asserts: * call was successful * exactly two responses * if supported by the implementation, when `response_compressed` is false, the response's messages MUST NOT have the compressed message flag set. * if supported by the implementation, when `response_compressed` is true, the response's messages MUST have the compressed message flag set. * response payload bodies are sized (in order): 31415, 92653 * clients are free to assert that the response payload body contents are zero and comparing the entire response messages against golden responses ### ping_pong This test verifies that full duplex bidi is supported. Server features: * [FullDuplexCall][] Procedure: 1. Client calls FullDuplexCall with: ``` { response_parameters:{ size: 31415 } payload:{ body: 27182 bytes of zeros } } ``` 2. After getting a reply, it sends: ``` { response_parameters:{ size: 9 } payload:{ body: 8 bytes of zeros } } ``` 3. After getting a reply, it sends: ``` { response_parameters:{ size: 2653 } payload:{ body: 1828 bytes of zeros } } ``` 4. After getting a reply, it sends: ``` { response_parameters:{ size: 58979 } payload:{ body: 45904 bytes of zeros } } ``` 5. After getting a reply, client half-closes Client asserts: * call was successful * exactly four responses * response payload bodies are sized (in order): 31415, 9, 2653, 58979 * clients are free to assert that the response payload body contents are zero and comparing the entire response messages against golden responses ### empty_stream This test verifies that streams support having zero-messages in both directions. Server features: * [FullDuplexCall][] Procedure: 1. Client calls FullDuplexCall and then half-closes Client asserts: * call was successful * exactly zero responses ### compute_engine_creds This test is only for cloud-to-prod path. This test verifies unary calls succeed in sending messages while using Service Credentials from GCE metadata server. The client instance needs to be created with desired oauth scope. The test uses `--default_service_account` with GCE service account email and `--oauth_scope` with the OAuth scope to use. For testing against grpc-test.sandbox.googleapis.com, "https://www.googleapis.com/auth/xapi.zoo" should be passed in as `--oauth_scope`. Server features: * [UnaryCall][] * [Echo Authenticated Username][] * [Echo OAuth Scope][] Procedure: 1. Client configures channel to use GCECredentials 2. Client calls UnaryCall on the channel with: ``` { response_size: 314159 payload:{ body: 271828 bytes of zeros } fill_username: true fill_oauth_scope: true } ``` Client asserts: * call was successful * received SimpleResponse.username equals the value of `--default_service_account` flag * received SimpleResponse.oauth_scope is in `--oauth_scope` * response payload body is 314159 bytes in size * clients are free to assert that the response payload body contents are zero and comparing the entire response message against a golden response ### jwt_token_creds This test is only for cloud-to-prod path. This test verifies unary calls succeed in sending messages while using JWT token (created by the project's key file) Test caller should set flag `--service_account_key_file` with the path to json key file downloaded from https://console.developers.google.com. Alternately, if using a usable auth implementation, she may specify the file location in the environment variable GOOGLE_APPLICATION_CREDENTIALS. Server features: * [UnaryCall][] * [Echo Authenticated Username][] * [Echo OAuth Scope][] Procedure: 1. Client configures the channel to use JWTTokenCredentials 2. Client calls UnaryCall with: ``` { response_size: 314159 payload:{ body: 271828 bytes of zeros } fill_username: true } ``` Client asserts: * call was successful * received SimpleResponse.username is not empty and is in the json key file used by the auth library. The client can optionally check the username matches the email address in the key file or equals the value of `--default_service_account` flag. * response payload body is 314159 bytes in size * clients are free to assert that the response payload body contents are zero and comparing the entire response message against a golden response ### oauth2_auth_token This test is only for cloud-to-prod path and some implementations may run in GCE only. This test verifies unary calls succeed in sending messages using an OAuth2 token that is obtained out of band. For the purpose of the test, the OAuth2 token is actually obtained from a service account credentials or GCE credentials via the language-specific authorization library. The difference between this test and the other auth tests is that it first uses the authorization library to obtain an authorization token. The test - uses the flag `--service_account_key_file` with the path to a json key file downloaded from https://console.developers.google.com. Alternately, if using a usable auth implementation, it may specify the file location in the environment variable GOOGLE_APPLICATION_CREDENTIALS, *OR* if GCE credentials is used to fetch the token, `--default_service_account` can be used to pass in GCE service account email. - uses the flag `--oauth_scope` for the oauth scope. For testing against grpc-test.sandbox.googleapis.com, "https://www.googleapis.com/auth/xapi.zoo" should be passed as the `--oauth_scope`. Server features: * [UnaryCall][] * [Echo Authenticated Username][] * [Echo OAuth Scope][] Procedure: 1. Client uses the auth library to obtain an authorization token 2. Client configures the channel to use AccessTokenCredentials with the access token obtained in step 1 3. Client calls UnaryCall with the following message ``` { fill_username: true fill_oauth_scope: true } ``` Client asserts: * call was successful * received SimpleResponse.username is valid. Depending on whether a service account key file or GCE credentials was used, client should check against the json key file or GCE default service account email. * received SimpleResponse.oauth_scope is in `--oauth_scope` ### per_rpc_creds Similar to the other auth tests, this test is only for cloud-to-prod path. This test verifies unary calls succeed in sending messages using a JWT or a service account credentials set on the RPC. The test - uses the flag `--service_account_key_file` with the path to a json key file downloaded from https://console.developers.google.com. Alternately, if using a usable auth implementation, it may specify the file location in the environment variable GOOGLE_APPLICATION_CREDENTIALS - optionally uses the flag `--oauth_scope` for the oauth scope if implementer wishes to use service account credential instead of JWT credential. For testing against grpc-test.sandbox.googleapis.com, oauth scope "https://www.googleapis.com/auth/xapi.zoo" should be used. Server features: * [UnaryCall][] * [Echo Authenticated Username][] * [Echo OAuth Scope][] Procedure: 1. Client configures the channel with just SSL credentials 2. Client calls UnaryCall, setting per-call credentials to JWTTokenCredentials. The request is the following message ``` { fill_username: true } ``` Client asserts: * call was successful * received SimpleResponse.username is not empty and is in the json key file used by the auth library. The client can optionally check the username matches the email address in the key file. ### google_default_credentials Similar to the other auth tests, this test should only be run against prod servers. Different from some of the other auth tests however, this test may be also run from outside of GCP. This test verifies unary calls succeed when the client uses GoogleDefaultCredentials. The path to a service account key file in the GOOGLE_APPLICATION_CREDENTIALS environment variable may or may not be provided by the test runner. For example, the test runner might set this environment when outside of GCP but keep it unset when on GCP. The test uses `--default_service_account` with GCE service account email. Server features: * [UnaryCall][] * [Echo Authenticated Username][] Procedure: 1. Client configures the channel to use GoogleDefaultCredentials * Note: the term `GoogleDefaultCredentials` within the context of this test description refers to an API which encapsulates both "transport credentials" and "call credentials" and which is capable of transport creds auto-selection (including ALTS). Similar APIs involving only auto-selection of OAuth mechanisms might work for this test but aren't the intended subjects. 2. Client calls UnaryCall with: ``` { fill_username: true } ``` Client asserts: * call was successful * received SimpleResponse.username matches the value of `--default_service_account` ### compute_engine_channel_credentials Similar to the other auth tests, this test should only be run against prod servers. Note that this test may only be ran on GCP. This test verifies unary calls succeed when the client uses ComputeEngineChannelCredentials. All that is needed by the test environment is for the client to be running on GCP. The test uses `--default_service_account` with GCE service account email. This email must identify the default service account of the GCP VM that the test is running on. Server features: * [UnaryCall][] * [Echo Authenticated Username][] Procedure: 1. Client configures the channel to use ComputeEngineChannelCredentials * Note: the term `ComputeEngineChannelCredentials` within the context of this test description refers to an API which encapsulates both "transport credentials" and "call credentials" and which is capable of transport creds auto-selection (including ALTS). The exact name of the API may vary per language. 2. Client calls UnaryCall with: ``` { fill_username: true } ``` Client asserts: * call was successful * received SimpleResponse.username matches the value of `--default_service_account` ### custom_metadata This test verifies that custom metadata in either binary or ascii format can be sent as initial-metadata by the client and as both initial- and trailing-metadata by the server. Server features: * [UnaryCall][] * [FullDuplexCall][] * [Echo Metadata][] Procedure: 1. The client attaches custom metadata with the following keys and values: ``` key: "x-grpc-test-echo-initial", value: "test_initial_metadata_value" key: "x-grpc-test-echo-trailing-bin", value: 0xababab ``` to a UnaryCall with request: ``` { response_size: 314159 payload:{ body: 271828 bytes of zeros } } ``` 2. The client attaches custom metadata with the following keys and values: ``` key: "x-grpc-test-echo-initial", value: "test_initial_metadata_value" key: "x-grpc-test-echo-trailing-bin", value: 0xababab ``` to a FullDuplexCall with request: ``` { response_parameters:{ size: 314159 } payload:{ body: 271828 bytes of zeros } } ``` and then half-closes Client asserts: * call was successful * metadata with key `"x-grpc-test-echo-initial"` and value `"test_initial_metadata_value"`is received in the initial metadata for calls in Procedure steps 1 and 2. * metadata with key `"x-grpc-test-echo-trailing-bin"` and value `0xababab` is received in the trailing metadata for calls in Procedure steps 1 and 2. ### status_code_and_message This test verifies unary calls succeed in sending messages, and propagate back status code and message sent along with the messages. Server features: * [UnaryCall][] * [FullDuplexCall][] * [Echo Status][] Procedure: 1. Client calls UnaryCall with: ``` { response_status:{ code: 2 message: "test status message" } } ``` 2. Client calls FullDuplexCall with: ``` { response_status:{ code: 2 message: "test status message" } } ``` and then half-closes Client asserts: * received status code is the same as the sent code for both Procedure steps 1 and 2 * received status message is the same as the sent message for both Procedure steps 1 and 2 ### special_status_message This test verifies Unicode and whitespace is correctly processed in status message. "\t" is horizontal tab. "\r" is carriage return. "\n" is line feed. Server features: * [UnaryCall][] * [Echo Status][] Procedure: 1. Client calls UnaryCall with: ``` { response_status:{ code: 2 message: "\t\ntest with whitespace\r\nand Unicode BMP ☺ and non-BMP 😈\t\n" } } ``` Client asserts: * received status code is the same as the sent code for Procedure step 1 * received status message is the same as the sent message for Procedure step 1, including all whitespace characters ### unimplemented_method This test verifies that calling an unimplemented RPC method returns the UNIMPLEMENTED status code. Server features: N/A Procedure: * Client calls `grpc.testing.TestService/UnimplementedCall` with an empty request (defined as `grpc.testing.Empty`): ``` { } ``` Client asserts: * received status code is 12 (UNIMPLEMENTED) ### unimplemented_service This test verifies calling an unimplemented server returns the UNIMPLEMENTED status code. Server features: N/A Procedure: * Client calls `grpc.testing.UnimplementedService/UnimplementedCall` with an empty request (defined as `grpc.testing.Empty`) Client asserts: * received status code is 12 (UNIMPLEMENTED) ### cancel_after_begin This test verifies that a request can be cancelled after metadata has been sent but before payloads are sent. Server features: * [StreamingInputCall][] Procedure: 1. Client starts StreamingInputCall 2. Client immediately cancels request Client asserts: * Call completed with status CANCELLED ### cancel_after_first_response This test verifies that a request can be cancelled after receiving a message from the server. Server features: * [FullDuplexCall][] Procedure: 1. Client starts FullDuplexCall with ``` { response_parameters:{ size: 31415 } payload:{ body: 27182 bytes of zeros } } ``` 2. After receiving a response, client cancels request Client asserts: * Call completed with status CANCELLED ### timeout_on_sleeping_server This test verifies that an RPC request whose lifetime exceeds its configured timeout value will end with the DeadlineExceeded status. Server features: * [FullDuplexCall][] Procedure: 1. Client calls FullDuplexCall with the following request and sets its timeout to 1ms ``` { payload:{ body: 27182 bytes of zeros } } ``` 2. Client waits Client asserts: * Call completed with status DEADLINE_EXCEEDED. ### concurrent_large_unary Status: TODO Client performs 1000 large_unary tests in parallel on the same channel. ### Flow control. Pushback at client for large messages (TODO: fix name) Status: TODO This test verifies that a client sending faster than a server can drain sees pushback (i.e., attempts to send succeed only after appropriate delays). ### Experimental Tests These tests are not yet standardized, and are not yet implemented in all languages. Therefore they are not part of our interop matrix. #### rpc_soak The client performs many large_unary RPCs in sequence over the same channel. The number of RPCs is configured by the experimental flag, `soak_iterations`. #### channel_soak The client performs many large_unary RPCs in sequence. Before each RPC, it tears down and rebuilds the channel. The number of RPCs is configured by the experimental flag, `soak_iterations`. This tests puts stress on several gRPC components; the resolver, the load balancer, and the RPC hotpath. #### long_lived_channel The client performs a number of large_unary RPCs over a single long-lived channel with a fixed but configurable interval between each RPC. ### TODO Tests #### High priority: Propagation of status code and message (yangg) Multiple thousand simultaneous calls on same Channel (ctiller) Metadata: client headers, server headers + trailers, binary+ascii #### Normal priority: Cancel before start (ctiller) Cancel after sent first message (ctiller) Cancel after received headers (ctiller) Timeout but completed before expire (zhaoq) Multiple thousand simultaneous calls timeout on same Channel (ctiller) #### Lower priority: Flow control. Pushback at client for large messages (abhishek) Flow control. Pushback at server for large messages (abhishek) Going over max concurrent streams doesn't fail (client controls itself) (abhishek) RPC method not implemented (yangg) Multiple thousand simultaneous calls on different Channels (ctiller) Failed TLS hostname verification (ejona?) Large amount of headers to cause CONTINUATIONs; 63K of 'X's, all in one header. #### To priorize: Start streaming RPC but don't send any requests, server responds ### Postponed Tests Resilience to buggy servers: These tests would verify that a client application isn't affected negatively by the responses put on the wire by a buggy server (e.g. the client library won't make the application crash). Reconnect after transport failure Reconnect backoff Fuzz testing Server ------ Servers implement various named features for clients to test with. Server features are orthogonal. If a server implements a feature, it is always available for clients. Names are simple descriptions for developer communication and tracking. Servers should accept these arguments: * --port=PORT * The port to listen on. For example, "8080" * --use_tls=BOOLEAN * Whether to use a plaintext or encrypted connection Servers must support TLS with ALPN. They should use [server1.pem](https://github.com/grpc/grpc/blob/master/src/core/tsi/test_creds/server1.pem) for their certificate. ### EmptyCall [EmptyCall]: #emptycall Server implements EmptyCall which immediately returns the empty message. ### UnaryCall [UnaryCall]: #unarycall Server implements UnaryCall which immediately returns a SimpleResponse with a payload body of size `SimpleRequest.response_size` bytes and type as appropriate for the `SimpleRequest.response_type`. If the server does not support the `response_type`, then it should fail the RPC with `INVALID_ARGUMENT`. ### CacheableUnaryCall [CacheableUnaryCall]: #cacheableunarycall Server gets the default SimpleRequest proto as the request. The content of the request is ignored. It returns the SimpleResponse proto with the payload set to current timestamp. The timestamp is an integer representing current time with nanosecond resolution. This integer is formatted as ASCII decimal in the response. The format is not really important as long as the response payload is different for each request. In addition it adds 1. cache control headers such that the response can be cached by proxies in the response path. Server should be behind a caching proxy for this test to pass. Currently we set the max-age to 60 seconds. ### CompressedResponse [CompressedResponse]: #compressedresponse When the client sets `response_compressed` to true, the server's response is sent back compressed. Note that `response_compressed` is present on both `SimpleRequest` (unary) and `StreamingOutputCallRequest` (streaming). ### CompressedRequest [CompressedRequest]: #compressedrequest When the client sets `expect_compressed` to true, the server expects the client request to be compressed. If it's not, it fails the RPC with `INVALID_ARGUMENT`. Note that `response_compressed` is present on both `SimpleRequest` (unary) and `StreamingOutputCallRequest` (streaming). ### StreamingInputCall [StreamingInputCall]: #streaminginputcall Server implements StreamingInputCall which upon half close immediately returns a StreamingInputCallResponse where aggregated_payload_size is the sum of all request payload bodies received. ### StreamingOutputCall [StreamingOutputCall]: #streamingoutputcall Server implements StreamingOutputCall by replying, in order, with one StreamingOutputCallResponse for each ResponseParameters in StreamingOutputCallRequest. Each StreamingOutputCallResponse should have a payload body of size ResponseParameters.size bytes, as specified by its respective ResponseParameters. After sending all responses, it closes with OK. ### FullDuplexCall [FullDuplexCall]: #fullduplexcall Server implements FullDuplexCall by replying, in order, with one StreamingOutputCallResponse for each ResponseParameters in each StreamingOutputCallRequest. Each StreamingOutputCallResponse should have a payload body of size ResponseParameters.size bytes, as specified by its respective ResponseParameters. After receiving half close and sending all responses, it closes with OK. ### Echo Status [Echo Status]: #echo-status When the client sends a response_status in the request payload, the server closes the stream with the status code and message contained within said response_status. The server will not process any further messages on the stream sent by the client. This can be used by clients to verify correct handling of different status codes and associated status messages end-to-end. ### Echo Metadata [Echo Metadata]: #echo-metadata When the client sends metadata with the key `"x-grpc-test-echo-initial"` with its request, the server sends back exactly this key and the corresponding value back to the client as part of initial metadata. When the client sends metadata with the key `"x-grpc-test-echo-trailing-bin"` with its request, the server sends back exactly this key and the corresponding value back to the client as trailing metadata. ### Observe ResponseParameters.interval_us [Observe ResponseParameters.interval_us]: #observe-responseparametersinterval_us In StreamingOutputCall and FullDuplexCall, server delays sending a StreamingOutputCallResponse by the ResponseParameters' `interval_us` for that particular response, relative to the last response sent. That is, `interval_us` acts like a sleep *before* sending the response and accumulates from one response to the next. Interaction with flow control is unspecified. ### Echo Auth Information Status: Pending #### Echo Authenticated Username [Echo Authenticated Username]: #echo-authenticated-username If a SimpleRequest has fill_username=true and that request was successfully authenticated, then the SimpleResponse should have username filled with the canonical form of the authenticated source. The canonical form is dependent on the authentication method, but is likely to be a base 10 integer identifier or an email address. #### Echo OAuth scope [Echo OAuth Scope]: #echo-oauth-scope If a SimpleRequest has `fill_oauth_scope=true` and that request was successfully authenticated via OAuth, then the SimpleResponse should have oauth_scope filled with the scope of the method being invoked. Although a general server-side feature, most test servers won't implement this feature. The TLS server `grpc-test.sandbox.googleapis.com:443` supports this feature. It requires at least the OAuth scope `https://www.googleapis.com/auth/xapi.zoo` for authentication to succeed. Discussion: Ideally, this would be communicated via metadata and not in the request/response, but we want to use this test in code paths that don't yet fully communicate metadata. grpc-1.30.2/doc/keepalive.md000066400000000000000000000105111370425124100155610ustar00rootroot00000000000000# Keepalive User Guide for gRPC Core (and dependents) The keepalive ping is a way to check if a channel is currently working by sending HTTP2 pings over the transport. It is sent periodically, and if the ping is not acknowledged by the peer within a certain timeout period, the transport is disconnected. This guide documents the knobs within gRPC core to control the current behavior of the keepalive ping. The keepalive ping is controlled by two important channel arguments - * **GRPC_ARG_KEEPALIVE_TIME_MS** * This channel argument controls the period (in milliseconds) after which a keepalive ping is sent on the transport. * **GRPC_ARG_KEEPALIVE_TIMEOUT_MS** * This channel argument controls the amount of time (in milliseconds) the sender of the keepalive ping waits for an acknowledgement. If it does not receive an acknowledgment within this time, it will close the connection. The above two channel arguments should be sufficient for most users, but the following arguments can also be useful in certain use cases. * **GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS** * This channel argument if set to 1 (0 : false; 1 : true), allows keepalive pings to be sent even if there are no calls in flight. * **GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA** * This channel argument controls the maximum number of pings that can be sent when there is no data/header/window_update frame to be sent. GRPC Core will not continue sending pings if we run over the limit. Setting it to 0 allows sending pings without such a restriction. * **GRPC_ARG_HTTP2_MIN_SENT_PING_INTERVAL_WITHOUT_DATA_MS** * If there are no data/header/window_update frames being received on the transport, this channel argument controls the minimum time (in milliseconds) gRPC Core will wait between successive pings. * **GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS** * If there are no data/header/window_update frames being sent on the transport, this channel argument on the server side controls the minimum time (in milliseconds) that gRPC Core would expect between receiving successive pings. If the time between successive pings is less that than this time, then the ping will be considered a bad ping from the peer. Such a ping counts as a ‘ping strike’. On the client side, this does not have any effect. * **GRPC_ARG_HTTP2_MAX_PING_STRIKES** * This arg controls the maximum number of bad pings that the server will tolerate before sending an HTTP2 GOAWAY frame and closing the transport. Setting it to 0 allows the server to accept any number of bad pings. ### Defaults Values Channel Argument| Client|Server ----------------|-------|------ GRPC_ARG_KEEPALIVE_TIME_MS|INT_MAX (disabled)|7200000 (2 hours) GRPC_ARG_KEEPALIVE_TIMEOUT_MS|20000 (20 seconds)|20000 (20 seconds) GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS|0 (false)|0 (false) GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA|2|2 GRPC_ARG_HTTP2_MIN_SENT_PING_INTERVAL_WITHOUT_DATA_MS|300000 (5 minutes)|300000 (5 minutes) GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS|N/A|300000 (5 minutes) GRPC_ARG_HTTP2_MAX_PING_STRIKES|N/A|2 ### FAQ * When is the keepalive timer started? * The keepalive timer is started when a transport is done connecting (after handshake). * What happens when the keepalive timer fires? * When the keepalive timer fires, gRPC Core will try to send a keepalive ping on the transport. This ping can be blocked if - * there is no active call on that transport and GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS is false. * the number of pings already sent on the transport without any data has already exceeded GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA. * the time elapsed since the previous ping is less than GRPC_ARG_HTTP2_MIN_SENT_PING_INTERVAL_WITHOUT_DATA_MS. * If a keepalive ping is not blocked and is sent on the transport, then the keepalive watchdog timer is started which will close the transport if the ping is not acknowledged before it fires. * Why am I receiving a GOAWAY with error code ENHANCE_YOUR_CALM? * A server sends a GOAWAY with ENHANCE_YOUR_CALM if the client sends too many misbehaving pings. For example - * if a server has GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS set to false and the client sends pings without there being any call in flight. * if the client's GRPC_ARG_HTTP2_MIN_SENT_PING_INTERVAL_WITHOUT_DATA_MS setting is lower than the server's GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS. grpc-1.30.2/doc/load-balancing.md000066400000000000000000000155431370425124100164610ustar00rootroot00000000000000Load Balancing in gRPC ====================== # Scope This document explains the design for load balancing within gRPC. # Background ## Per-Call Load Balancing It is worth noting that load-balancing within gRPC happens on a per-call basis, not a per-connection basis. In other words, even if all requests come from a single client, we still want them to be load-balanced across all servers. ## Approaches to Load Balancing Prior to any gRPC specifics, we explore some usual ways to approach load balancing. ### Proxy Model Using a proxy provides a solid trustable client that can report load to the load balancing system. Proxies typically require more resources to operate since they have temporary copies of the RPC request and response. This model also increases latency to the RPCs. The proxy model was deemed inefficient when considering request heavy services like storage. ### Balancing-aware Client This thicker client places more of the load balancing logic in the client. For example, the client could contain many load balancing policies (Round Robin, Random, etc) used to select servers from a list. In this model, a list of servers would be either statically configured in the client, provided by the name resolution system, an external load balancer, etc. In any case, the client is responsible for choosing the preferred server from the list. One of the drawbacks of this approach is writing and maintaining the load balancing policies in multiple languages and/or versions of the clients. These policies can be fairly complicated. Some of the algorithms also require client to server communication so the client would need to get thicker to support additional RPCs to get health or load information in addition to sending RPCs for user requests. It would also significantly complicate the client's code: the new design hides the load balancing complexity of multiple layers and presents it as a simple list of servers to the client. ### External Load Balancing Service The client load balancing code is kept simple and portable, implementing well-known algorithms (e.g., Round Robin) for server selection. Complex load balancing algorithms are instead provided by the load balancer. The client relies on the load balancer to provide _load balancing configuration_ and _the list of servers_ to which the client should send requests. The balancer updates the server list as needed to balance the load as well as handle server unavailability or health issues. The load balancer will make any necessary complex decisions and inform the client. The load balancer may communicate with the backend servers to collect load and health information. # Requirements ## Simple API and client The gRPC client load balancing code must be simple and portable. The client should only contain simple algorithms (e.g., Round Robin) for server selection. For complex algorithms, the client should rely on a load balancer to provide load balancing configuration and the list of servers to which the client should send requests. The balancer will update the server list as needed to balance the load as well as handle server unavailability or health issues. The load balancer will make any necessary complex decisions and inform the client. The load balancer may communicate with the backend servers to collect load and health information. ## Security The load balancer may be separate from the actual server backends and a compromise of the load balancer should only lead to a compromise of the loadbalancing functionality. In other words, a compromised load balancer should not be able to cause a client to trust a (potentially malicious) backend server any more than in a comparable situation without loadbalancing. # Architecture ## Overview The primary mechanism for load-balancing in gRPC is external load-balancing, where an external load balancer provides simple clients with an up-to-date list of servers. The gRPC client does support an API for built-in load balancing policies. However, there are only a small number of these (one of which is the `grpclb` policy, which implements external load balancing), and users are discouraged from trying to extend gRPC by adding more. Instead, new load balancing policies should be implemented in external load balancers. ## Workflow Load-balancing policies fit into the gRPC client workflow in between name resolution and the connection to the server. Here's how it all works: ![image](images/load-balancing.png) 1. On startup, the gRPC client issues a [name resolution](naming.md) request for the server name. The name will resolve to one or more IP addresses, each of which will indicate whether it is a server address or a load balancer address, and a [service config](service_config.md) that indicates which client-side load-balancing policy to use (e.g., `round_robin` or `grpclb`). 2. The client instantiates the load balancing policy. - Note: If any one of the addresses returned by the resolver is a balancer address, then the client will use the `grpclb` policy, regardless of what load-balancing policy was requested by the service config. Otherwise, the client will use the load-balancing policy requested by the service config. If no load-balancing policy is requested by the service config, then the client will default to a policy that picks the first available server address. 3. The load balancing policy creates a subchannel to each server address. - For all policies *except* `grpclb`, this means one subchannel for each address returned by the resolver. Note that these policies ignore any balancer addresses returned by the resolver. - In the case of the `grpclb` policy, the workflow is as follows: 1. The policy opens a stream to one of the balancer addresses returned by the resolver. It asks the balancer for the server addresses to use for the server name originally requested by the client (i.e., the same one originally passed to the name resolver). - Note: In the `grpclb` policy, the non-balancer addresses returned by the resolver are used as a fallback in case no balancers can be contacted when the LB policy is started. 2. The gRPC servers to which the load balancer is directing the client may report load to the load balancers, if that information is needed by the load balancer's configuration. 3. The load balancer returns a server list to the gRPC client's `grpclb` policy. The `grpclb` policy will then create a subchannel to each of server in the list. 4. For each RPC sent, the load balancing policy decides which subchannel (i.e., which server) the RPC should be sent to. - In the case of the `grpclb` policy, the client will send requests to the servers in the order in which they were returned by the load balancer. If the server list is empty, the call will block until a non-empty one is received. grpc-1.30.2/doc/naming.md000066400000000000000000000064001370425124100150670ustar00rootroot00000000000000# gRPC Name Resolution ## Overview gRPC supports DNS as the default name-system. A number of alternative name-systems are used in various deployments. We support an API that is general enough to support a range of name-systems and the corresponding syntax for names. The gRPC client library in various languages will provide a plugin mechanism so resolvers for different name-systems can be plugged in. ## Detailed Design ### Name Syntax A fully qualified, self contained name used for gRPC channel construction uses URI syntax as defined in [RFC 3986](https://tools.ietf.org/html/rfc3986). The URI scheme indicates what resolver plugin to use. If no scheme prefix is specified or the scheme is unknown, the `dns` scheme is used by default. The URI path indicates the name to be resolved. Most gRPC implementations support the following URI schemes: - `dns:[//authority/]host[:port]` -- DNS (default) - `host` is the host to resolve via DNS. - `port` is the port to return for each address. If not specified, 443 is used (but some implementations default to 80 for insecure channels). - `authority` indicates the DNS server to use, although this is only supported by some implementations. (In C-core, the default DNS resolver does not support this, but the c-ares based resolver supports specifying this in the form "IP:port".) - `unix:path` or `unix://absolute_path` -- Unix domain sockets (Unix systems only) - `path` indicates the location of the desired socket. - In the first form, the path may be relative or absolute; in the second form, the path must be absolute (i.e., there will actually be three slashes, two prior to the path and another to begin the absolute path). The following schemes are supported by the gRPC C-core implementation, but may not be supported in other languages: - `ipv4:address[:port][,address[:port],...]` -- IPv4 addresses - Can specify multiple comma-delimited addresses of the form `address[:port]`: - `address` is the IPv4 address to use. - `port` is the port to use. If not specified, 443 is used. - `ipv6:address[:port][,address[:port],...]` -- IPv6 addresses - Can specify multiple comma-delimited addresses of the form `address[:port]`: - `address` is the IPv6 address to use. To use with a `port` the `address` must enclosed in literal square brackets (`[` and `]`). Example: `ipv6:[2607:f8b0:400e:c00::ef]:443` or `ipv6:[::]:1234` - `port` is the port to use. If not specified, 443 is used. In the future, additional schemes such as `etcd` could be added. ### Resolver Plugins The gRPC client library will use the specified scheme to pick the right resolver plugin and pass it the fully qualified name string. Resolvers should be able to contact the authority and get a resolution that they return back to the gRPC client library. The returned contents include: - A list of resolved addresses (both IP address and port). Each address may have a set of arbitrary attributes (key/value pairs) associated with it, which can be used to communicate information from the resolver to the [load balancing](load-balancing.md) policy. - A [service config](service_config.md). The plugin API allows the resolvers to continuously watch an endpoint and return updated resolutions as needed. grpc-1.30.2/doc/python/000077500000000000000000000000001370425124100146155ustar00rootroot00000000000000grpc-1.30.2/doc/python/server_reflection.md000066400000000000000000000051401370425124100206570ustar00rootroot00000000000000# gRPC Python Server Reflection This document shows how to use gRPC Server Reflection in gRPC Python. Please see [C++ Server Reflection Tutorial] for general information and more examples how to use server reflection. ## Enable server reflection in Python servers gRPC Python Server Reflection is an add-on library. To use it, first install the [grpcio-reflection] PyPI package into your project. Note that with Python you need to manually register the service descriptors with the reflection service implementation when creating a server (this isn't necessary with e.g. C++ or Java) ```python # add the following import statement to use server reflection from grpc_reflection.v1alpha import reflection # ... def serve(): server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server) # the reflection service will be aware of "Greeter" and "ServerReflection" services. SERVICE_NAMES = ( helloworld_pb2.DESCRIPTOR.services_by_name['Greeter'].full_name, reflection.SERVICE_NAME, ) reflection.enable_server_reflection(SERVICE_NAMES, server) server.add_insecure_port('[::]:50051') server.start() ``` Please see [greeter_server_with_reflection.py] in the examples directory for the full example, which extends the gRPC [Python `Greeter` example] on a reflection-enabled server. After starting the server, you can verify that the server reflection is working properly by using the [`grpc_cli` command line tool]: ```sh $ grpc_cli ls localhost:50051 ``` output: ```sh grpc.reflection.v1alpha.ServerReflection helloworld.Greeter ``` For more examples and instructions how to use the `grpc_cli` tool, please refer to the [`grpc_cli` documentation] and the [C++ Server Reflection Tutorial]. ## Additional Resources The [Server Reflection Protocol] provides detailed information about how the server reflection works and describes the server reflection protocol in detail. [C++ Server Reflection Tutorial]: ../server_reflection_tutorial.md [grpcio-reflection]: https://pypi.org/project/grpcio-reflection/ [greeter_server_with_reflection.py]: https://github.com/grpc/grpc/blob/master/examples/python/helloworld/greeter_server_with_reflection.py [Python `Greeter` example]: https://github.com/grpc/grpc/tree/master/examples/python/helloworld [`grpc_cli` command line tool]: https://github.com/grpc/grpc/blob/master/doc/command_line_tool.md [`grpc_cli` documentation]: ../command_line_tool.md [C++ Server Reflection Tutorial]: ../server_reflection_tutorial.md [Server Reflection Protocol]: ../server-reflection.md grpc-1.30.2/doc/python/sphinx/000077500000000000000000000000001370425124100161265ustar00rootroot00000000000000grpc-1.30.2/doc/python/sphinx/_static/000077500000000000000000000000001370425124100175545ustar00rootroot00000000000000grpc-1.30.2/doc/python/sphinx/_static/custom.css000066400000000000000000000000741370425124100216010ustar00rootroot00000000000000dl.field-list > dt { word-break: keep-all !important; } grpc-1.30.2/doc/python/sphinx/conf.py000066400000000000000000000070521370425124100174310ustar00rootroot00000000000000# Copyright 2018 The gRPC 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 # # 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. # -- Path setup -------------------------------------------------------------- import os import sys PYTHON_FOLDER = os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', '..', '..', 'src', 'python') sys.path.insert(0, os.path.join(PYTHON_FOLDER, 'grpcio')) sys.path.insert(0, os.path.join(PYTHON_FOLDER, 'grpcio_channelz')) sys.path.insert(0, os.path.join(PYTHON_FOLDER, 'grpcio_health_checking')) sys.path.insert(0, os.path.join(PYTHON_FOLDER, 'grpcio_reflection')) sys.path.insert(0, os.path.join(PYTHON_FOLDER, 'grpcio_status')) sys.path.insert(0, os.path.join(PYTHON_FOLDER, 'grpcio_testing')) # -- Project information ----------------------------------------------------- project = 'gRPC Python' copyright = '2020, The gRPC Authors' author = 'The gRPC Authors' # Import generated grpc_version after the path been modified import grpc_version version = '.'.join(grpc_version.VERSION.split('.')[:3]) release = grpc_version.VERSION if 'dev' in grpc_version.VERSION: branch = 'master' else: branch = 'v%s.%s.x' % tuple(grpc_version.VERSION.split('.')[:2]) # -- General configuration --------------------------------------------------- templates_path = ['_templates'] source_suffix = ['.rst', '.md'] master_doc = 'index' language = 'en' exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] pygments_style = None # --- Extensions Configuration ----------------------------------------------- extensions = [ 'sphinx.ext.autodoc', 'sphinx.ext.viewcode', 'sphinx.ext.todo', 'sphinx.ext.napoleon', 'sphinx.ext.coverage', 'sphinx.ext.autodoc.typehints', ] napoleon_google_docstring = True napoleon_numpy_docstring = True napoleon_include_special_with_doc = True autodoc_default_options = { 'members': None, } autodoc_mock_imports = [] autodoc_typehints = 'description' # -- HTML Configuration ------------------------------------------------- html_theme = 'alabaster' html_theme_options = { 'fixed_sidebar': True, 'page_width': '1140px', 'show_related': True, 'analytics_id': 'UA-60127042-1', 'description': grpc_version.VERSION, 'show_powered_by': False, } html_static_path = ["_static"] # -- Options for manual page output ------------------------------------------ man_pages = [(master_doc, 'grpcio', 'grpcio Documentation', [author], 1)] # -- Options for Texinfo output ---------------------------------------------- texinfo_documents = [ (master_doc, 'grpcio', 'grpcio Documentation', author, 'grpcio', 'One line description of project.', 'Miscellaneous'), ] # -- Options for Epub output ------------------------------------------------- epub_title = project epub_exclude_files = ['search.html'] # -- Options for todo extension ---------------------------------------------- todo_include_todos = True # -- Options for substitutions ----------------------------------------------- rst_epilog = '.. |grpc_types_link| replace:: https://github.com/grpc/grpc/blob/%s/include/grpc/impl/codegen/grpc_types.h' % branch grpc-1.30.2/doc/python/sphinx/glossary.rst000066400000000000000000000045051370425124100205270ustar00rootroot00000000000000Glossary ================ .. glossary:: metadatum A key-value pair included in the HTTP header. It is a 2-tuple where the first entry is the key and the second is the value, i.e. (key, value). The metadata key is an ASCII str, and must be a valid HTTP header name. The metadata value can be either a valid HTTP ASCII str, or bytes. If bytes are provided, the key must end with '-bin', i.e. ``('binary-metadata-bin', b'\\x00\\xFF')`` metadata A sequence of metadatum. serializer A callable function that encodes an object into bytes. Applications are allowed to provide any customized serializer, so there isn't a restriction for the input object (i.e. even ``None``). On the server-side, the serializer is invoked with server handler's return value; on the client-side, the serializer is invoked with outbound message objects. deserializer A callable function that decodes bytes into an object. Same as serializer, the returned object doesn't have restrictions (i.e. ``None`` allowed). The deserializer is invoked with inbound message bytes on both the server side and the client-side. wait_for_ready If an RPC is issued but the channel is in the TRANSIENT_FAILURE or SHUTDOWN states, the library cannot transmit the RPC at the moment. By default, the gRPC library will fail such RPCs immediately. This is known as "fail fast." RPCs will not fail as a result of the channel being in other states (CONNECTING, READY, or IDLE). When the wait_for_ready option is specified, the library will queue RPCs until the channel is READY. Any submitted RPCs may still fail before the READY state is reached for other reasons, e.g., the client channel has been shut down or the RPC's deadline has been reached. channel_arguments A list of key-value pairs to configure the underlying gRPC Core channel or server object. Channel arguments are meant for advanced usages and contain experimental API (some may not labeled as experimental). Full list of available channel arguments and documentation can be found under the "grpc_arg_keys" section of "grpc_types.h" header file (|grpc_types_link|). For example, if you want to disable TCP port reuse, you may construct channel arguments like: ``options = (('grpc.so_reuseport', 0),)``. grpc-1.30.2/doc/python/sphinx/grpc.rst000066400000000000000000000072241370425124100176200ustar00rootroot00000000000000gRPC ============= .. module:: grpc Tutorial -------- If you want to see gRPC in action first, visit the `Python Quickstart `_. Or, if you would like dive in with more extensive usage of gRPC Python, check `gRPC Basics - Python `_ out. Example ------- Go to `gRPC Python Examples `_ Module Contents --------------- Version ^^^^^^^ The version string is available as :code:`grpc.__version__`. Create Client ^^^^^^^^^^^^^ .. autofunction:: insecure_channel .. autofunction:: secure_channel .. autofunction:: intercept_channel Create Client Credentials ^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: ssl_channel_credentials .. autofunction:: metadata_call_credentials .. autofunction:: access_token_call_credentials .. autofunction:: composite_call_credentials .. autofunction:: composite_channel_credentials .. autofunction:: local_channel_credentials(local_connect_type=grpc.LocalConnectionType.LOCAL_TCP) Create Server ^^^^^^^^^^^^^ .. autofunction:: server Create Server Credentials ^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: ssl_server_credentials .. autofunction:: ssl_server_certificate_configuration .. autofunction:: dynamic_ssl_server_credentials .. autofunction:: local_server_credentials(local_connect_type=grpc.LocalConnectionType.LOCAL_TCP) Local Connection Type ^^^^^^^^^^^^^^^^^^^^^ .. autoclass:: LocalConnectionType RPC Method Handlers ^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: unary_unary_rpc_method_handler .. autofunction:: unary_stream_rpc_method_handler .. autofunction:: stream_unary_rpc_method_handler .. autofunction:: stream_stream_rpc_method_handler .. autofunction:: method_handlers_generic_handler Channel Ready Future ^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: channel_ready_future Channel Connectivity ^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autoclass:: ChannelConnectivity gRPC Status Code ^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autoclass:: StatusCode Channel Object ^^^^^^^^^^^^^^ .. autoclass:: Channel Server Object ^^^^^^^^^^^^^ .. autoclass:: Server Authentication & Authorization Objects ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autoclass:: ChannelCredentials .. autoclass:: CallCredentials .. autoclass:: AuthMetadataContext .. autoclass:: AuthMetadataPluginCallback .. autoclass:: AuthMetadataPlugin .. autoclass:: ServerCredentials .. autoclass:: ServerCertificateConfiguration gRPC Exceptions ^^^^^^^^^^^^^^^ .. autoexception:: RpcError Shared Context ^^^^^^^^^^^^^^ .. autoclass:: RpcContext Client-Side Context ^^^^^^^^^^^^^^^^^^^^^^^ .. autoclass:: Call Client-Side Interceptor ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autoclass:: ClientCallDetails .. autoclass:: UnaryUnaryClientInterceptor .. autoclass:: UnaryStreamClientInterceptor .. autoclass:: StreamUnaryClientInterceptor .. autoclass:: StreamStreamClientInterceptor Service-Side Context ^^^^^^^^^^^^^^^^^^^^ .. autoclass:: ServicerContext Service-Side Handler ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autoclass:: RpcMethodHandler .. autoclass:: HandlerCallDetails .. autoclass:: GenericRpcHandler .. autoclass:: ServiceRpcHandler Service-Side Interceptor ^^^^^^^^^^^^^^^^^^^^^^^^ .. autoclass:: ServerInterceptor Multi-Callable Interfaces ^^^^^^^^^^^^^^^^^^^^^^^^^ .. autoclass:: UnaryUnaryMultiCallable .. autoclass:: UnaryStreamMultiCallable .. autoclass:: StreamUnaryMultiCallable .. autoclass:: StreamStreamMultiCallable Future Interfaces ^^^^^^^^^^^^^^^^^ .. autoexception:: FutureTimeoutError .. autoexception:: FutureCancelledError .. autoclass:: Future Compression ^^^^^^^^^^^ .. autoclass:: Compression grpc-1.30.2/doc/python/sphinx/grpc_asyncio.rst000066400000000000000000000063051370425124100213440ustar00rootroot00000000000000gRPC AsyncIO API ================ .. module:: grpc.experimental.aio Overview -------- gRPC AsyncIO API is the **new version** of gRPC Python whose architecture is tailored to AsyncIO. Underlying, it utilizes the same C-extension, gRPC C-Core, as existing stack, and it replaces all gRPC IO operations with methods provided by the AsyncIO library. This stack currently is under active development. Feel free to offer suggestions by opening issues on our GitHub repo `grpc/grpc `_. The design doc can be found here as `gRFC `_. Caveats ------- gRPC Async API objects may only be used on the thread on which they were created. AsyncIO doesn't provide thread safety for most of its APIs. Module Contents --------------- Enable AsyncIO in gRPC ^^^^^^^^^^^^^^^^^^^^^^ .. function:: init_grpc_aio Enable AsyncIO for gRPC Python. This function is idempotent and it should be invoked before creation of AsyncIO stack objects. Otherwise, the application might deadlock. This function configurates the gRPC C-Core to invoke AsyncIO methods for IO operations (e.g., socket read, write). The configuration applies to the entire process. After invoking this function, making blocking function calls in coroutines or in the thread running event loop will block the event loop, potentially starving all RPCs in the process. Refer to the Python language documentation on AsyncIO for more details (`running-blocking-code `_). Create Channel ^^^^^^^^^^^^^^ Channels are the abstraction of clients, where most of networking logic happens, for example, managing one or more underlying connections, name resolution, load balancing, flow control, etc.. If you are using ProtoBuf, Channel objects works best when further encapsulate into stub objects, then the application can invoke remote functions as if they are local functions. .. autofunction:: insecure_channel .. autofunction:: secure_channel Channel Object ^^^^^^^^^^^^^^ .. autoclass:: Channel Create Server ^^^^^^^^^^^^^ .. autofunction:: server Server Object ^^^^^^^^^^^^^ .. autoclass:: Server gRPC Exceptions ^^^^^^^^^^^^^^^ .. autoexception:: BaseError .. autoexception:: UsageError .. autoexception:: AbortError .. autoexception:: InternalError .. autoexception:: AioRpcError Shared Context ^^^^^^^^^^^^^^^^^^^^ .. autoclass:: RpcContext Client-Side Context ^^^^^^^^^^^^^^^^^^^^^^^ .. autoclass:: Call .. autoclass:: UnaryUnaryCall .. autoclass:: UnaryStreamCall .. autoclass:: StreamUnaryCall .. autoclass:: StreamStreamCall Server-Side Context ^^^^^^^^^^^^^^^^^^^^^^^ .. autoclass:: ServicerContext Client-Side Interceptor ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autoclass:: ClientCallDetails .. autoclass:: InterceptedUnaryUnaryCall .. autoclass:: UnaryUnaryClientInterceptor .. Service-Side Context .. ^^^^^^^^^^^^^^^^^^^^ .. .. autoclass:: ServicerContext Multi-Callable Interfaces ^^^^^^^^^^^^^^^^^^^^^^^^^ .. autoclass:: UnaryUnaryMultiCallable .. autoclass:: UnaryStreamMultiCallable() .. autoclass:: StreamUnaryMultiCallable() .. autoclass:: StreamStreamMultiCallable() grpc-1.30.2/doc/python/sphinx/grpc_channelz.rst000066400000000000000000000004261370425124100214770ustar00rootroot00000000000000gRPC Channelz ==================== What is gRPC Channelz? --------------------------------------------- Design Document `gRPC Channelz `_ Module Contents --------------- .. automodule:: grpc_channelz.v1.channelz grpc-1.30.2/doc/python/sphinx/grpc_health_checking.rst000066400000000000000000000002001370425124100227630ustar00rootroot00000000000000gRPC Health Checking ==================== Module Contents --------------- .. autoclass:: grpc_health.v1.health.HealthServicer grpc-1.30.2/doc/python/sphinx/grpc_reflection.rst000066400000000000000000000007441370425124100220320ustar00rootroot00000000000000gRPC Reflection ==================== What is gRPC reflection? --------------------------------------------- Check this out `gRPC Python Server Reflection `_ Example ------- Refer to the GitHub `reflection example `_ Module Contents --------------- .. automodule:: grpc_reflection.v1alpha.reflection grpc-1.30.2/doc/python/sphinx/grpc_status.rst000066400000000000000000000001521370425124100212140ustar00rootroot00000000000000gRPC Status ==================== Module Contents --------------- .. automodule:: grpc_status.rpc_status grpc-1.30.2/doc/python/sphinx/grpc_testing.rst000066400000000000000000000001411370425124100213440ustar00rootroot00000000000000gRPC Testing ==================== Module Contents --------------- .. automodule:: grpc_testing grpc-1.30.2/doc/python/sphinx/index.rst000066400000000000000000000006261370425124100177730ustar00rootroot00000000000000Welcome to gRPC Python's documentation! ======================================= Version: |version| Release: |release| API Reference ============= .. toctree:: :caption: Contents: grpc grpc_asyncio grpc_channelz grpc_health_checking grpc_reflection grpc_status grpc_testing glossary Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search` grpc-1.30.2/doc/security_audit.md000066400000000000000000000132761370425124100166640ustar00rootroot00000000000000# gRPC Security Audit A third-party security audit of gRPC C++ stack was performed by [Cure53](https://cure53.de) in October 2019. The full report can be found [here](https://github.com/grpc/grpc/tree/master/doc/grpc_security_audit.pdf). # Addressing grpc_security_audit The following describes how gRPC team has or will address each of the security issues pointed out in the report. ## GRP-01-001 DoS through uninitialized pointer dereference GRP-01-001 was fixed in version 1.24.0 and above with https://github.com/grpc/grpc/pull/20351. The fix was also patched in version 1.23.1. ## GRP-01-002 Refs to freed memory not automatically nulled GRP-01-002 describes a programming pattern in gRPC Core where `gpr_free` is called and then the pointer is nulled afterwards. GRP-01-002 can be split into two concerns: 1) dangling pointer bugs and 2) the potential vulnerability of leveraging other bugs to access data through a freed pointer. Regarding 1), gRPC uses a suite of sanitizer tests (asan, tsan, etc) to detect and fix any memory-related bugs. gRPC is also in the process of moving to c++ and the standard library, enabling the use of smart pointers in Core and thus making it harder to generate memory-related bugs. There are also plans to remove `gpr_free` in general. Regarding 2), moving to smart pointers (in particular, unique_ptr) will help this issue as well. In addition, gRPC has continuous fuzzing tests to find and resolve security issues, and the pen test did not discover any concrete vulnerabilities in this area. Below is a list of alternatives that gRPC team considered. ### Alternative #1: Rewrite gpr_free to take void\*\* One solution is to change the API of `gpr_free` so that it automatically nulls the given pointer after freeing it. ``` gpr_free (void** ptr) { ... *ptr = nullptr; } ``` This defensive programming pattern would help protect gRPC from the potential exploits and latent dangling pointer bugs mentioned in the security report. However, performance would be a significant concern as we are now unconditionally adding a store to every gpr_free call, and there are potentially hundreds of these per RPC. At the RPC layer, this can add up to prohibitive costs. Maintainability is also an issue since this approach impacts use of `*const`. Member pointers that are set in the initialization list of a constructor and not changed thereafter can be declared `*const`. This is a useful compile-time check if the member is taking ownership of something that was passed in by argument or allocated through a helper function called by the constructor initializer list. If this thing needs to be `gpr_free`'d using the proposed syntax, it can no longer be `*const` and we lose these checks (or we have to const_cast it which is also error-prone). Another concern is readability - this `gpr_free` interface is less intuitive than the current one. Yet another concern is that the use of non-smart pointers doesn’t imply ownership - it doesn’t protect against spare copies of the same pointers. ### Alternative #2: Add another gpr_free to the Core API Adding an alternative `gpr_free` that nulls the given pointer is undesirable because we cannot enforce that we’re using this version of `gpr_free` everywhere we need to. It doesn’t solve the original problem because it doesn’t reduce the chance of programmer error. Like alternative #1, this solution doesn’t protect against spare copies of the same pointers and is subject to the same maintainability concerns. ### Alternative #3: Rewrite gpr_free to take void\*& ``` gpr_free (void*& ptr) { ... ptr = nullptr; } ``` This falls into the same pitfalls as solution #1 and furthermore is C89 non-compliant, which is a current requirement for `gpr_free`. Moreover, Google’s style guide discourages non-const reference parameters, so this is even less desirable than solution #1. ### Conclusion Because of performance and maintainability concerns, GRP-01-002 will be addressed through the ongoing work to move gRPC Core to C++ and smart pointers and the future work of removing `gpr_free` in general. We will continue to leverage our sanitizer and fuzzing tests to help expose vulnerabilities. ## GRP-01-003 Calls to malloc suffer from potential integer overflows The vulnerability, as defined by the report, is that calls to `gpr_malloc` in the C-core codebase may suffer from potential integer overflow in cases where we multiply the array element size by the size of the array. The penetration testers did not identify a concrete place where this occurred, but rather emphasized that the coding pattern itself had potential to lead to vulnerabilities. The report’s suggested solution for GRP-01-003 was to create a `calloc(size_t nmemb, size_t size)` wrapper that contains integer overflow checks. However, gRPC team firmly believes that gRPC Core should only use integer overflow checks in the places where they’re needed; for example, any place where remote input influences the input to `gpr_malloc` in an unverified way. This is because bounds-checking is very expensive at the RPC layer. Determining exactly where bounds-checking is needed requires an audit of tracing each `gpr_malloc` (or `gpr_realloc` or `gpr_zalloc`) call up the stack to determine if the sufficient bounds-checking was performed. This kind of audit, done manually, is fairly expensive engineer-wise. ### Conclusion GRP-01-003 will be addressed through leveraging gRPC Core fuzzer tests to actively identify and resolve any integer overflow issues. If any issues are identified, we may create a `gpr_safe_malloc(size_t nmemb, size_t size)` wrapper to consolidate bounds-checking in one place. This function will *not* zero out memory because of performance concerns, and so will not be a calloc-style wrapper. grpc-1.30.2/doc/server-reflection.md000066400000000000000000000206061370425124100172600ustar00rootroot00000000000000GRPC Server Reflection Protocol =============================== This document describes server reflection as an optional extension for servers to assist clients in runtime construction of requests without having stub information precompiled into the client. The primary usecase for server reflection is to write (typically) command line debugging tools for talking to a grpc server. In particular, such a tool will take in a method and a payload (in human readable text format) send it to the server (typically in binary proto wire format), and then take the response and decode it to text to present to the user. This broadly involves two problems: determining what formats (which protobuf messages) a server’s method uses, and determining how to convert messages between human readable format and the (likely binary) wire format. ## Method reflection We want to be able to answer the following queries: 1. What methods does a server export? 2. For a particular method, how do we call it? Specifically, what are the names of the methods, are those methods unary or streaming, and what are the types of the argument and result? ``` #TODO(dklempner): link to an actual .proto later. package grpc.reflection.v1alpha; message ListApisRequest { } message ListApisResponse { repeated google.protobuf.Api apis = 1; } message GetMethodRequest { string method = 1; } message GetMethodResponse { google.protobuf.Method method = 1; } service ServerReflection { rpc ListApis (ListApisRequest) returns (ListApisResponse); rpc GetMethod (GetMethodRequest) returns (GetMethodResponse); } ``` Note that a server is under no obligation to return a complete list of all methods it supports. For example, a reverse proxy may support server reflection for methods implemented directly on the proxy but not enumerate all methods supported by its backends. ### Open questions on method reflection * Consider how to extend this protocol to support non-protobuf methods. ## Argument reflection The second half of the problem is converting between the human readable input/output of a debugging tool and the binary format understood by the method. This is obviously dependent on protocol type. At one extreme, if both the server and the debugging tool accept JSON, there may be no need for such a conversion in the first place. At the opposite extreme, a server using a custom binary format has no hope of being supported by a generic system. The intermediate interesting common case is a server which speaks binary-proto and a debugging client which speaks either ascii-proto or json-proto. One approach would be to require servers directly support human readable input. In the future method reflection may be extended to document such support, should it become widespread or standardized. ## Protobuf descriptors A second would be for the server to export its google::protobuf::DescriptorDatabase over the wire. This is very easy to implement in C++, and Google implementations of a similar protocol already exist in C++, Go, and Java. This protocol mostly returns FileDescriptorProtos, which are a proto encoding of a parsed .proto file. It supports four queries: 1. The FileDescriptorProto for a given file name 2. The FileDescriptorProto for the file with a given symbol 3. The FileDescriptorProto for the file with a given extension 4. The list of known extension tag numbers of a given type These directly correspond to the methods of google::protobuf::DescriptorDatabase. Note that this protocol includes support for extensions, which have been removed from proto3 but are still in widespread use in Google’s codebase. Because most usecases will require also requesting the transitive dependencies of requested files, the queries will also return all transitive dependencies of the returned file. Should interesting usecases for non-transitive queries turn up later, we can easily extend the protocol to support them. ### Reverse proxy traversal One potential issue with naive reverse proxies is that, while any individual server will have a consistent and valid picture of the proto DB which is sufficient to handle incoming requests, incompatibilities will arise if the backend servers have a mix of builds. For example, if a given message is moved from foo.proto to bar.proto, and the client requests foo.proto from an old server and bar.proto from a new server, the resulting database will have a double definition. To solve this problem, the protocol is structured as a bidirectional stream, ensuring all related requests go to a single server. This has the additional benefit that overlapping recursive requests don’t require sending a lot of redundant information, because there is a single stream to maintain context between queries. ``` package grpc.reflection.v1alpha; message DescriptorDatabaseRequest { string host = 1; oneof message_request { string files_for_file_name = 3; string files_for_symbol_name = 4; FileContainingExtensionRequest file_containing_extension = 5; string list_all_extensions_of_type = 6; } } message FileContainingExtensionRequest { string base_message = 1; int64 extension_id = 2; } message DescriptorDatabaseResponse { string valid_host = 1; DescriptorDatabaseRequest original_request = 2; oneof message_response { // These are proto2 type google.protobuf.FileDescriptorProto, but // we avoid taking a dependency on descriptor.proto, which uses // proto2 only features, by making them opaque // bytes instead repeated bytes fd_proto = 4; ListAllExtensionsResponse extensions_response = 5; // Notably includes error code 5, NOT FOUND int32 error_code = 6; } } message ListAllExtensionsResponse { string base_type_name; repeated int64 extension_number; } service ProtoDescriptorDatabase { rpc DescriptorDatabaseInfo(stream DescriptorDatabaseRequest) returns (stream DescriptorDatabaseResponse); } ``` Any given request must either result in an error code or an answer, usually in the form of a series of FileDescriptorProtos with the requested file itself and all previously unsent transitive imports of that file. Servers may track which FileDescriptorProtos have been sent on a given stream, for a given value of valid_host, and avoid sending them repeatedly for overlapping requests. | message_request message | Result | | --------------------------- | ----------------------------------------------- | | files_for_file_name | transitive closure of file name | | files_for_symbol_name | transitive closure file containing symbol | | file_containing_extension | transitive closure of file containing a given extension number of a given symbol | | list_all_extensions_of_type | ListAllExtensionsResponse containing all known extension numbers of a given type | At some point it would make sense to additionally also support any.proto’s format. Note that known any.proto messages can be queried by symbol using this protocol even without any such support, by parsing the url and extracting the symbol name from it. ## Language specific implementation thoughts All of the information needed to implement Proto reflection is available to the code generator, but I’m not certain we actually generate this in every language. If the proto implementation in the language doesn’t have something like google::protobuf::DescriptorPool the grpc implementation for that language will need to index those FileDescriptorProtos by file and symbol and imports. One issue is that some grpc implementations are very loosely coupled with protobufs; in such implementations it probably makes sense to split apart these reflection APIs so as not to take an additional proto dependency. ## Known Implementations Enabling server reflection differs language-to-language. Here are links to docs relevant to each language: - [Java](https://github.com/grpc/grpc-java/blob/master/documentation/server-reflection-tutorial.md#enable-server-reflection) - [Go](https://github.com/grpc/grpc-go/blob/master/Documentation/server-reflection-tutorial.md#enable-server-reflection) - [C++](https://grpc.io/grpc/cpp/md_doc_server_reflection_tutorial.html) - [C#](https://github.com/grpc/grpc/blob/master/doc/csharp/server_reflection.md) - [Python](https://github.com/grpc/grpc/blob/master/doc/python/server_reflection.md) - Ruby: not yet implemented [#2567](https://github.com/grpc/grpc/issues/2567) - Node: not yet implemented [#2568](https://github.com/grpc/grpc/issues/2568) grpc-1.30.2/doc/server_reflection_tutorial.md000066400000000000000000000127531370425124100212710ustar00rootroot00000000000000# gRPC Server Reflection Tutorial gRPC Server Reflection provides information about publicly-accessible gRPC services on a server, and assists clients at runtime to construct RPC requests and responses without precompiled service information. It is used by gRPC CLI, which can be used to introspect server protos and send/receive test RPCs. ## Enable Server Reflection ### Enable server reflection in C++ servers C++ Server Reflection is an add-on library, `libgrpc++_reflection`. To enable C++ server reflection, you can link this library to your server binary. Some platforms (e.g. Ubuntu 11.10 onwards) only link in libraries that directly contain symbols used by the application. On these platforms, LD flag `--no-as-needed` is needed for dynamic linking and `--whole-archive` is needed for static linking. This [Makefile](../examples/cpp/helloworld/Makefile#L37#L45) demonstrates enabling c++ server reflection on Linux and MacOS. ## Test services using Server Reflection After enabling Server Reflection in a server application, you can use gRPC CLI to test its services. Instructions on how to use gRPC CLI can be found at [command_line_tool.md](command_line_tool.md), or using `grpc_cli help` command. Here we use `examples/cpp/helloworld` as an example to show the use of gRPC Server Reflection and gRPC CLI. First, we need to build gRPC CLI and setup an example server with Server Reflection enabled. - Setup an example server Server Reflection has already been enabled in the [Makefile](../examples/cpp/helloworld/Makefile) of the helloworld example. We can simply make it and run the greeter_server. ```sh $ make -C examples/cpp/helloworld $ examples/cpp/helloworld/greeter_server & ``` - Build gRPC CLI ```sh make grpc_cli cd bins/opt ``` gRPC CLI binary `grpc_cli` can be found at `bins/opt/` folder. This tool is still new and does not have a `make install` target yet. ### List services `grpc_cli ls` command lists services and methods exposed at a given port - List all the services exposed at a given port ```sh $ grpc_cli ls localhost:50051 ``` output: ```sh helloworld.Greeter grpc.reflection.v1alpha.ServerReflection ``` - List one service with details `grpc_cli ls` command inspects a service given its full name (in the format of \.\). It can print information with a long listing format when `-l` flag is set. This flag can be used to get more details about a service. ```sh $ grpc_cli ls localhost:50051 helloworld.Greeter -l ``` output: ```sh filename: helloworld.proto package: helloworld; service Greeter { rpc SayHello(helloworld.HelloRequest) returns (helloworld.HelloReply) {} } ``` ### List methods - List one method with details `grpc_cli ls` command also inspects a method given its full name (in the format of \.\.\). ```sh $ grpc_cli ls localhost:50051 helloworld.Greeter.SayHello -l ``` output: ```sh rpc SayHello(helloworld.HelloRequest) returns (helloworld.HelloReply) {} ``` ### Inspect message types We can use`grpc_cli type` command to inspect request/response types given the full name of the type (in the format of \.\). - Get information about the request type ```sh $ grpc_cli type localhost:50051 helloworld.HelloRequest ``` output: ```sh message HelloRequest { optional string name = 1; } ``` ### Call a remote method We can send RPCs to a server and get responses using `grpc_cli call` command. - Call a unary method ```sh $ grpc_cli call localhost:50051 SayHello "name: 'gRPC CLI'" ``` output: ```sh message: "Hello gRPC CLI" ``` ## Use Server Reflection in a C++ client Server Reflection can be used by clients to get information about gRPC services at runtime. We've provided a descriptor database called [grpc::ProtoReflectionDescriptorDatabase](../test/cpp/util/proto_reflection_descriptor_database.h) which implements the [google::protobuf::DescriptorDatabase](https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.descriptor_database#DescriptorDatabase) interface. It manages the communication between clients and reflection services and the storage of received information. Clients can use it as using a local descriptor database. - To use Server Reflection with grpc::ProtoReflectionDescriptorDatabase, first initialize an instance with a grpc::Channel. ```c++ std::shared_ptr channel = grpc::CreateChannel(server_address, server_cred); grpc::ProtoReflectionDescriptorDatabase reflection_db(channel); ``` - Then use this instance to feed a [google::protobuf::DescriptorPool](https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.descriptor#DescriptorPool). ```c++ google::protobuf::DescriptorPool desc_pool(&reflection_db); ``` - Example usage of this descriptor pool * Get Service/method descriptors. ```c++ const google::protobuf::ServiceDescriptor* service_desc = desc_pool->FindServiceByName("helloworld.Greeter"); const google::protobuf::MethodDescriptor* method_desc = desc_pool->FindMethodByName("helloworld.Greeter.SayHello"); ``` * Get message type descriptors and create messages dynamically. ```c++ const google::protobuf::Descriptor* request_desc = desc_pool->FindMessageTypeByName("helloworld.HelloRequest"); google::protobuf::DynamicMessageFactory dmf; google::protobuf::Message* request = dmf.GetPrototype(request_desc)->New(); ``` grpc-1.30.2/doc/server_side_auth.md000066400000000000000000000072441370425124100171600ustar00rootroot00000000000000Server-side API for Authenticating Clients ========================================== NOTE: This document describes how server-side authentication works in C-core based gRPC implementations only. In gRPC Java and Go, server side authentication is handled differently. NOTE2: `CallCredentials` class is only valid for secure channels in C-Core. So, for connections under insecure channels, features below might not be available. ## AuthContext To perform server-side authentication, gRPC exposes the *authentication context* for each call. The context exposes important authentication-related information about the RPC such as the type of security/authentication type being used and the peer identity. The authentication context is structured as a multi-map of key-value pairs - the *auth properties*. In addition to that, for authenticated RPCs, the set of properties corresponding to a selected key will represent the verified identity of the caller - the *peer identity*. The contents of the *auth properties* are populated by an *auth interceptor*. The interceptor also chooses which property key will act as the peer identity (e.g. for client certificate authentication this property will be `"x509_common_name"` or `"x509_subject_alternative_name"`). WARNING: AuthContext is the only reliable source of truth when it comes to authenticating RPCs. Using any other call/context properties for authentication purposes is wrong and inherently unsafe. #### Example AuthContext contents For secure channel using mutual TLS authentication with both client and server certificates (test certificates from this repository are used). Populated auth properties: ``` "transport_security_type": "ssl" # connection is secured using TLS/SSL "x509_common_name": "*.test.google.com" # from client's certificate "x509_pem_cert": "-----BEGIN CERTIFICATE-----\n..." # client's PEM encoded certificate "x509_subject_alternative_name": "*.test.google.fr" "x509_subject_alternative_name": "waterzooi.test.google.be" "x509_subject_alternative_name": "*.test.youtube.com" "x509_subject_alternative_name": "192.168.1.3" ``` The peer identity is set of all properties named `"x509_subject_alternative_name"`: ``` peer_identity_property_name = "x509_subject_alternative_name" ``` ## AuthProperty Auth properties are elements of the AuthContext. They have a name (a key of type string) and a value which can be a string or binary data. ## Auth Interceptors Auth interceptors are gRPC components that populate contents of the auth context based on gRPC's internal state and/or call metadata. gRPC comes with some basic "interceptors" already built-in. WARNING: While there is a public API that allows anyone to write their own custom interceptor, please think twice before using it. There are legitimate uses for custom interceptors but you should keep in mind that as auth interceptors essentially decide which RPCs are authenticated and which are not, their code is very sensitive from the security perspective and getting things wrong might have serious consequences. If unsure, we strongly recommend to rely on official & proven interceptors that come with gRPC. #### Available auth interceptors - TLS/SSL certificate authentication (built into gRPC's security layer, automatically used whenever you use a secure connection) - (coming soon) JWT auth token authentication - more will be added over time ## Status (by language) C-core exposes low level API to access auth context contents and to implement an auth interceptor. In C++, the auth interceptor API is exposed as `AuthMetadataProcessor`. A high level API to access AuthContext contents is available in these languages: - C++ - C# (implementation in-progress) - other languages coming soon grpc-1.30.2/doc/service_config.md000066400000000000000000000053061370425124100166070ustar00rootroot00000000000000Service Config in gRPC ====================== # Objective The service config is a mechanism that allows service owners to publish parameters to be automatically used by all clients of their service. # Format The format of the service config is defined by the [`grpc.service_config.ServiceConfig` protocol buffer message](https://github.com/grpc/grpc-proto/blob/master/grpc/service_config/service_config.proto). Note that new fields may be added in the future as new functionality is introduced. # Architecture A service config is associated with a server name. The [name resolver](naming.md) plugin, when asked to resolve a particular server name, will return both the resolved addresses and the service config. The name resolver returns the service config to the gRPC client in JSON form. Individual resolver implementations determine where and in what format the service config is stored. If the resolver implemention obtains the service config in protobuf form, it must convert it to JSON using the normal [protobuf to JSON translation rules](https://developers.google.com/protocol-buffers/docs/proto3#json). Alternatively, a resolver implementation may obtain the service config already in JSON form, in which case it may return it directly. For details of how the DNS resolver plugin supports service configs, see [gRFC A2: Service Config via DNS](https://github.com/grpc/proposal/blob/master/A2-service-configs-in-dns.md). # Example Here is an example service config in protobuf form: ``` { // Use round_robin LB policy. load_balancing_config: { round_robin: {} } // This method config applies to method "foo/bar" and to all methods // of service "baz". method_config: { name: { service: "foo" method: "bar" } name: { service: "baz" } // Default timeout for matching methods. timeout: { seconds: 1 nanos: 1 } } } ``` Here is the same example service config in JSON form: ``` { "loadBalancingConfig": [ { "round_robin": {} } ], "methodConfig": [ { "name": [ { "service": "foo", "method": "bar" }, { "service": "baz" } ], "timeout": "1.0000000001s" } ] } ``` # APIs The service config is used in the following APIs: - In the resolver API, used by resolver plugins to return the service config to the gRPC client. - In the gRPC client API, where users can query the channel to obtain the service config associated with the channel (for debugging purposes). - In the gRPC client API, where users can set the service config explicitly. This can be used to set the config in unit tests. It can also be used to set the default config that will be used if the resolver plugin does not return a service config. grpc-1.30.2/doc/ssl-performance.md000066400000000000000000000041171370425124100167210ustar00rootroot00000000000000# SSL in gRPC and performance The SSL requirement of gRPC isn't necessarily making it easy to integrate. The HTTP/2 protocol requires ALPN support, which is a fairly new handshake protocol only supported by recent implementations. As a result, we've tried hard to provide a smooth experience to our users when compiling and distributing gRPC, but this may come at performance costs due to this. More specifically, we will sometime build the SSL library by disabling assembly code (by setting the `OPENSSL_NO_ASM` option), which can impact performance by an order of magnitude when processing encrypted streams. ## gRPC C++: Building from Source Build system | Condition | Platform | Uses assembly optimizations ---|---|---|-- Makefile | with OpenSSL 1.0.2 development files | all | :heavy_check_mark: Makefile | all other cases | all | :x: Bazel | | Linux | :heavy_check_mark: Bazel | | MacOS | :heavy_check_mark: Bazel | | Windows | :x: CMake | boringssl from submodule (default) | Linux or MacOS | :heavy_check_mark: CMake | boringssl from submodule (default), generator=Ninja | Windows | :heavy_check_mark: CMake | boringssl from submodule (default), generator=Visual Studio | Windows | :x: CMake | pre-installed OpenSSL 1.0.2+ (`gRPC_SSL_PROVIDER=package`) | all | :heavy_check_mark: ## Other Languages: Binary/Source Packages In addition, we are shipping packages for language implementations. These packages are source packages, but also have pre-built binaries being distributed. Building packages from source may give a different result in some cases. Language | From source | Platform | Uses assembly optimizations ---|---|---|--- C# | n/a | Linux, 64bit | :heavy_check_mark: C# | n/a | Linux, 32bit | :x: C# | n/a | MacOS | :heavy_check_mark: C# | n/a | Windows | :heavy_check_mark: Node.JS | n/a | Linux | :heavy_check_mark: Node.JS | n/a | MacOS | :heavy_check_mark: Node.JS | n/a | Windows | :x: Electron | n/a | all | :heavy_check_mark: ObjC | Yes | iOS | :x: PHP | Yes | all | Same as the `Makefile` case from above PHP | No | all | :x: Python | n/a | all | :x: Ruby | No | all | :x: grpc-1.30.2/doc/status_ordering.md000066400000000000000000000016371370425124100170410ustar00rootroot00000000000000Ordering Status and Reads in the gRPC API ----------------------------------------- Rules for implementors: 1. Reads and Writes Must not succeed after Status has been delivered. 2. OK Status is only delivered after all buffered messages are read. 3. Reads May continue to succeed after a failing write. However, once a write fails, all subsequent writes Must fail, and similarly, once a read fails, all subsequent reads Must fail. 4. When an error status is known to the library, if the user asks for status, the library Should discard messages received in the library but not delivered to the user and then deliver the status. If the user does not ask for status but continues reading, the library Should deliver buffered messages before delivering status. The library MAY choose to implement the stricter version where errors cause all buffered messages to be dropped, but this is not a requirement. grpc-1.30.2/doc/statuscodes.md000066400000000000000000000211221370425124100161550ustar00rootroot00000000000000# Status codes and their use in gRPC gRPC uses a set of well defined status codes as part of the RPC API. These statuses are defined as such: | Code | Number | Description | |------------------|--------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | OK | 0 | Not an error; returned on success. | | CANCELLED | 1 | The operation was cancelled, typically by the caller. | | UNKNOWN | 2 | Unknown error. For example, this error may be returned when a `Status` value received from another address space belongs to an error space that is not known in this address space. Also errors raised by APIs that do not return enough error information may be converted to this error. | | INVALID_ARGUMENT | 3 | The client specified an invalid argument. Note that this differs from `FAILED_PRECONDITION`. `INVALID_ARGUMENT` indicates arguments that are problematic regardless of the state of the system (e.g., a malformed file name). | | DEADLINE_EXCEEDED | 4 | The deadline expired before the operation could complete. For operations that change the state of the system, this error may be returned even if the operation has completed successfully. For example, a successful response from a server could have been delayed long | | NOT_FOUND | 5 | Some requested entity (e.g., file or directory) was not found. Note to server developers: if a request is denied for an entire class of users, such as gradual feature rollout or undocumented whitelist, `NOT_FOUND` may be used. If a request is denied for some users within a class of users, such as user-based access control, `PERMISSION_DENIED` must be used. | | ALREADY_EXISTS | 6 | The entity that a client attempted to create (e.g., file or directory) already exists. | | PERMISSION_DENIED | 7 | The caller does not have permission to execute the specified operation. `PERMISSION_DENIED` must not be used for rejections caused by exhausting some resource (use `RESOURCE_EXHAUSTED` instead for those errors). `PERMISSION_DENIED` must not be used if the caller can not be identified (use `UNAUTHENTICATED` instead for those errors). This error code does not imply the request is valid or the requested entity exists or satisfies other pre-conditions. | | UNAUTHENTICATED | 16 | The request does not have valid authentication credentials for the operation. | | RESOURCE_EXHAUSTED | 8 | Some resource has been exhausted, perhaps a per-user quota, or perhaps the entire file system is out of space. | | FAILED_PRECONDITION | 9 | The operation was rejected because the system is not in a state required for the operation's execution. For example, the directory to be deleted is non-empty, an rmdir operation is applied to a non-directory, etc. Service implementors can use the following guidelines to decide between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`: (a) Use `UNAVAILABLE` if the client can retry just the failing call. (b) Use `ABORTED` if the client should retry at a higher level (e.g., when a client-specified test-and-set fails, indicating the client should restart a read-modify-write sequence). (c) Use `FAILED_PRECONDITION` if the client should not retry until the system state has been explicitly fixed. E.g., if an "rmdir" fails because the directory is non-empty, `FAILED_PRECONDITION` should be returned since the client should not retry unless the files are deleted from the directory. | | ABORTED | 10 | The operation was aborted, typically due to a concurrency issue such as a sequencer check failure or transaction abort. See the guidelines above for deciding between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`. | | OUT_OF_RANGE | 11 | The operation was attempted past the valid range. E.g., seeking or reading past end-of-file. Unlike `INVALID_ARGUMENT`, this error indicates a problem that may be fixed if the system state changes. For example, a 32-bit file system will generate `INVALID_ARGUMENT` if asked to read at an offset that is not in the range [0,2^32-1], but it will generate `OUT_OF_RANGE` if asked to read from an offset past the current file size. There is a fair bit of overlap between `FAILED_PRECONDITION` and `OUT_OF_RANGE`. We recommend using `OUT_OF_RANGE` (the more specific error) when it applies so that callers who are iterating through a space can easily look for an `OUT_OF_RANGE` error to detect when they are done. | | UNIMPLEMENTED | 12 | The operation is not implemented or is not supported/enabled in this service. | | INTERNAL | 13 | Internal errors. This means that some invariants expected by the underlying system have been broken. This error code is reserved for serious errors. | | UNAVAILABLE | 14 | The service is currently unavailable. This is most likely a transient condition, which can be corrected by retrying with a backoff. Note that it is not always safe to retry non-idempotent operations. | | DATA_LOSS | 15 | Unrecoverable data loss or corruption. | All RPCs started at a client return a `status` object composed of an integer `code` and a string `message`. The server-side can choose the status it returns for a given RPC. The gRPC client and server-side implementations may also generate and return `status` on their own when errors happen. Only a subset of the pre-defined status codes are generated by the gRPC libraries. This allows applications to be sure that any other code it sees was actually returned by the application (although it is also possible for the server-side to return one of the codes generated by the gRPC libraries). The following table lists the codes that may be returned by the gRPC libraries (on either the client-side or server-side) and summarizes the situations in which they are generated. | Case | Code | Generated at Client or Server | | ------------- |:-------------| :-----:| | Client Application cancelled the request | CANCELLED | Both | | Deadline expires before server returns status | DEADLINE_EXCEEDED | Both | | Method not found at server | UNIMPLEMENTED | Server| | Server shutting down | UNAVAILABLE | Server| | Server side application throws an exception (or does something other than returning a Status code to terminate an RPC) | UNKNOWN | Server| | No response received before Deadline expires. This may occur either when the client is unable to send the request to the server or when the server fails to respond in time. | DEADLINE_EXCEEDED | Both| | Some data transmitted (e.g., request metadata written to TCP connection) before connection breaks | UNAVAILABLE | Client | | Could not decompress, but compression algorithm supported (Client -> Server) | INTERNAL | Server | | Could not decompress, but compression algorithm supported (Server -> Client) | INTERNAL | Client | | Compression mechanism used by client not supported at server | UNIMPLEMENTED | Server | | Server temporarily out of resources (e.g., Flow-control resource limits reached) | RESOURCE_EXHAUSTED | Server| | Client does not have enough memory to hold the server response | RESOURCE_EXHAUSTED | Client | | Flow-control protocol violation | INTERNAL | Both | | Error parsing returned status | UNKNOWN | Client | | Incorrect Auth metadata ( Credentials failed to get metadata, Incompatible credentials set on channel and call, Invalid host set in `:authority` metadata, etc.) | UNAUTHENTICATED | Both | | Request cardinality violation (method requires exactly one request but client sent some other number of requests) | UNIMPLEMENTED | Server| | Response cardinality violation (method requires exactly one response but server sent some other number of responses) | UNIMPLEMENTED | Client| | Error parsing response proto | INTERNAL | Client| | Error parsing request proto | INTERNAL | Server| | Sent or received message was larger than configured limit | RESOURCE_EXHAUSTED | Both | | Keepalive watchdog times out | UNAVAILABLE | Both | The following status codes are never generated by the library: - INVALID_ARGUMENT - NOT_FOUND - ALREADY_EXISTS - FAILED_PRECONDITION - ABORTED - OUT_OF_RANGE - DATA_LOSS Applications that may wish to [retry](https://github.com/grpc/proposal/blob/master/A6-client-retries.md) failed RPCs must decide which status codes on which to retry. As shown in the table above, the gRPC library can generate the same status code for different cases. Server applications can also return those same status codes. Therefore, there is no fixed list of status codes on which it is appropriate to retry in all applications. As a result, individual applications must make their own determination as to which status codes should cause an RPC to be retried. grpc-1.30.2/doc/unit_testing.md000066400000000000000000000121271370425124100163350ustar00rootroot00000000000000# How to write unit tests for gRPC C client. tl;dr: [Example code](https://github.com/grpc/grpc/blob/master/test/cpp/end2end/mock_test.cc). To unit-test client-side logic via the synchronous API, gRPC provides a mocked Stub based on googletest(googlemock) that can be programmed upon and easily incorporated in the test code. For instance, consider an EchoService like this: ```proto service EchoTestService { rpc Echo(EchoRequest) returns (EchoResponse); rpc BidiStream(stream EchoRequest) returns (stream EchoResponse); } ``` The code generated would look something like this: ```c class EchoTestService final { public: class StubInterface { virtual ::grpc::Status Echo(::grpc::ClientContext* context, const ::grpc::testing::EchoRequest& request, ::grpc::testing::EchoResponse* response) = 0; … std::unique_ptr< ::grpc::ClientReaderWriterInterface< ::grpc::testing::EchoRequest, ::grpc::testing::EchoResponse>> BidiStream(::grpc::ClientContext* context) { return std::unique_ptr< ::grpc::ClientReaderWriterInterface< ::grpc::testing::EchoRequest, ::grpc::testing::EchoResponse>>(BidiStreamRaw(context)); } … private: virtual ::grpc::ClientReaderWriterInterface< ::grpc::testing::EchoRequest, ::grpc::testing::EchoResponse>* BidiStreamRaw(::grpc::ClientContext* context) = 0; … } // End StubInterface … } // End EchoTestService ``` If we mock the StubInterface and set expectations on the pure-virtual methods we can test client-side logic without having to make any rpcs. A mock for this StubInterface will look like this: ```c class MockEchoTestServiceStub : public EchoTestService::StubInterface { public: MOCK_METHOD3(Echo, ::grpc::Status(::grpc::ClientContext* context, const ::grpc::testing::EchoRequest& request, ::grpc::testing::EchoResponse* response)); MOCK_METHOD1(BidiStreamRaw, ::grpc::ClientReaderWriterInterface< ::grpc::testing::EchoRequest, ::grpc::testing::EchoResponse>*(::grpc::ClientContext* context)); }; ``` **Generating mock code:** Such a mock can be auto-generated by: 1. Setting flag(generate_mock_code=true) on grpc plugin for protoc, or 1. Setting an attribute(generate_mocks) in your bazel rule. Protoc plugin flag: ```sh protoc -I . --grpc_out=generate_mock_code=true:. --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` echo.proto ``` Bazel rule: ```py grpc_proto_library( name = "echo_proto", srcs = ["echo.proto"], generate_mocks = True, ) ``` By adding such a flag now a header file `echo_mock.grpc.pb.h` containing the mocked stub will also be generated. This header file can then be included in test files along with a gmock dependency. **Writing tests with mocked Stub.** Consider the following client a user might have: ```c class FakeClient { public: explicit FakeClient(EchoTestService::StubInterface* stub) : stub_(stub) {} void DoEcho() { ClientContext context; EchoRequest request; EchoResponse response; request.set_message("hello world"); Status s = stub_->Echo(&context, request, &response); EXPECT_EQ(request.message(), response.message()); EXPECT_TRUE(s.ok()); } void DoBidiStream() { EchoRequest request; EchoResponse response; ClientContext context; grpc::string msg("hello"); std::unique_ptr> stream = stub_->BidiStream(&context); request.set_message(msg "0"); EXPECT_TRUE(stream->Write(request)); EXPECT_TRUE(stream->Read(&response)); EXPECT_EQ(response.message(), request.message()); request.set_message(msg "1"); EXPECT_TRUE(stream->Write(request)); EXPECT_TRUE(stream->Read(&response)); EXPECT_EQ(response.message(), request.message()); request.set_message(msg "2"); EXPECT_TRUE(stream->Write(request)); EXPECT_TRUE(stream->Read(&response)); EXPECT_EQ(response.message(), request.message()); stream->WritesDone(); EXPECT_FALSE(stream->Read(&response)); Status s = stream->Finish(); EXPECT_TRUE(s.ok()); } void ResetStub(EchoTestService::StubInterface* stub) { stub_ = stub; } private: EchoTestService::StubInterface* stub_; }; ``` A test could initialize this FakeClient with a mocked stub having set expectations on it: Unary RPC: ```c MockEchoTestServiceStub stub; EchoResponse resp; resp.set_message("hello world"); EXPECT_CALL(stub, Echo(_,_,_)).Times(AtLeast(1)).WillOnce(DoAll(SetArgPointee<2>(resp), Return(Status::OK))); FakeClient client(stub); client.DoEcho(); ``` Streaming RPC: ```c ACTION_P(copy, msg) { arg0->set_message(msg->message()); } auto rw = new MockClientReaderWriter(); EchoRequest msg; EXPECT_CALL(*rw, Write(_, _)).Times(3).WillRepeatedly(DoAll(SaveArg<0>(&msg), Return(true))); EXPECT_CALL(*rw, Read(_)). WillOnce(DoAll(WithArg<0>(copy(&msg)), Return(true))). WillOnce(DoAll(WithArg<0>(copy(&msg)), Return(true))). WillOnce(DoAll(WithArg<0>(copy(&msg)), Return(true))). WillOnce(Return(false)); MockEchoTestServiceStub stub; EXPECT_CALL(stub, BidiStreamRaw(_)).Times(AtLeast(1)).WillOnce(Return(rw)); FakeClient client(stub); client.DoBidiStream(); ``` grpc-1.30.2/doc/versioning.md000066400000000000000000000140731370425124100160060ustar00rootroot00000000000000# gRPC Versioning Guide ## Versioning Overview All gRPC implementations use a three-part version number (`vX.Y.Z`) and follow [semantic versioning](https://semver.org/), which defines the semantics of major, minor and patch components of the version number. In addition to that, gRPC versions evolve according to these rules: - **Major version bumps** only happen on rare occasions. In order to qualify for a major version bump, certain criteria described later in this document need to be met. Most importantly, a major version increase must not break wire compatibility with other gRPC implementations so that existing gRPC libraries remain fully interoperable. - **Minor version bumps** happen approx. every 6 weeks as part of the normal release cycle as defined by the gRPC release process. A new release branch named vMAJOR.MINOR.PATCH) is cut every 6 weeks based on the [release schedule](https://github.com/grpc/grpc/blob/master/doc/grpc_release_schedule.md). - **Patch version bump** corresponds to bugfixes done on release branch. There are a few situations where we don't adhere to the Semantic Versioning 2.0.0 strictly: - A **minor** version will not necessarily add new functionality. This follows from the fact that we cut minor releases on a regular schedule, so we can't guarantee there will always be new features in each of the supported languages. - Backward compatibility can be broken by a **minor** release if the API affected by the change was marked as EXPERIMENTAL upon its introduction. There are also a few extra rules regarding adding new gRPC implementations (e.g. adding support for a new language) - New implementations start at v0.x.y version and until they reach 1.0, they are considered not ready for production workloads. Breaking API changes are allowed in the 0.x releases as the library is not considered stable yet. - The "1.0" release has semantics of GA (generally available) and being production ready. Requirements to reach this milestone are at least these - basic RPC features are feature complete and tested - implementation is tested for interoperability with other languages - Public API is declared stable - Once a gRPC library reaches 1.0 (or higher version), the normal rules for versioning apply. ## Policy for updating the major version number To avoid user confusion and simplify reasoning, the gRPC releases in different languages try to stay synchronized in terms of major and minor version (all languages follow the same release schedule). Nevertheless, because we also strictly follow semantic versioning, there are circumstances in which a gRPC implementation needs to break the version synchronicity and do a major version bump independently of other languages. ### Situations when it's ok to do a major version bump - **change forced by the language ecosystem:** when the language itself or its standard libraries that we depend on make a breaking change (something which is out of our control), reacting with updating gRPC APIs may be the only adequate response. - **voluntary change:** Even in non-forced situations, there might be circumstances in which a breaking API change makes sense and represents a net win, but as a rule of thumb breaking changes are very disruptive for users, cause user fragmentation and incur high maintenance costs. Therefore, breaking API changes should be very rare events that need to be considered with extreme care and the bar for accepting such changes is intentionally set very high. Example scenarios where a breaking API change might be adequate: - fixing a security problem which requires changes to API (need to consider the non-breaking alternatives first) - the change leads to very significant gains to security, usability or development velocity. These gains need to be clearly documented and claims need to be supported by evidence (ideally by numbers). Costs to the ecosystem (impact on users, dev team etc.) need to be taken into account and the change still needs to be a net positive after subtracting the costs. All proposals to make a breaking change need to be documented as a gRFC document (in the grpc/proposal repository) that covers at least these areas: - Description of the proposal including an explanation why the proposed change is one of the very rare events where a breaking change is introduced. - Migration costs (= what does it mean for the users to migrate to the new API, what are the costs and risks associated with it) - Pros of the change (what is gained and how) - Cons of the change (e.g. user confusion, lost users and user trust, work needed, added maintenance costs) - Plan for supporting users still using the old major version (in case migration to the new major version is not trivial or not everyone can migrate easily) Note that while major version bump allows changing APIs used by the users, it must not impact the interoperability of the implementation with other gRPC implementations and the previous major version released. That means that **no backward incompatible protocol changes are allowed**: old clients must continue interoperating correctly with new servers and new servers with old clients. ### Situations that DON'T warrant a major version bump - Because other languages do so. This is not a good enough reason because doing a major version bump has high potential for disturbing and confusing the users of that language and fragmenting the user base and that is a bigger threat than having language implementations at different major version (provided the state is well documented). Having some languages at different major version seems to be unavoidable anyway (due to forced version bumps), unless we bump some languages artificially. - "I don't like this API": In retrospect, some API decisions made in the past necessarily turn out more lucky than others, but without strong reasons that would be in favor of changing the API and without enough supporting evidence (see previous section), other strategy than making a breaking API change needs to be used. Possible options: Expand the API to make it useful again; mark API as deprecated while keeping its functionality and providing a new better API. grpc-1.30.2/doc/wait-for-ready.md000066400000000000000000000014561370425124100164560ustar00rootroot00000000000000gRPC Wait for Ready Semantics ============================= If an RPC is issued but the channel is in `TRANSIENT_FAILURE` or `SHUTDOWN` states, the RPC is unable to be transmitted promptly. By default, gRPC implementations SHOULD fail such RPCs immediately. This is known as "fail fast," but usage of the term is historical. RPCs SHOULD NOT fail as a result of the channel being in other states (`CONNECTING`, `READY`, or `IDLE`). gRPC implementations MAY provide a per-RPC option to not fail RPCs as a result of the channel being in `TRANSIENT_FAILURE` state. Instead, the implementation queues the RPCs until the channel is `READY`. This is known as "wait for ready." The RPCs SHOULD still fail before `READY` if there are unrelated reasons, such as the channel is `SHUTDOWN` or the RPC's deadline is reached. grpc-1.30.2/doc/workarounds.md000066400000000000000000000022531370425124100161760ustar00rootroot00000000000000# gRPC Server Backward Compatibility Issues and Workarounds Management ## Introduction This document lists the workarounds implemented on gRPC servers for record and reference when users need to enable a certain workaround. ## Workaround List ### Cronet Compression **Workaround ID:** WORKAROUND\_ID\_CRONET\_COMPRESSION **Date added:** May 06, 2017 **Status:** Implemented in C core and C++ **Issue:** Before version v1.3.0-dev, gRPC iOS client's Cronet transport did not implement compression. However the clients still claim to support compression. As a result, a client fails to parse received message when the message is compressed. The problem above was resolved in gRPC v1.3.0-dev. For backward compatibility, a server must forcingly disable compression for gRPC clients of version lower than or equal to v1.3.0-dev. **Workaround Description:** Implemented as a server channel filter in C core. The filter identifies the version of peer client with incoming `user-agent` header of each call. If the client's gRPC version is lower that or equal to v1.3.x, a flag GRPC_WRITE_NO_COMPRESS is marked for all send_message ops which prevents compression of the messages to be sent out. grpc-1.30.2/doc/xds-test-descriptions.md000066400000000000000000000176121370425124100201040ustar00rootroot00000000000000# xDS (Load-Balancing) Interop Test Case Descriptions Client and server use [test.proto](../src/proto/grpc/testing/test.proto). ## Server The code for the xDS test server can be found at: [Java](https://github.com/grpc/grpc-java/blob/master/interop-testing/src/main/java/io/grpc/testing/integration/XdsTestServer.java) (other language implementations are in progress). Server should accept these arguments: * --port=PORT * The port the server will run on. ## Client The base behavior of the xDS test client is to send a constant QPS of unary messages and record the remote-peer distribution of the responses. Further, the client must expose an implementation of the `LoadBalancerStatsService` gRPC service to allow the test driver to validate the load balancing behavior for a particular test case (see below for more details). The code for the xDS test client can be at: [Java](https://github.com/grpc/grpc-java/blob/master/interop-testing/src/main/java/io/grpc/testing/integration/XdsTestClient.java) (other language implementations are in progress). Clients should accept these arguments: * --fail_on_failed_rpcs=BOOL * If true, the client should exit with a non-zero return code if any RPCs fail. Default is false. * --num_channels=CHANNELS * The number of channels to create to the server. * --qps=QPS * The QPS per channel. * --server=HOSTNAME:PORT * The server host to connect to. For example, "localhost:8080" * --stats_port=PORT * The port for to expose the client's `LoadBalancerStatsService` implementation. ## Test Driver Note that, unlike our other interop tests, neither the client nor the server has any notion of which of the following test scenarios is under test. Instead, a separate test driver is responsible for configuring the load balancer and the server backends, running the client, and then querying the client's `LoadBalancerStatsService` to validate load balancer behavior for each of the tests described below. ## LoadBalancerStatsService The service is defined as: ``` message LoadBalancerStatsRequest { // Request stats for the next num_rpcs sent by client. int32 num_rpcs = 1; // If num_rpcs have not completed within timeout_sec, return partial results. int32 timeout_sec = 2; } message LoadBalancerStatsResponse { // The number of completed RPCs for each peer. map rpcs_by_peer = 1; // The number of RPCs that failed to record a remote peer. int32 num_failures = 2; } service LoadBalancerStatsService { // Gets the backend distribution for RPCs sent by a test client. rpc GetClientStats(LoadBalancerStatsRequest) returns (LoadBalancerStatsResponse) {} } ``` Note that the `LoadBalancerStatsResponse` contains the remote peer distribution of the next `num_rpcs` *sent* by the client after receiving the `LoadBalancerStatsRequest`. It is important that the remote peer distribution be recorded for a block of consecutive outgoing RPCs, to validate the intended distribution from the load balancer, rather than just looking at the next `num_rpcs` responses received from backends, as different backends may respond at different rates. ## Test Cases ### ping_pong This test verifies that every backend receives traffic. Client parameters: 1. --num_channels=1 1. --qps=10 1. --fail_on_failed_rpc=true Load balancer configuration: 1. 4 backends are created in a single managed instance group (MIG). Test driver asserts: 1. All backends receive at least one RPC ### round_robin This test verifies that RPCs are evenly routed according to an unweighted round robin policy. Client parameters: 1. --num_channels=1 1. --qps=10 1. --fail_on_failed_rpc=true Load balancer configuration: 1. 4 backends are created in a single MIG. Test driver asserts that: 1. Once all backends receive at least one RPC, the following 100 RPCs are evenly distributed across the 4 backends. ### backends_restart This test verifies that the load balancer will resume sending traffic to a set of backends that is stopped and then resumed. Client parameters: 1. --num_channels=1 1. --qps=10 Load balancer configuration: 1. 4 backends are created in a single MIG. Test driver asserts: 1. All backends receive at least one RPC. The test driver records the peer distribution for a subsequent block of 100 RPCs then stops the backends. Test driver asserts: 1. No RPCs from the client are successful. The test driver resumes the backends. Test driver asserts: 1. Once all backends receive at least one RPC, the distribution for a block of 100 RPCs is the same as the distribution recorded prior to restart. ### secondary_locality_gets_requests_on_primary_failure This test verifies that backends in a secondary locality receive traffic when all backends in the primary locality fail. Client parameters: 1. --num_channels=1 1. --qps=10 Load balancer configuration: 1. The primary MIG with 2 backends in the same zone as the client 1. The secondary MIG with 2 backends in a different zone Test driver asserts: 1. All backends in the primary locality receive at least 1 RPC. 1. No backends in the secondary locality receive RPCs. The test driver stops the backends in the primary locality. Test driver asserts: 1. All backends in the secondary locality receive at least 1 RPC. The test driver resumes the backends in the primary locality. Test driver asserts: 1. All backends in the primary locality receive at least 1 RPC. 1. No backends in the secondary locality receive RPCs. ### secondary_locality_gets_no_requests_on_partial_primary_failure This test verifies that backends in a failover locality do not receive traffic when at least one of the backends in the primary locality remain healthy. **Note:** Future TD features may change the expected behavior and require changes to this test case. Client parameters: 1. --num_channels=1 1. --qps=10 Load balancer configuration: 1. The primary MIG with 2 backends in the same zone as the client 1. The secondary MIG with 2 backends in a different zone Test driver asserts: 1. All backends in the primary locality receive at least 1 RPC. 1. No backends in the secondary locality receive RPCs. The test driver stops one of the backends in the primary locality. Test driver asserts: 1. All backends in the primary locality receive at least 1 RPC. 1. No backends in the secondary locality receive RPCs. ### new_instance_group_receives_traffic This test verifies that new instance groups added to a backend service in the same zone receive traffic. Client parameters: 1. --num_channels=1 1. --qps=10 1. --fail_on_failed_rpc=true Load balancer configuration: 1. One MIG with two backends, using rate balancing mode. Test driver asserts: 1. All backends receive at least one RPC. The test driver adds a new MIG with two backends in the same zone. Test driver asserts: 1. All backends in each MIG receive at least one RPC. ### remove_instance_group This test verifies that a remaining instance group can successfully serve RPCs after removal of another instance group in the same zone. Client parameters: 1. --num_channels=1 1. --qps=10 Load balancer configuration: 1. Two MIGs with two backends each, using rate balancing mode. Test driver asserts: 1. All backends receive at least one RPC. The test driver removes one MIG. Test driver asserts: 1. All RPCs are directed to the two remaining backends (no RPC failures). ### change_backend_service This test verifies that the backend service can be replaced and traffic routed to the new backends. Client parameters: 1. --num_channels=1 1. --qps=10 1. --fail_on_failed_rpc=true Load balancer configuration: 1. One MIG with two backends Test driver asserts: 1. All backends receive at least one RPC. The test driver creates a new backend service containing a MIG with two backends and changes the TD URL map to point to this new backend service. Test driver asserts: 1. All RPCs are directed to the new backend service. grpc-1.30.2/etc/000077500000000000000000000000001370425124100133025ustar00rootroot00000000000000grpc-1.30.2/etc/README.md000066400000000000000000000003071370425124100145610ustar00rootroot00000000000000The roots.pem file is periodically generated from: https://hg.mozilla.org/mozilla-central/raw-file/tip/security/nss/lib/ckfw/builtins/certdata.txt using https://github.com/agl/extract-nss-root-certs grpc-1.30.2/etc/roots.pem000066400000000000000000010531041370425124100151570ustar00rootroot00000000000000# 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/. # Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA # Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA # Label: "GlobalSign Root CA" # Serial: 4835703278459707669005204 # MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a # SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c # SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99 -----BEGIN CERTIFICATE----- MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp 1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE 38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== -----END CERTIFICATE----- # Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 # Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 # Label: "GlobalSign Root CA - R2" # Serial: 4835703278459682885658125 # MD5 Fingerprint: 94:14:77:7e:3e:5e:fd:8f:30:bd:41:b0:cf:e7:d0:30 # SHA1 Fingerprint: 75:e0:ab:b6:13:85:12:27:1c:04:f8:5f:dd:de:38:e4:b7:24:2e:fe # SHA256 Fingerprint: ca:42:dd:41:74:5f:d0:b8:1e:b9:02:36:2c:f9:d8:bf:71:9d:a1:bd:1b:1e:fc:94:6f:5b:4c:99:f4:2c:1b:9e -----BEGIN CERTIFICATE----- MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG 3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO 291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== -----END CERTIFICATE----- # Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only # Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only # Label: "Verisign Class 3 Public Primary Certification Authority - G3" # Serial: 206684696279472310254277870180966723415 # MD5 Fingerprint: cd:68:b6:a7:c7:c4:ce:75:e0:1d:4f:57:44:61:92:09 # SHA1 Fingerprint: 13:2d:0d:45:53:4b:69:97:cd:b2:d5:c3:39:e2:55:76:60:9b:5c:c6 # SHA256 Fingerprint: eb:04:cf:5e:b1:f3:9a:fa:76:2f:2b:b1:20:f2:96:cb:a5:20:c1:b9:7d:b1:58:95:65:b8:1c:b9:a1:7b:72:44 -----BEGIN CERTIFICATE----- MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te 2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC /Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== -----END CERTIFICATE----- # Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited # Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited # Label: "Entrust.net Premium 2048 Secure Server CA" # Serial: 946069240 # MD5 Fingerprint: ee:29:31:bc:32:7e:9a:e6:e8:b5:f7:51:b4:34:71:90 # SHA1 Fingerprint: 50:30:06:09:1d:97:d4:f5:ae:39:f7:cb:e7:92:7d:7d:65:2d:34:31 # SHA256 Fingerprint: 6d:c4:71:72:e0:1c:bc:b0:bf:62:58:0d:89:5f:e2:b8:ac:9a:d4:f8:73:80:1e:0c:10:b9:c8:37:d2:1e:b1:77 -----BEGIN CERTIFICATE----- MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3 MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH 4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+ bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er fF6adulZkMV8gzURZVE= -----END CERTIFICATE----- # Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust # Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust # Label: "Baltimore CyberTrust Root" # Serial: 33554617 # MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4 # SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74 # SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb -----BEGIN CERTIFICATE----- MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp -----END CERTIFICATE----- # Issuer: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network # Subject: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network # Label: "AddTrust External Root" # Serial: 1 # MD5 Fingerprint: 1d:35:54:04:85:78:b0:3f:42:42:4d:bf:20:73:0a:3f # SHA1 Fingerprint: 02:fa:f3:e2:91:43:54:68:60:78:57:69:4d:f5:e4:5b:68:85:18:68 # SHA256 Fingerprint: 68:7f:a4:51:38:22:78:ff:f0:c8:b1:1f:8d:43:d5:76:67:1c:6e:b2:bc:ea:b4:13:fb:83:d9:65:d0:6d:2f:f2 -----BEGIN CERTIFICATE----- MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= -----END CERTIFICATE----- # Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. # Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. # Label: "Entrust Root Certification Authority" # Serial: 1164660820 # MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4 # SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9 # SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c -----BEGIN CERTIFICATE----- MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi 94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP 9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m 0vdXcDazv/wor3ElhVsT/h5/WrQ8 -----END CERTIFICATE----- # Issuer: CN=GeoTrust Global CA O=GeoTrust Inc. # Subject: CN=GeoTrust Global CA O=GeoTrust Inc. # Label: "GeoTrust Global CA" # Serial: 144470 # MD5 Fingerprint: f7:75:ab:29:fb:51:4e:b7:77:5e:ff:05:3c:99:8e:f5 # SHA1 Fingerprint: de:28:f4:a4:ff:e5:b9:2f:a3:c5:03:d1:a3:49:a7:f9:96:2a:82:12 # SHA256 Fingerprint: ff:85:6a:2d:25:1d:cd:88:d3:66:56:f4:50:12:67:98:cf:ab:aa:de:40:79:9c:72:2d:e4:d2:b5:db:36:a7:3a -----BEGIN CERTIFICATE----- MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU 1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV 5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== -----END CERTIFICATE----- # Issuer: CN=GeoTrust Universal CA O=GeoTrust Inc. # Subject: CN=GeoTrust Universal CA O=GeoTrust Inc. # Label: "GeoTrust Universal CA" # Serial: 1 # MD5 Fingerprint: 92:65:58:8b:a2:1a:31:72:73:68:5c:b4:a5:7a:07:48 # SHA1 Fingerprint: e6:21:f3:35:43:79:05:9a:4b:68:30:9d:8a:2f:74:22:15:87:ec:79 # SHA256 Fingerprint: a0:45:9b:9f:63:b2:25:59:f5:fa:5d:4c:6d:b3:f9:f7:2f:f1:93:42:03:35:78:f0:73:bf:1d:1b:46:cb:b9:12 -----BEGIN CERTIFICATE----- MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0 IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8 cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+ nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB /wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG 9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9 ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= -----END CERTIFICATE----- # Issuer: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. # Subject: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. # Label: "GeoTrust Universal CA 2" # Serial: 1 # MD5 Fingerprint: 34:fc:b8:d0:36:db:9e:14:b3:c2:f2:db:8f:e4:94:c7 # SHA1 Fingerprint: 37:9a:19:7b:41:85:45:35:0c:a6:03:69:f3:3c:2e:af:47:4f:20:79 # SHA256 Fingerprint: a0:23:4f:3b:c8:52:7c:a5:62:8e:ec:81:ad:5d:69:89:5d:a5:68:0d:c9:1d:1c:b8:47:7f:33:f8:78:b9:5b:0b -----BEGIN CERTIFICATE----- MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1 c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81 WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73 y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4 Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m 1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH 6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS -----END CERTIFICATE----- # Issuer: CN=AAA Certificate Services O=Comodo CA Limited # Subject: CN=AAA Certificate Services O=Comodo CA Limited # Label: "Comodo AAA Services root" # Serial: 1 # MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0 # SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49 # SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4 -----BEGIN CERTIFICATE----- MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe 3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== -----END CERTIFICATE----- # Issuer: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority # Subject: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority # Label: "QuoVadis Root CA" # Serial: 985026699 # MD5 Fingerprint: 27:de:36:fe:72:b7:00:03:00:9d:f4:f0:1e:6c:04:24 # SHA1 Fingerprint: de:3f:40:bd:50:93:d3:9b:6c:60:f6:da:bc:07:62:01:00:89:76:c9 # SHA256 Fingerprint: a4:5e:de:3b:bb:f0:9c:8a:e1:5c:72:ef:c0:72:68:d6:93:a2:1c:99:6f:d5:1e:67:ca:07:94:60:fd:6d:88:73 -----BEGIN CERTIFICATE----- MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0 aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0 aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8 7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK SnQ2+Q== -----END CERTIFICATE----- # Issuer: CN=QuoVadis Root CA 2 O=QuoVadis Limited # Subject: CN=QuoVadis Root CA 2 O=QuoVadis Limited # Label: "QuoVadis Root CA 2" # Serial: 1289 # MD5 Fingerprint: 5e:39:7b:dd:f8:ba:ec:82:e9:ac:62:ba:0c:54:00:2b # SHA1 Fingerprint: ca:3a:fb:cf:12:40:36:4b:44:b2:16:20:88:80:48:39:19:93:7c:f7 # SHA256 Fingerprint: 85:a0:dd:7d:d7:20:ad:b7:ff:05:f8:3d:54:2b:20:9d:c7:ff:45:28:f7:d6:77:b1:83:89:fe:a5:e5:c4:9e:86 -----BEGIN CERTIFICATE----- MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp +ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og /zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y 4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza 8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u -----END CERTIFICATE----- # Issuer: CN=QuoVadis Root CA 3 O=QuoVadis Limited # Subject: CN=QuoVadis Root CA 3 O=QuoVadis Limited # Label: "QuoVadis Root CA 3" # Serial: 1478 # MD5 Fingerprint: 31:85:3c:62:94:97:63:b9:aa:fd:89:4e:af:6f:e0:cf # SHA1 Fingerprint: 1f:49:14:f7:d8:74:95:1d:dd:ae:02:c0:be:fd:3a:2d:82:75:51:85 # SHA256 Fingerprint: 18:f1:fc:7f:20:5d:f8:ad:dd:eb:7f:e0:07:dd:57:e3:af:37:5a:9c:4d:8d:73:54:6b:f4:f1:fe:d1:e1:8d:35 -----BEGIN CERTIFICATE----- MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB 4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd 8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A 4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd +LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B 4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK 4SVhM7JZG+Ju1zdXtg2pEto= -----END CERTIFICATE----- # Issuer: O=SECOM Trust.net OU=Security Communication RootCA1 # Subject: O=SECOM Trust.net OU=Security Communication RootCA1 # Label: "Security Communication Root CA" # Serial: 0 # MD5 Fingerprint: f1:bc:63:6a:54:e0:b5:27:f5:cd:e7:1a:e3:4d:6e:4a # SHA1 Fingerprint: 36:b1:2b:49:f9:81:9e:d7:4c:9e:bc:38:0f:c6:56:8f:5d:ac:b2:f7 # SHA256 Fingerprint: e7:5e:72:ed:9f:56:0e:ec:6e:b4:80:00:73:a4:3f:c3:ad:19:19:5a:39:22:82:01:78:95:97:4a:99:02:6b:6c -----BEGIN CERTIFICATE----- MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5 WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8 9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9 Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5 Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== -----END CERTIFICATE----- # Issuer: CN=Sonera Class2 CA O=Sonera # Subject: CN=Sonera Class2 CA O=Sonera # Label: "Sonera Class 2 Root CA" # Serial: 29 # MD5 Fingerprint: a3:ec:75:0f:2e:88:df:fa:48:01:4e:0b:5c:48:6f:fb # SHA1 Fingerprint: 37:f7:6d:e6:07:7c:90:c5:b1:3e:93:1a:b7:41:10:b4:f2:e4:9a:27 # SHA256 Fingerprint: 79:08:b4:03:14:c1:38:10:0b:51:8d:07:35:80:7f:fb:fc:f8:51:8a:00:95:33:71:05:ba:38:6b:15:3d:d9:27 -----BEGIN CERTIFICATE----- MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt 5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s 3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu 8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/ 3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6 Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2 ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M -----END CERTIFICATE----- # Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com # Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com # Label: "XRamp Global CA Root" # Serial: 107108908803651509692980124233745014957 # MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1 # SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6 # SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2 -----BEGIN CERTIFICATE----- MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ O+7ETPTsJ3xCwnR8gooJybQDJbw= -----END CERTIFICATE----- # Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority # Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority # Label: "Go Daddy Class 2 CA" # Serial: 0 # MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67 # SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4 # SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4 -----BEGIN CERTIFICATE----- MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h /t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf ReYNnyicsbkqWletNw+vHX/bvZ8= -----END CERTIFICATE----- # Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority # Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority # Label: "Starfield Class 2 CA" # Serial: 0 # MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24 # SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a # SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58 -----BEGIN CERTIFICATE----- MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf 8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN +lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA 1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= -----END CERTIFICATE----- # Issuer: O=Government Root Certification Authority # Subject: O=Government Root Certification Authority # Label: "Taiwan GRCA" # Serial: 42023070807708724159991140556527066870 # MD5 Fingerprint: 37:85:44:53:32:45:1f:20:f0:f3:95:e1:25:c4:43:4e # SHA1 Fingerprint: f4:8b:11:bf:de:ab:be:94:54:20:71:e6:41:de:6b:be:88:2b:40:b9 # SHA256 Fingerprint: 76:00:29:5e:ef:e8:5b:9e:1f:d6:24:db:76:06:2a:aa:ae:59:81:8a:54:d2:77:4c:d4:c0:b2:c0:11:31:e1:b3 -----BEGIN CERTIFICATE----- MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/ MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2 jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7 hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1 EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl pYYsfPQS -----END CERTIFICATE----- # Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com # Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com # Label: "DigiCert Assured ID Root CA" # Serial: 17154717934120587862167794914071425081 # MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72 # SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43 # SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c -----BEGIN CERTIFICATE----- MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== -----END CERTIFICATE----- # Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com # Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com # Label: "DigiCert Global Root CA" # Serial: 10944719598952040374951832963794454346 # MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e # SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36 # SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61 -----BEGIN CERTIFICATE----- MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt 43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg 06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= -----END CERTIFICATE----- # Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com # Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com # Label: "DigiCert High Assurance EV Root CA" # Serial: 3553400076410547919724730734378100087 # MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a # SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25 # SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf -----BEGIN CERTIFICATE----- MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm +9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep +OkuE6N36B9K -----END CERTIFICATE----- # Issuer: CN=DST Root CA X3 O=Digital Signature Trust Co. # Subject: CN=DST Root CA X3 O=Digital Signature Trust Co. # Label: "DST Root CA X3" # Serial: 91299735575339953335919266965803778155 # MD5 Fingerprint: 41:03:52:dc:0f:f7:50:1b:16:f0:02:8e:ba:6f:45:c5 # SHA1 Fingerprint: da:c9:02:4f:54:d8:f6:df:94:93:5f:b1:73:26:38:ca:6a:d7:7c:13 # SHA256 Fingerprint: 06:87:26:03:31:a7:24:03:d9:09:f1:05:e6:9b:cf:0d:32:e1:bd:24:93:ff:c6:d9:20:6d:11:bc:d6:77:07:39 -----BEGIN CERTIFICATE----- MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw 7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ -----END CERTIFICATE----- # Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG # Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG # Label: "SwissSign Gold CA - G2" # Serial: 13492815561806991280 # MD5 Fingerprint: 24:77:d9:a8:91:d1:3b:fa:88:2d:c2:ff:f8:cd:33:93 # SHA1 Fingerprint: d8:c5:38:8a:b7:30:1b:1b:6e:d4:7a:e6:45:25:3a:6f:9f:1a:27:61 # SHA256 Fingerprint: 62:dd:0b:e9:b9:f5:0a:16:3e:a0:f8:e7:5c:05:3b:1e:ca:57:ea:55:c8:68:8f:64:7c:68:81:f2:c8:35:7b:95 -----BEGIN CERTIFICATE----- MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8 76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+ bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c 6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7 lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn 8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6 45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5 O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a 77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3 92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ -----END CERTIFICATE----- # Issuer: CN=SwissSign Silver CA - G2 O=SwissSign AG # Subject: CN=SwissSign Silver CA - G2 O=SwissSign AG # Label: "SwissSign Silver CA - G2" # Serial: 5700383053117599563 # MD5 Fingerprint: e0:06:a1:c9:7d:cf:c9:fc:0d:c0:56:75:96:d8:62:13 # SHA1 Fingerprint: 9b:aa:e5:9f:56:ee:21:cb:43:5a:be:25:93:df:a7:f0:40:d1:1d:cb # SHA256 Fingerprint: be:6c:4d:a2:bb:b9:ba:59:b6:f3:93:97:68:37:42:46:c3:c0:05:99:3f:a9:8f:02:0d:1d:ed:be:d4:8a:81:d5 -----BEGIN CERTIFICATE----- MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH 6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/ c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6 5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9 xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ 2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8 aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/ OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+ hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u -----END CERTIFICATE----- # Issuer: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. # Subject: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. # Label: "GeoTrust Primary Certification Authority" # Serial: 32798226551256963324313806436981982369 # MD5 Fingerprint: 02:26:c3:01:5e:08:30:37:43:a9:d0:7d:cf:37:e6:bf # SHA1 Fingerprint: 32:3c:11:8e:1b:f7:b8:b6:52:54:e2:e2:10:0d:d6:02:90:37:f0:96 # SHA256 Fingerprint: 37:d5:10:06:c5:12:ea:ab:62:64:21:f1:ec:8c:92:01:3f:c5:f8:2a:e9:8e:e5:33:eb:46:19:b8:de:b4:d0:6c -----BEGIN CERTIFICATE----- MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl 4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= -----END CERTIFICATE----- # Issuer: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only # Subject: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only # Label: "thawte Primary Root CA" # Serial: 69529181992039203566298953787712940909 # MD5 Fingerprint: 8c:ca:dc:0b:22:ce:f5:be:72:ac:41:1a:11:a8:d8:12 # SHA1 Fingerprint: 91:c6:d6:ee:3e:8a:c8:63:84:e5:48:c2:99:29:5c:75:6c:81:7b:81 # SHA256 Fingerprint: 8d:72:2f:81:a9:c1:13:c0:79:1d:f1:36:a2:96:6d:b2:6c:95:0a:97:1d:b4:6b:41:99:f4:ea:54:b7:8b:fb:9f -----BEGIN CERTIFICATE----- MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta 3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk 6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 /qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 jVaMaA== -----END CERTIFICATE----- # Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only # Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only # Label: "VeriSign Class 3 Public Primary Certification Authority - G5" # Serial: 33037644167568058970164719475676101450 # MD5 Fingerprint: cb:17:e4:31:67:3e:e2:09:fe:45:57:93:f3:0a:fa:1c # SHA1 Fingerprint: 4e:b6:d5:78:49:9b:1c:cf:5f:58:1e:ad:56:be:3d:9b:67:44:a5:e5 # SHA256 Fingerprint: 9a:cf:ab:7e:43:c8:d8:80:d0:6b:26:2a:94:de:ee:e4:b4:65:99:89:c3:d0:ca:f1:9b:af:64:05:e4:1a:b7:df -----BEGIN CERTIFICATE----- MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y 5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ 4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq -----END CERTIFICATE----- # Issuer: CN=SecureTrust CA O=SecureTrust Corporation # Subject: CN=SecureTrust CA O=SecureTrust Corporation # Label: "SecureTrust CA" # Serial: 17199774589125277788362757014266862032 # MD5 Fingerprint: dc:32:c3:a7:6d:25:57:c7:68:09:9d:ea:2d:a9:a2:d1 # SHA1 Fingerprint: 87:82:c6:c3:04:35:3b:cf:d2:96:92:d2:59:3e:7d:44:d9:34:ff:11 # SHA256 Fingerprint: f1:c1:b5:0a:e5:a2:0d:d8:03:0e:c9:f6:bc:24:82:3d:d3:67:b5:25:57:59:b4:e7:1b:61:fc:e9:f7:37:5d:73 -----BEGIN CERTIFICATE----- MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO 0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj 7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS 8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB /zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ 3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR 3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= -----END CERTIFICATE----- # Issuer: CN=Secure Global CA O=SecureTrust Corporation # Subject: CN=Secure Global CA O=SecureTrust Corporation # Label: "Secure Global CA" # Serial: 9751836167731051554232119481456978597 # MD5 Fingerprint: cf:f4:27:0d:d4:ed:dc:65:16:49:6d:3d:da:bf:6e:de # SHA1 Fingerprint: 3a:44:73:5a:e5:81:90:1f:24:86:61:46:1e:3b:9c:c4:5f:f5:3a:1b # SHA256 Fingerprint: 42:00:f5:04:3a:c8:59:0e:bb:52:7d:20:9e:d1:50:30:29:fb:cb:d4:1c:a1:b5:06:ec:27:f1:5a:de:7d:ac:69 -----BEGIN CERTIFICATE----- MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa /FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW -----END CERTIFICATE----- # Issuer: CN=COMODO Certification Authority O=COMODO CA Limited # Subject: CN=COMODO Certification Authority O=COMODO CA Limited # Label: "COMODO Certification Authority" # Serial: 104350513648249232941998508985834464573 # MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75 # SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b # SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66 -----BEGIN CERTIFICATE----- MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI 2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp +2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW /zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB ZQ== -----END CERTIFICATE----- # Issuer: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. # Subject: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. # Label: "Network Solutions Certificate Authority" # Serial: 116697915152937497490437556386812487904 # MD5 Fingerprint: d3:f3:a6:16:c0:fa:6b:1d:59:b1:2d:96:4d:0e:11:2e # SHA1 Fingerprint: 74:f8:a3:c3:ef:e7:b3:90:06:4b:83:90:3c:21:64:60:20:e5:df:ce # SHA256 Fingerprint: 15:f0:ba:00:a3:ac:7a:f3:ac:88:4c:07:2b:10:11:a0:77:bd:77:c0:97:f4:01:64:b2:f8:59:8a:bd:83:86:0c -----BEGIN CERTIFICATE----- MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH /nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey -----END CERTIFICATE----- # Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited # Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited # Label: "COMODO ECC Certification Authority" # Serial: 41578283867086692638256921589707938090 # MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 # SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 # SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 -----BEGIN CERTIFICATE----- MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= -----END CERTIFICATE----- # Issuer: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed # Subject: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed # Label: "OISTE WISeKey Global Root GA CA" # Serial: 86718877871133159090080555911823548314 # MD5 Fingerprint: bc:6c:51:33:a7:e9:d3:66:63:54:15:72:1b:21:92:93 # SHA1 Fingerprint: 59:22:a1:e1:5a:ea:16:35:21:f8:98:39:6a:46:46:b0:44:1b:0f:a9 # SHA256 Fingerprint: 41:c9:23:86:6a:b4:ca:d6:b7:ad:57:80:81:58:2e:02:07:97:a6:cb:df:4f:ff:78:ce:83:96:b3:89:37:d7:f5 -----BEGIN CERTIFICATE----- MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2 w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg 4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9 4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2 ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8 vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ /L7fCg0= -----END CERTIFICATE----- # Issuer: CN=Certigna O=Dhimyotis # Subject: CN=Certigna O=Dhimyotis # Label: "Certigna" # Serial: 18364802974209362175 # MD5 Fingerprint: ab:57:a6:5b:7d:42:82:19:b5:d8:58:26:28:5e:fd:ff # SHA1 Fingerprint: b1:2e:13:63:45:86:a4:6f:1a:b2:60:68:37:58:2d:c4:ac:fd:94:97 # SHA256 Fingerprint: e3:b6:a2:db:2e:d7:ce:48:84:2f:7a:c5:32:41:c7:b7:1d:54:14:4b:fb:40:c1:1f:3f:1d:0b:42:f5:ee:a1:2d -----BEGIN CERTIFICATE----- MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q 130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG 9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== -----END CERTIFICATE----- # Issuer: CN=Cybertrust Global Root O=Cybertrust, Inc # Subject: CN=Cybertrust Global Root O=Cybertrust, Inc # Label: "Cybertrust Global Root" # Serial: 4835703278459682877484360 # MD5 Fingerprint: 72:e4:4a:87:e3:69:40:80:77:ea:bc:e3:f4:ff:f0:e1 # SHA1 Fingerprint: 5f:43:e5:b1:bf:f8:78:8c:ac:1c:c7:ca:4a:9a:c6:22:2b:cc:34:c6 # SHA256 Fingerprint: 96:0a:df:00:63:e9:63:56:75:0c:29:65:dd:0a:08:67:da:0b:9c:bd:6e:77:71:4a:ea:fb:23:49:ab:39:3d:a3 -----BEGIN CERTIFICATE----- MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5 7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW WL1WMRJOEcgh4LMRkWXbtKaIOM5V -----END CERTIFICATE----- # Issuer: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority # Subject: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority # Label: "ePKI Root Certification Authority" # Serial: 28956088682735189655030529057352760477 # MD5 Fingerprint: 1b:2e:00:ca:26:06:90:3d:ad:fe:6f:15:68:d3:6b:b3 # SHA1 Fingerprint: 67:65:0d:f1:7e:8e:7e:5b:82:40:a4:f4:56:4b:cf:e2:3d:69:c6:f0 # SHA256 Fingerprint: c0:a6:f4:dc:63:a2:4b:fd:cf:54:ef:2a:6a:08:2a:0a:72:de:35:80:3e:2f:f5:ff:52:7a:e5:d8:72:06:df:d5 -----BEGIN CERTIFICATE----- MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS /jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D hNQ+IIX3Sj0rnP0qCglN6oH4EZw= -----END CERTIFICATE----- # Issuer: O=certSIGN OU=certSIGN ROOT CA # Subject: O=certSIGN OU=certSIGN ROOT CA # Label: "certSIGN ROOT CA" # Serial: 35210227249154 # MD5 Fingerprint: 18:98:c0:d6:e9:3a:fc:f9:b0:f5:0c:f7:4b:01:44:17 # SHA1 Fingerprint: fa:b7:ee:36:97:26:62:fb:2d:b0:2a:f6:bf:03:fd:e8:7c:4b:2f:9b # SHA256 Fingerprint: ea:a9:62:c4:fa:4a:6b:af:eb:e4:15:19:6d:35:1c:cd:88:8d:4f:53:f3:fa:8a:e6:d7:c4:66:a9:4e:60:42:bb -----BEGIN CERTIFICATE----- MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do 0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ 44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN 9u6wWk5JRFRYX0KD -----END CERTIFICATE----- # Issuer: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only # Subject: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only # Label: "GeoTrust Primary Certification Authority - G3" # Serial: 28809105769928564313984085209975885599 # MD5 Fingerprint: b5:e8:34:36:c9:10:44:58:48:70:6d:2e:83:d4:b8:05 # SHA1 Fingerprint: 03:9e:ed:b8:0b:e7:a0:3c:69:53:89:3b:20:d2:d9:32:3a:4c:2a:fd # SHA256 Fingerprint: b4:78:b8:12:25:0d:f8:78:63:5c:2a:a7:ec:7d:15:5e:aa:62:5e:e8:29:16:e2:cd:29:43:61:88:6c:d1:fb:d4 -----BEGIN CERTIFICATE----- MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz +uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn 5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G spki4cErx5z481+oghLrGREt -----END CERTIFICATE----- # Issuer: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only # Subject: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only # Label: "thawte Primary Root CA - G2" # Serial: 71758320672825410020661621085256472406 # MD5 Fingerprint: 74:9d:ea:60:24:c4:fd:22:53:3e:cc:3a:72:d9:29:4f # SHA1 Fingerprint: aa:db:bc:22:23:8f:c4:01:a1:27:bb:38:dd:f4:1d:db:08:9e:f0:12 # SHA256 Fingerprint: a4:31:0d:50:af:18:a6:44:71:90:37:2a:86:af:af:8b:95:1f:fb:43:1d:83:7f:1e:56:88:b4:59:71:ed:15:57 -----BEGIN CERTIFICATE----- MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/ BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3 KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== -----END CERTIFICATE----- # Issuer: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only # Subject: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only # Label: "thawte Primary Root CA - G3" # Serial: 127614157056681299805556476275995414779 # MD5 Fingerprint: fb:1b:5d:43:8a:94:cd:44:c6:76:f2:43:4b:47:e7:31 # SHA1 Fingerprint: f1:8b:53:8d:1b:e9:03:b6:a6:f0:56:43:5b:17:15:89:ca:f3:6b:f2 # SHA256 Fingerprint: 4b:03:f4:58:07:ad:70:f2:1b:fc:2c:ae:71:c9:fd:e4:60:4c:06:4c:f5:ff:b6:86:ba:e5:db:aa:d7:fd:d3:4c -----BEGIN CERTIFICATE----- MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8 YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9 9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA 2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu MdRAGmI0Nj81Aa6sY6A= -----END CERTIFICATE----- # Issuer: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only # Subject: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only # Label: "GeoTrust Primary Certification Authority - G2" # Serial: 80682863203381065782177908751794619243 # MD5 Fingerprint: 01:5e:d8:6b:bd:6f:3d:8e:a1:31:f8:12:e0:98:73:6a # SHA1 Fingerprint: 8d:17:84:d5:37:f3:03:7d:ec:70:fe:57:8b:51:9a:99:e6:10:d7:b0 # SHA256 Fingerprint: 5e:db:7a:c4:3b:82:a0:6a:87:61:e8:d7:be:49:79:eb:f2:61:1f:7d:d7:9b:f9:1c:1c:6b:56:6a:21:9e:d7:66 -----BEGIN CERTIFICATE----- MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz rD6ogRLQy7rQkgu2npaqBA+K -----END CERTIFICATE----- # Issuer: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only # Subject: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only # Label: "VeriSign Universal Root Certification Authority" # Serial: 85209574734084581917763752644031726877 # MD5 Fingerprint: 8e:ad:b5:01:aa:4d:81:e4:8c:1d:d1:e1:14:00:95:19 # SHA1 Fingerprint: 36:79:ca:35:66:87:72:30:4d:30:a5:fb:87:3b:0f:a7:7b:b7:0d:54 # SHA256 Fingerprint: 23:99:56:11:27:a5:71:25:de:8c:ef:ea:61:0d:df:2f:a0:78:b5:c8:06:7f:4e:82:82:90:bf:b8:60:e8:4b:3c -----BEGIN CERTIFICATE----- MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF 9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN /BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4 sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+ seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz 4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+ BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3 7M2CYfE45k+XmCpajQ== -----END CERTIFICATE----- # Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only # Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only # Label: "VeriSign Class 3 Public Primary Certification Authority - G4" # Serial: 63143484348153506665311985501458640051 # MD5 Fingerprint: 3a:52:e1:e7:fd:6f:3a:e3:6f:f3:6f:99:1b:f9:22:41 # SHA1 Fingerprint: 22:d5:d8:df:8f:02:31:d1:8d:f7:9d:b7:cf:8a:2d:64:c9:3f:6c:3a # SHA256 Fingerprint: 69:dd:d7:ea:90:bb:57:c9:3e:13:5d:c8:5e:a6:fc:d5:48:0b:60:32:39:bd:c4:54:fc:75:8b:2a:26:cf:7f:79 -----BEGIN CERTIFICATE----- MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC 4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== -----END CERTIFICATE----- # Issuer: CN=NetLock Arany (Class Gold) Főtanúsítvány O=NetLock Kft. OU=Tanúsítványkiadók (Certification Services) # Subject: CN=NetLock Arany (Class Gold) Főtanúsítvány O=NetLock Kft. OU=Tanúsítványkiadók (Certification Services) # Label: "NetLock Arany (Class Gold) Főtanúsítvány" # Serial: 80544274841616 # MD5 Fingerprint: c5:a1:b7:ff:73:dd:d6:d7:34:32:18:df:fc:3c:ad:88 # SHA1 Fingerprint: 06:08:3f:59:3f:15:a1:04:a0:69:a4:6b:a9:03:d0:06:b7:97:09:91 # SHA256 Fingerprint: 6c:61:da:c3:a2:de:f0:31:50:6b:e0:36:d2:a6:fe:40:19:94:fb:d1:3d:f9:c8:d4:66:59:92:74:c4:46:ec:98 -----BEGIN CERTIFICATE----- MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C +C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= -----END CERTIFICATE----- # Issuer: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden # Subject: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden # Label: "Staat der Nederlanden Root CA - G2" # Serial: 10000012 # MD5 Fingerprint: 7c:a5:0f:f8:5b:9a:7d:6d:30:ae:54:5a:e3:42:a2:8a # SHA1 Fingerprint: 59:af:82:79:91:86:c7:b4:75:07:cb:cf:03:57:46:eb:04:dd:b7:16 # SHA256 Fingerprint: 66:8c:83:94:7d:a6:3b:72:4b:ec:e1:74:3c:31:a0:e6:ae:d0:db:8e:c5:b3:1b:e3:77:bb:78:4f:91:b6:71:6f -----BEGIN CERTIFICATE----- MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291 qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp 5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy 5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv 6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6 B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/ BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen 5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897 IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL +63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ== -----END CERTIFICATE----- # Issuer: CN=Hongkong Post Root CA 1 O=Hongkong Post # Subject: CN=Hongkong Post Root CA 1 O=Hongkong Post # Label: "Hongkong Post Root CA 1" # Serial: 1000 # MD5 Fingerprint: a8:0d:6f:39:78:b9:43:6d:77:42:6d:98:5a:cc:23:ca # SHA1 Fingerprint: d6:da:a8:20:8d:09:d2:15:4d:24:b5:2f:cb:34:6e:b2:58:b2:8a:58 # SHA256 Fingerprint: f9:e6:7d:33:6c:51:00:2a:c0:54:c6:32:02:2d:66:dd:a2:e7:e3:ff:f1:0a:d0:61:ed:31:d8:bb:b4:10:cf:b2 -----BEGIN CERTIFICATE----- MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9 nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3 7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi AmvZWg== -----END CERTIFICATE----- # Issuer: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. # Subject: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. # Label: "SecureSign RootCA11" # Serial: 1 # MD5 Fingerprint: b7:52:74:e2:92:b4:80:93:f2:75:e4:cc:d7:f2:ea:26 # SHA1 Fingerprint: 3b:c4:9f:48:f8:f3:73:a0:9c:1e:bd:f8:5b:b1:c3:65:c7:d8:11:b3 # SHA256 Fingerprint: bf:0f:ee:fb:9e:3a:58:1a:d5:f9:e9:db:75:89:98:57:43:d2:61:08:5c:4d:31:4f:6f:5d:72:59:aa:42:16:12 -----BEGIN CERTIFICATE----- MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0 MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8 h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9 UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni 8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5 pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN QSdJQO7e5iNEOdyhIta6A/I= -----END CERTIFICATE----- # Issuer: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. # Subject: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. # Label: "Microsec e-Szigno Root CA 2009" # Serial: 14014712776195784473 # MD5 Fingerprint: f8:49:f4:03:bc:44:2d:83:be:48:69:7d:29:64:fc:b1 # SHA1 Fingerprint: 89:df:74:fe:5c:f4:0f:4a:80:f9:e3:37:7d:54:da:91:e1:01:31:8e # SHA256 Fingerprint: 3c:5f:81:fe:a5:fa:b8:2c:64:bf:a2:ea:ec:af:cd:e8:e0:77:fc:86:20:a7:ca:e5:37:16:3d:f3:6e:db:f3:78 -----BEGIN CERTIFICATE----- MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 +rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c 2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW -----END CERTIFICATE----- # Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 # Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 # Label: "GlobalSign Root CA - R3" # Serial: 4835703278459759426209954 # MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 # SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad # SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b -----BEGIN CERTIFICATE----- MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK 6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH WD9f -----END CERTIFICATE----- # Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 # Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 # Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068" # Serial: 6047274297262753887 # MD5 Fingerprint: 73:3a:74:7a:ec:bb:a3:96:a6:c2:e4:e2:c8:9b:c0:c3 # SHA1 Fingerprint: ae:c5:fb:3f:c8:e1:bf:c4:e5:4f:03:07:5a:9a:e8:00:b7:f7:b6:fa # SHA256 Fingerprint: 04:04:80:28:bf:1f:28:64:d4:8f:9a:d4:d8:32:94:36:6a:82:88:56:55:3f:3b:14:30:3f:90:14:7f:5d:40:ef -----BEGIN CERTIFICATE----- MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF 6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF 661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9 am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1 ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481 PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS 3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF 3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V -----END CERTIFICATE----- # Issuer: CN=Izenpe.com O=IZENPE S.A. # Subject: CN=Izenpe.com O=IZENPE S.A. # Label: "Izenpe.com" # Serial: 917563065490389241595536686991402621 # MD5 Fingerprint: a6:b0:cd:85:80:da:5c:50:34:a3:39:90:2f:55:67:73 # SHA1 Fingerprint: 2f:78:3d:25:52:18:a7:4a:65:39:71:b5:2c:a2:9c:45:15:6f:e9:19 # SHA256 Fingerprint: 25:30:cc:8e:98:32:15:02:ba:d9:6f:9b:1f:ba:1b:09:9e:2d:29:9e:0f:45:48:bb:91:4f:36:3b:c0:d4:53:1f -----BEGIN CERTIFICATE----- MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4 MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6 ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+ JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+ HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56 awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/ QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+ naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== -----END CERTIFICATE----- # Issuer: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A. # Subject: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A. # Label: "Chambers of Commerce Root - 2008" # Serial: 11806822484801597146 # MD5 Fingerprint: 5e:80:9e:84:5a:0e:65:0b:17:02:f3:55:18:2a:3e:d7 # SHA1 Fingerprint: 78:6a:74:ac:76:ab:14:7f:9c:6a:30:50:ba:9e:a8:7e:fe:9a:ce:3c # SHA256 Fingerprint: 06:3e:4a:fa:c4:91:df:d3:32:f3:08:9b:85:42:e9:46:17:d8:93:d7:fe:94:4e:10:a7:93:7e:e2:9d:96:93:c0 -----BEGIN CERTIFICATE----- MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9 28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR 5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s +12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5 Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1 +HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF 5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1 glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2 pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ d0jQ -----END CERTIFICATE----- # Issuer: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A. # Subject: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A. # Label: "Global Chambersign Root - 2008" # Serial: 14541511773111788494 # MD5 Fingerprint: 9e:80:ff:78:01:0c:2e:c1:36:bd:fe:96:90:6e:08:f3 # SHA1 Fingerprint: 4a:bd:ee:ec:95:0d:35:9c:89:ae:c7:52:a1:2c:5b:29:f6:d6:aa:0c # SHA256 Fingerprint: 13:63:35:43:93:34:a7:69:80:16:a0:d3:24:de:72:28:4e:07:9d:7b:52:20:bb:8f:bd:74:78:16:ee:be:ba:ca -----BEGIN CERTIFICATE----- MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7 G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2 zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4 ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2 Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r 6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z 09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B -----END CERTIFICATE----- # Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. # Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. # Label: "Go Daddy Root Certificate Authority - G2" # Serial: 0 # MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 # SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b # SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da -----BEGIN CERTIFICATE----- MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH /PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu 9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo 2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI 4uJEvlz36hz1 -----END CERTIFICATE----- # Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. # Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. # Label: "Starfield Root Certificate Authority - G2" # Serial: 0 # MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 # SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e # SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 -----BEGIN CERTIFICATE----- MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg 8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 -----END CERTIFICATE----- # Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. # Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. # Label: "Starfield Services Root Certificate Authority - G2" # Serial: 0 # MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 # SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f # SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 -----BEGIN CERTIFICATE----- MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk 6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn 0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN sSi6 -----END CERTIFICATE----- # Issuer: CN=AffirmTrust Commercial O=AffirmTrust # Subject: CN=AffirmTrust Commercial O=AffirmTrust # Label: "AffirmTrust Commercial" # Serial: 8608355977964138876 # MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7 # SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7 # SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7 -----BEGIN CERTIFICATE----- MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= -----END CERTIFICATE----- # Issuer: CN=AffirmTrust Networking O=AffirmTrust # Subject: CN=AffirmTrust Networking O=AffirmTrust # Label: "AffirmTrust Networking" # Serial: 8957382827206547757 # MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f # SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f # SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b -----BEGIN CERTIFICATE----- MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp 6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= -----END CERTIFICATE----- # Issuer: CN=AffirmTrust Premium O=AffirmTrust # Subject: CN=AffirmTrust Premium O=AffirmTrust # Label: "AffirmTrust Premium" # Serial: 7893706540734352110 # MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57 # SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27 # SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a -----BEGIN CERTIFICATE----- MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ +jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S 5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B 8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc 0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e KeC2uAloGRwYQw== -----END CERTIFICATE----- # Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust # Subject: CN=AffirmTrust Premium ECC O=AffirmTrust # Label: "AffirmTrust Premium ECC" # Serial: 8401224907861490260 # MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d # SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb # SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23 -----BEGIN CERTIFICATE----- MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D 0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== -----END CERTIFICATE----- # Issuer: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority # Subject: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority # Label: "Certum Trusted Network CA" # Serial: 279744 # MD5 Fingerprint: d5:e9:81:40:c5:18:69:fc:46:2c:89:75:62:0f:aa:78 # SHA1 Fingerprint: 07:e0:32:e0:20:b7:2c:3f:19:2f:06:28:a2:59:3a:19:a7:0f:06:9e # SHA256 Fingerprint: 5c:58:46:8d:55:f5:8e:49:7e:74:39:82:d2:b5:00:10:b6:d1:65:37:4a:cf:83:a7:d4:a3:2d:b7:68:c4:40:8e -----BEGIN CERTIFICATE----- MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI 03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= -----END CERTIFICATE----- # Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA # Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA # Label: "TWCA Root Certification Authority" # Serial: 1 # MD5 Fingerprint: aa:08:8f:f6:f9:7b:b7:f2:b1:a7:1e:9b:ea:ea:bd:79 # SHA1 Fingerprint: cf:9e:87:6d:d3:eb:fc:42:26:97:a3:b5:a3:7a:a0:76:a9:06:23:48 # SHA256 Fingerprint: bf:d8:8f:e1:10:1c:41:ae:3e:80:1b:f8:be:56:35:0e:e9:ba:d1:a6:b9:bd:51:5e:dc:5c:6d:5b:87:11:ac:44 -----BEGIN CERTIFICATE----- MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx 3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== -----END CERTIFICATE----- # Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 # Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 # Label: "Security Communication RootCA2" # Serial: 0 # MD5 Fingerprint: 6c:39:7d:a4:0e:55:59:b2:3f:d6:41:b1:12:50:de:43 # SHA1 Fingerprint: 5f:3b:8c:f2:f8:10:b3:7d:78:b4:ce:ec:19:19:c3:73:34:b9:c7:74 # SHA256 Fingerprint: 51:3b:2c:ec:b8:10:d4:cd:e5:dd:85:39:1a:df:c6:c2:dd:60:d8:7b:b7:36:d2:b5:21:48:4a:a4:7a:0e:be:f6 -----BEGIN CERTIFICATE----- MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy 1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 -----END CERTIFICATE----- # Issuer: CN=EC-ACC O=Agencia Catalana de Certificacio (NIF Q-0801176-I) OU=Serveis Publics de Certificacio/Vegeu https://www.catcert.net/verarrel (c)03/Jerarquia Entitats de Certificacio Catalanes # Subject: CN=EC-ACC O=Agencia Catalana de Certificacio (NIF Q-0801176-I) OU=Serveis Publics de Certificacio/Vegeu https://www.catcert.net/verarrel (c)03/Jerarquia Entitats de Certificacio Catalanes # Label: "EC-ACC" # Serial: -23701579247955709139626555126524820479 # MD5 Fingerprint: eb:f5:9d:29:0d:61:f9:42:1f:7c:c2:ba:6d:e3:15:09 # SHA1 Fingerprint: 28:90:3a:63:5b:52:80:fa:e6:77:4c:0b:6d:a7:d6:ba:a6:4a:f2:e8 # SHA256 Fingerprint: 88:49:7f:01:60:2f:31:54:24:6a:e2:8c:4d:5a:ef:10:f1:d8:7e:bb:76:62:6f:4a:e0:b7:f9:5b:a7:96:87:99 -----BEGIN CERTIFICATE----- MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB 8zELMAkGA1UEBhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2Vy dGlmaWNhY2lvIChOSUYgUS0wODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1 YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYDVQQLEyxWZWdldSBodHRwczovL3d3 dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UECxMsSmVyYXJxdWlh IEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMTBkVD LUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQG EwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8g KE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBD ZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQu bmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMg ZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUNDMIIBIjAN BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R 85iKw5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm 4CgPukLjbo73FCeTae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaV HMf5NLWUhdWZXqBIoH7nF2W4onW4HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNd QlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0aE9jD2z3Il3rucO2n5nzbcc8t lGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw0JDnJwIDAQAB o4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4 opvpXY0wfwYDVR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBo dHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidW ZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAwDQYJKoZIhvcN AQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJlF7W2u++AVtd0x7Y /X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNaAl6k SBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhy Rp/7SNVel+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOS Agu+TGbrIP65y7WZf+a2E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xl nJ2lYJU6Un/10asIbvPuW/mIPX64b24D5EI= -----END CERTIFICATE----- # Issuer: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority # Subject: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority # Label: "Hellenic Academic and Research Institutions RootCA 2011" # Serial: 0 # MD5 Fingerprint: 73:9f:4c:4b:73:5b:79:e9:fa:ba:1c:ef:6e:cb:d5:c9 # SHA1 Fingerprint: fe:45:65:9b:79:03:5b:98:a1:61:b5:51:2e:ac:da:58:09:48:22:4d # SHA256 Fingerprint: bc:10:4f:15:a4:8b:e7:09:dc:a5:42:a7:e1:d4:b9:df:6f:05:45:27:e8:02:ea:a9:2d:59:54:44:25:8a:fe:71 -----BEGIN CERTIFICATE----- MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD 75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp 5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p 6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7 dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI l7WdmplNsDz4SgCbZN2fOUvRJ9e4 -----END CERTIFICATE----- # Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 # Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 # Label: "Actalis Authentication Root CA" # Serial: 6271844772424770508 # MD5 Fingerprint: 69:c1:0d:4f:07:a3:1b:c3:fe:56:3d:04:bc:11:f6:a6 # SHA1 Fingerprint: f3:73:b3:87:06:5a:28:84:8a:f2:f3:4a:ce:19:2b:dd:c7:8e:9c:ac # SHA256 Fingerprint: 55:92:60:84:ec:96:3a:64:b9:6e:2a:be:01:ce:0b:a8:6a:64:fb:fe:bc:c7:aa:b5:af:c1:55:b3:7f:d7:60:66 -----BEGIN CERTIFICATE----- MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX 4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ 51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== -----END CERTIFICATE----- # Issuer: O=Trustis Limited OU=Trustis FPS Root CA # Subject: O=Trustis Limited OU=Trustis FPS Root CA # Label: "Trustis FPS Root CA" # Serial: 36053640375399034304724988975563710553 # MD5 Fingerprint: 30:c9:e7:1e:6b:e6:14:eb:65:b2:16:69:20:31:67:4d # SHA1 Fingerprint: 3b:c0:38:0b:33:c3:f6:a6:0c:86:15:22:93:d9:df:f5:4b:81:c0:04 # SHA256 Fingerprint: c1:b4:82:99:ab:a5:20:8f:e9:63:0a:ce:55:ca:68:a0:3e:da:5a:51:9c:88:02:a0:d3:a6:73:be:8f:8e:55:7d -----BEGIN CERTIFICATE----- MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+ AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA 0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/ BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01 GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4 1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN ZetX2fNXlrtIzYE= -----END CERTIFICATE----- # Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 # Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 # Label: "Buypass Class 2 Root CA" # Serial: 2 # MD5 Fingerprint: 46:a7:d2:fe:45:fb:64:5a:a8:59:90:9b:78:44:9b:29 # SHA1 Fingerprint: 49:0a:75:74:de:87:0a:47:fe:58:ee:f6:c7:6b:eb:c6:0b:12:40:99 # SHA256 Fingerprint: 9a:11:40:25:19:7c:5b:b9:5d:94:e6:3d:55:cd:43:79:08:47:b6:46:b2:3c:df:11:ad:a4:a0:0e:ff:15:fb:48 -----BEGIN CERTIFICATE----- MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr 6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN 9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h 9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo +fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h 3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= -----END CERTIFICATE----- # Issuer: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 # Subject: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 # Label: "Buypass Class 3 Root CA" # Serial: 2 # MD5 Fingerprint: 3d:3b:18:9e:2c:64:5a:e8:d5:88:ce:0e:f9:37:c2:ec # SHA1 Fingerprint: da:fa:f7:fa:66:84:ec:06:8f:14:50:bd:c7:c2:81:a5:bc:a9:64:57 # SHA256 Fingerprint: ed:f7:eb:bc:a2:7a:2a:38:4d:38:7b:7d:40:10:c6:66:e2:ed:b4:84:3e:4c:29:b4:ae:1d:5b:93:32:e6:b2:4d -----BEGIN CERTIFICATE----- MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX 0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c /3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D 34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv 033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq 4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= -----END CERTIFICATE----- # Issuer: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center # Subject: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center # Label: "T-TeleSec GlobalRoot Class 3" # Serial: 1 # MD5 Fingerprint: ca:fb:40:a8:4e:39:92:8a:1d:fe:8e:2f:c4:27:ea:ef # SHA1 Fingerprint: 55:a6:72:3e:cb:f2:ec:cd:c3:23:74:70:19:9d:2a:be:11:e3:81:d1 # SHA256 Fingerprint: fd:73:da:d3:1c:64:4f:f1:b4:3b:ef:0c:cd:da:96:71:0b:9c:d9:87:5e:ca:7e:31:70:7a:f3:e9:6d:52:2b:bd -----BEGIN CERTIFICATE----- MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN 8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ 1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT 91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p TpPDpFQUWw== -----END CERTIFICATE----- # Issuer: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus # Subject: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus # Label: "EE Certification Centre Root CA" # Serial: 112324828676200291871926431888494945866 # MD5 Fingerprint: 43:5e:88:d4:7d:1a:4a:7e:fd:84:2e:52:eb:01:d4:6f # SHA1 Fingerprint: c9:a8:b9:e7:55:80:5e:58:e3:53:77:a7:25:eb:af:c3:7b:27:cc:d7 # SHA256 Fingerprint: 3e:84:ba:43:42:90:85:16:e7:75:73:c0:99:2f:09:79:ca:08:4e:46:85:68:1f:f1:95:cc:ba:8a:22:9b:8a:76 -----BEGIN CERTIFICATE----- MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1 MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1 czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE 1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/ zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0= -----END CERTIFICATE----- # Issuer: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH # Subject: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH # Label: "D-TRUST Root Class 3 CA 2 2009" # Serial: 623603 # MD5 Fingerprint: cd:e0:25:69:8d:47:ac:9c:89:35:90:f7:fd:51:3d:2f # SHA1 Fingerprint: 58:e8:ab:b0:36:15:33:fb:80:f7:9b:1b:6d:29:d3:ff:8d:5f:00:f0 # SHA256 Fingerprint: 49:e7:a4:42:ac:f0:ea:62:87:05:00:54:b5:25:64:b6:50:e4:f4:9e:42:e3:48:d6:aa:38:e0:39:e9:57:b1:c1 -----BEGIN CERTIFICATE----- MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp /hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y Johw1+qRzT65ysCQblrGXnRl11z+o+I= -----END CERTIFICATE----- # Issuer: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH # Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH # Label: "D-TRUST Root Class 3 CA 2 EV 2009" # Serial: 623604 # MD5 Fingerprint: aa:c6:43:2c:5e:2d:cd:c4:34:c0:50:4f:11:02:4f:b6 # SHA1 Fingerprint: 96:c9:1b:0b:95:b4:10:98:42:fa:d0:d8:22:79:fe:60:fa:b9:16:83 # SHA256 Fingerprint: ee:c5:49:6b:98:8c:e9:86:25:b9:34:09:2e:ec:29:08:be:d0:b0:f3:16:c2:d4:73:0c:84:ea:f1:f3:d3:48:81 -----BEGIN CERTIFICATE----- MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp 3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 -----END CERTIFICATE----- # Issuer: CN=CA Disig Root R2 O=Disig a.s. # Subject: CN=CA Disig Root R2 O=Disig a.s. # Label: "CA Disig Root R2" # Serial: 10572350602393338211 # MD5 Fingerprint: 26:01:fb:d8:27:a7:17:9a:45:54:38:1a:43:01:3b:03 # SHA1 Fingerprint: b5:61:eb:ea:a4:de:e4:25:4b:69:1a:98:a5:57:47:c2:34:c7:d9:71 # SHA256 Fingerprint: e2:3d:4a:03:6d:7b:70:e9:f5:95:b1:42:20:79:d2:b9:1e:df:bb:1f:b6:51:a0:63:3e:aa:8a:9d:c5:f8:07:03 -----BEGIN CERTIFICATE----- MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka +elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL -----END CERTIFICATE----- # Issuer: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV # Subject: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV # Label: "ACCVRAIZ1" # Serial: 6828503384748696800 # MD5 Fingerprint: d0:a0:5a:ee:05:b6:09:94:21:a1:7d:f1:b2:29:82:02 # SHA1 Fingerprint: 93:05:7a:88:15:c6:4f:ce:88:2f:fa:91:16:52:28:78:bc:53:64:17 # SHA256 Fingerprint: 9a:6e:c0:12:e1:a7:da:9d:be:34:19:4d:47:8a:d7:c0:db:18:22:fb:07:1d:f1:29:81:49:6e:d1:04:38:41:13 -----BEGIN CERTIFICATE----- MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/ 0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47 4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA 7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH 7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7 -----END CERTIFICATE----- # Issuer: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA # Subject: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA # Label: "TWCA Global Root CA" # Serial: 3262 # MD5 Fingerprint: f9:03:7e:cf:e6:9e:3c:73:7a:2a:90:07:69:ff:2b:96 # SHA1 Fingerprint: 9c:bb:48:53:f6:a4:f6:d3:52:a4:e8:32:52:55:60:13:f5:ad:af:65 # SHA256 Fingerprint: 59:76:90:07:f7:68:5d:0f:cd:50:87:2f:9f:95:d5:75:5a:5b:2b:45:7d:81:f3:69:2b:61:0a:98:67:2f:0e:1b -----BEGIN CERTIFICATE----- MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF 10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz 0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc 46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm 4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB /zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL 1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh 15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW 6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy KwbQBM0= -----END CERTIFICATE----- # Issuer: CN=TeliaSonera Root CA v1 O=TeliaSonera # Subject: CN=TeliaSonera Root CA v1 O=TeliaSonera # Label: "TeliaSonera Root CA v1" # Serial: 199041966741090107964904287217786801558 # MD5 Fingerprint: 37:41:49:1b:18:56:9a:26:f5:ad:c2:66:fb:40:a5:4c # SHA1 Fingerprint: 43:13:bb:96:f1:d5:86:9b:c1:4e:6a:92:f6:cf:f6:34:69:87:82:37 # SHA256 Fingerprint: dd:69:36:fe:21:f8:f0:77:c1:23:a1:a5:21:c1:22:24:f7:22:55:b7:3e:03:a7:26:06:93:e8:a2:4b:0f:a3:89 -----BEGIN CERTIFICATE----- MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2 MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1 7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+ /jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs 81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4 pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG 9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx 0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7 Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7 vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= -----END CERTIFICATE----- # Issuer: CN=E-Tugra Certification Authority O=E-Tuğra EBG Bilişim Teknolojileri ve Hizmetleri A.Ş. OU=E-Tugra Sertifikasyon Merkezi # Subject: CN=E-Tugra Certification Authority O=E-Tuğra EBG Bilişim Teknolojileri ve Hizmetleri A.Ş. OU=E-Tugra Sertifikasyon Merkezi # Label: "E-Tugra Certification Authority" # Serial: 7667447206703254355 # MD5 Fingerprint: b8:a1:03:63:b0:bd:21:71:70:8a:6f:13:3a:bb:79:49 # SHA1 Fingerprint: 51:c6:e7:08:49:06:6e:f3:92:d4:5c:a0:0d:6d:a3:62:8f:c3:52:39 # SHA256 Fingerprint: b0:bf:d5:2b:b0:d7:d9:bd:92:bf:5d:4d:c1:3d:a2:55:c0:2c:54:2f:37:83:65:ea:89:39:11:f5:5e:55:f2:3c -----BEGIN CERTIFICATE----- MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNV BAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBC aWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNV BAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQDDB9FLVR1 Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMwNTEyMDk0OFoXDTIz MDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+ BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhp em1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4vU/kwVRHoViVF56C/UY B4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vdhQd2h8y/L5VMzH2nPbxH D5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5KCKpbknSF Q9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEo q1+gElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3D k14opz8n8Y4e0ypQBaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcH fC425lAcP9tDJMW/hkd5s3kc91r0E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsut dEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gzrt48Ue7LE3wBf4QOXVGUnhMM ti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAqjqFGOjGY5RH8 zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUX U8u3Zg5mTPj5dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6 Jyr+zE7S6E5UMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5 XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAF Nzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAKkEh47U6YA5n+KGCR HTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jOXKqY GwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c 77NCR807VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3 +GbHeJAAFS6LrVE1Uweoa2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WK vJUawSg5TB9D0pH0clmKuVb8P7Sd2nCcdlqMQ1DujjByTd//SffGqWfZbawCEeI6 FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEVKV0jq9BgoRJP3vQXzTLl yb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gTDx4JnW2P AJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpD y4Q08ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8d NL/+I5c30jn6PQ0GC7TbO6Orb1wdtn7os4I07QZcJA== -----END CERTIFICATE----- # Issuer: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center # Subject: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center # Label: "T-TeleSec GlobalRoot Class 2" # Serial: 1 # MD5 Fingerprint: 2b:9b:9e:e4:7b:6c:1f:00:72:1a:cc:c1:77:79:df:6a # SHA1 Fingerprint: 59:0d:2d:7d:88:4f:40:2e:61:7e:a5:62:32:17:65:cf:17:d8:94:e9 # SHA256 Fingerprint: 91:e2:f5:78:8d:58:10:eb:a7:ba:58:73:7d:e1:54:8a:8e:ca:cd:01:45:98:bc:0b:14:3e:04:1b:17:05:25:52 -----BEGIN CERTIFICATE----- MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi 1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN 9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP BSeOE6Fuwg== -----END CERTIFICATE----- # Issuer: CN=Atos TrustedRoot 2011 O=Atos # Subject: CN=Atos TrustedRoot 2011 O=Atos # Label: "Atos TrustedRoot 2011" # Serial: 6643877497813316402 # MD5 Fingerprint: ae:b9:c4:32:4b:ac:7f:5d:66:cc:77:94:bb:2a:77:56 # SHA1 Fingerprint: 2b:b1:f5:3e:55:0c:1d:c5:f1:d4:e6:b7:6a:46:4b:55:06:02:ac:21 # SHA256 Fingerprint: f3:56:be:a2:44:b7:a9:1e:b3:5d:53:ca:9a:d7:86:4a:ce:01:8e:2d:35:d5:f8:f9:6d:df:68:a6:f4:1a:a4:74 -----BEGIN CERTIFICATE----- MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE AwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG EwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM FUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC REUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp Nb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM VD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+ SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ 4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi eowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG A1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3 DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j vZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP DpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc maHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D lmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed -----END CERTIFICATE----- # Issuer: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited # Subject: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited # Label: "QuoVadis Root CA 1 G3" # Serial: 687049649626669250736271037606554624078720034195 # MD5 Fingerprint: a4:bc:5b:3f:fe:37:9a:fa:64:f0:e2:fa:05:3d:0b:ab # SHA1 Fingerprint: 1b:8e:ea:57:96:29:1a:c9:39:ea:b8:0a:81:1a:73:73:c0:93:79:67 # SHA256 Fingerprint: 8a:86:6f:d1:b2:76:b5:7e:57:8e:92:1c:65:82:8a:2b:ed:58:e9:f2:f2:88:05:41:34:b7:f1:f4:bf:c9:cc:74 -----BEGIN CERTIFICATE----- MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh 4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc 3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD -----END CERTIFICATE----- # Issuer: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited # Subject: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited # Label: "QuoVadis Root CA 2 G3" # Serial: 390156079458959257446133169266079962026824725800 # MD5 Fingerprint: af:0c:86:6e:bf:40:2d:7f:0b:3e:12:50:ba:12:3d:06 # SHA1 Fingerprint: 09:3c:61:f3:8b:8b:dc:7d:55:df:75:38:02:05:00:e1:25:f5:c8:36 # SHA256 Fingerprint: 8f:e4:fb:0a:f9:3a:4d:0d:67:db:0b:eb:b2:3e:37:c7:1b:f3:25:dc:bc:dd:24:0e:a0:4d:af:58:b4:7e:18:40 -----BEGIN CERTIFICATE----- MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz 8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l 7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE +V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M -----END CERTIFICATE----- # Issuer: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited # Subject: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited # Label: "QuoVadis Root CA 3 G3" # Serial: 268090761170461462463995952157327242137089239581 # MD5 Fingerprint: df:7d:b9:ad:54:6f:68:a1:df:89:57:03:97:43:b0:d7 # SHA1 Fingerprint: 48:12:bd:92:3c:a8:c4:39:06:e7:30:6d:27:96:e6:a4:cf:22:2e:7d # SHA256 Fingerprint: 88:ef:81:de:20:2e:b0:18:45:2e:43:f8:64:72:5c:ea:5f:bd:1f:c2:d9:d2:05:73:07:09:c5:d8:b8:69:0f:46 -----BEGIN CERTIFICATE----- MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR /xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP 0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf 3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl 8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 -----END CERTIFICATE----- # Issuer: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com # Subject: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com # Label: "DigiCert Assured ID Root G2" # Serial: 15385348160840213938643033620894905419 # MD5 Fingerprint: 92:38:b9:f8:63:24:82:65:2c:57:33:e6:fe:81:8f:9d # SHA1 Fingerprint: a1:4b:48:d9:43:ee:0a:0e:40:90:4f:3c:e0:a4:c0:91:93:51:5d:3f # SHA256 Fingerprint: 7d:05:eb:b6:82:33:9f:8c:94:51:ee:09:4e:eb:fe:fa:79:53:a1:14:ed:b2:f4:49:49:45:2f:ab:7d:2f:c1:85 -----BEGIN CERTIFICATE----- MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I 0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo IhNzbM8m9Yop5w== -----END CERTIFICATE----- # Issuer: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com # Subject: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com # Label: "DigiCert Assured ID Root G3" # Serial: 15459312981008553731928384953135426796 # MD5 Fingerprint: 7c:7f:65:31:0c:81:df:8d:ba:3e:99:e2:5c:ad:6e:fb # SHA1 Fingerprint: f5:17:a2:4f:9a:48:c6:c9:f8:a2:00:26:9f:dc:0f:48:2c:ab:30:89 # SHA256 Fingerprint: 7e:37:cb:8b:4c:47:09:0c:ab:36:55:1b:a6:f4:5d:b8:40:68:0f:ba:16:6a:95:2d:b1:00:71:7f:43:05:3f:c2 -----BEGIN CERTIFICATE----- MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv 6pZjamVFkpUBtA== -----END CERTIFICATE----- # Issuer: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com # Subject: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com # Label: "DigiCert Global Root G2" # Serial: 4293743540046975378534879503202253541 # MD5 Fingerprint: e4:a6:8a:c8:54:ac:52:42:46:0a:fd:72:48:1b:2a:44 # SHA1 Fingerprint: df:3c:24:f9:bf:d6:66:76:1b:26:80:73:fe:06:d1:cc:8d:4f:82:a4 # SHA256 Fingerprint: cb:3c:cb:b7:60:31:e5:e0:13:8f:8d:d3:9a:23:f9:de:47:ff:c3:5e:43:c1:14:4c:ea:27:d4:6a:5a:b1:cb:5f -----BEGIN CERTIFICATE----- MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI 2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx 1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV 5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY 1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl MrY= -----END CERTIFICATE----- # Issuer: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com # Subject: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com # Label: "DigiCert Global Root G3" # Serial: 7089244469030293291760083333884364146 # MD5 Fingerprint: f5:5d:a4:50:a5:fb:28:7e:1e:0f:0d:cc:96:57:56:ca # SHA1 Fingerprint: 7e:04:de:89:6a:3e:66:6d:00:e6:87:d3:3f:fa:d9:3b:e8:3d:34:9e # SHA256 Fingerprint: 31:ad:66:48:f8:10:41:38:c7:38:f3:9e:a4:32:01:33:39:3e:3a:18:cc:02:29:6e:f9:7c:2a:c9:ef:67:31:d0 -----BEGIN CERTIFICATE----- MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 sycX -----END CERTIFICATE----- # Issuer: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com # Subject: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com # Label: "DigiCert Trusted Root G4" # Serial: 7451500558977370777930084869016614236 # MD5 Fingerprint: 78:f2:fc:aa:60:1f:2f:b4:eb:c9:37:ba:53:2e:75:49 # SHA1 Fingerprint: dd:fb:16:cd:49:31:c9:73:a2:03:7d:3f:c8:3a:4d:7d:77:5d:05:e4 # SHA256 Fingerprint: 55:2f:7b:dc:f1:a7:af:9e:6c:e6:72:01:7f:4f:12:ab:f7:72:40:c7:8e:76:1a:c2:03:d1:d9:d2:0a:c8:99:88 -----BEGIN CERTIFICATE----- MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t 9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd +SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N 0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie 4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 /YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ -----END CERTIFICATE----- # Issuer: CN=COMODO RSA Certification Authority O=COMODO CA Limited # Subject: CN=COMODO RSA Certification Authority O=COMODO CA Limited # Label: "COMODO RSA Certification Authority" # Serial: 101909084537582093308941363524873193117 # MD5 Fingerprint: 1b:31:b0:71:40:36:cc:14:36:91:ad:c4:3e:fd:ec:18 # SHA1 Fingerprint: af:e5:d2:44:a8:d1:19:42:30:ff:47:9f:e2:f8:97:bb:cd:7a:8c:b4 # SHA256 Fingerprint: 52:f0:e1:c4:e5:8e:c6:29:29:1b:60:31:7f:07:46:71:b8:5d:7e:a8:0d:5b:07:27:34:63:53:4b:32:b4:02:34 -----BEGIN CERTIFICATE----- MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR 6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC 9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV /erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z +pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB /wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM 4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV 2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl 0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB NVOFBkpdn627G190 -----END CERTIFICATE----- # Issuer: CN=USERTrust RSA Certification Authority O=The USERTRUST Network # Subject: CN=USERTrust RSA Certification Authority O=The USERTRUST Network # Label: "USERTrust RSA Certification Authority" # Serial: 2645093764781058787591871645665788717 # MD5 Fingerprint: 1b:fe:69:d1:91:b7:19:33:a3:72:a8:0f:e1:55:e5:b5 # SHA1 Fingerprint: 2b:8f:1b:57:33:0d:bb:a2:d0:7a:6c:51:f7:0e:e9:0d:da:b9:ad:8e # SHA256 Fingerprint: e7:93:c9:b0:2f:d8:aa:13:e2:1c:31:22:8a:cc:b0:81:19:64:3b:74:9c:89:89:64:b1:74:6d:46:c3:d4:cb:d2 -----BEGIN CERTIFICATE----- MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B 3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT 79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs 8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG jjxDah2nGN59PRbxYvnKkKj9 -----END CERTIFICATE----- # Issuer: CN=USERTrust ECC Certification Authority O=The USERTRUST Network # Subject: CN=USERTrust ECC Certification Authority O=The USERTRUST Network # Label: "USERTrust ECC Certification Authority" # Serial: 123013823720199481456569720443997572134 # MD5 Fingerprint: fa:68:bc:d9:b5:7f:ad:fd:c9:1d:06:83:28:cc:24:c1 # SHA1 Fingerprint: d1:cb:ca:5d:b2:d5:2a:7f:69:3b:67:4d:e5:f0:5a:1d:0c:95:7d:f0 # SHA256 Fingerprint: 4f:f4:60:d5:4b:9c:86:da:bf:bc:fc:57:12:e0:40:0d:2b:ed:3f:bc:4d:4f:bd:aa:86:e0:6a:dc:d2:a9:ad:7a -----BEGIN CERTIFICATE----- MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= -----END CERTIFICATE----- # Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 # Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 # Label: "GlobalSign ECC Root CA - R4" # Serial: 14367148294922964480859022125800977897474 # MD5 Fingerprint: 20:f0:27:68:d1:7e:a0:9d:0e:e6:2a:ca:df:5c:89:8e # SHA1 Fingerprint: 69:69:56:2e:40:80:f4:24:a1:e7:19:9f:14:ba:f3:ee:58:ab:6a:bb # SHA256 Fingerprint: be:c9:49:11:c2:95:56:76:db:6c:0a:55:09:86:d7:6e:3b:a0:05:66:7c:44:2c:97:62:b4:fb:b7:73:de:22:8c -----BEGIN CERTIFICATE----- MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEk MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpH bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD QSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprlOQcJ FspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAw DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61F uOJAf/sKbvu+M8k8o4TVMAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGX kPoUVy0D7O48027KqGx2vKLeuwIgJ6iFJzWbVsaj8kfSt24bAgAXqmemFZHe+pTs ewv4n4Q= -----END CERTIFICATE----- # Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 # Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 # Label: "GlobalSign ECC Root CA - R5" # Serial: 32785792099990507226680698011560947931244 # MD5 Fingerprint: 9f:ad:3b:1c:02:1e:8a:ba:17:74:38:81:0c:a2:bc:08 # SHA1 Fingerprint: 1f:24:c6:30:cd:a4:18:ef:20:69:ff:ad:4f:dd:5f:46:3a:1b:69:aa # SHA256 Fingerprint: 17:9f:bc:14:8a:3d:d0:0f:d2:4e:a1:34:58:cc:43:bf:a7:f5:9c:81:82:d7:83:a5:13:f6:eb:ec:10:0c:89:24 -----BEGIN CERTIFICATE----- MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc 8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg 515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO xwy8p2Fp8fc74SrL+SvzZpA3 -----END CERTIFICATE----- # Issuer: CN=Staat der Nederlanden Root CA - G3 O=Staat der Nederlanden # Subject: CN=Staat der Nederlanden Root CA - G3 O=Staat der Nederlanden # Label: "Staat der Nederlanden Root CA - G3" # Serial: 10003001 # MD5 Fingerprint: 0b:46:67:07:db:10:2f:19:8c:35:50:60:d1:0b:f4:37 # SHA1 Fingerprint: d8:eb:6b:41:51:92:59:e0:f3:e7:85:00:c0:3d:b6:88:97:c9:ee:fc # SHA256 Fingerprint: 3c:4f:b0:b9:5a:b8:b3:00:32:f4:32:b8:6f:53:5f:e1:72:c1:85:d0:fd:39:86:58:37:cf:36:18:7f:a6:f4:28 -----BEGIN CERTIFICATE----- MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloX DTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv b3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4yolQP cPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WW IkYFsO2tx1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqX xz8ecAgwoNzFs21v0IJyEavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFy KJLZWyNtZrVtB0LrpjPOktvA9mxjeM3KTj215VKb8b475lRgsGYeCasH/lSJEULR 9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUurmkVLoR9BvUhTFXFkC4az 5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU51nus6+N8 6U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7 Ngzp07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHP bMk7ccHViLVlvMDoFxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXt BznaqB16nzaeErAMZRKQFWDZJkBE41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTt XUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMBAAGjQjBAMA8GA1UdEwEB/wQF MAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleuyjWcLhL75Lpd INyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwp LiniyMMB8jPqKqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8 Ipf3YF3qKS9Ysr1YvY2WTxB1v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixp gZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA8KCWAg8zxXHzniN9lLf9OtMJgwYh /WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b8KKaa8MFSu1BYBQw 0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0rmj1A fsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq 4BZ+Extq1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR 1VmiiXTTn74eS9fGbbeIJG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/ QFH1T/U67cjF68IeHRaVesd+QnGTbksVtzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM 94B7IWcnMFk= -----END CERTIFICATE----- # Issuer: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden # Subject: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden # Label: "Staat der Nederlanden EV Root CA" # Serial: 10000013 # MD5 Fingerprint: fc:06:af:7b:e8:1a:f1:9a:b4:e8:d2:70:1f:c0:f5:ba # SHA1 Fingerprint: 76:e2:7e:c1:4f:db:82:c1:c0:a6:75:b5:05:be:3d:29:b4:ed:db:bb # SHA256 Fingerprint: 4d:24:91:41:4c:fe:95:67:46:ec:4c:ef:a6:cf:6f:72:e2:8a:13:29:43:2f:9d:8a:90:7a:c4:cb:5d:ad:c1:5a -----BEGIN CERTIFICATE----- MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJO TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFh dCBkZXIgTmVkZXJsYW5kZW4gRVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0y MjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIg TmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRlcmxhbmRlbiBFViBS b290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkkSzrS M4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nC UiY4iKTWO0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3d Z//BYY1jTw+bbRcwJu+r0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46p rfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13l pJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gVXJrm0w912fxBmJc+qiXb j5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr08C+eKxC KFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS /ZbV0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0X cgOPvZuM5l5Tnrmd74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH 1vI4gnPah1vlPNOePqc7nvQDs/nxfRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrP px9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB /zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwaivsnuL8wbqg7 MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u 2dfOWBfoqSmuc0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHS v4ilf0X8rLiltTMMgsT7B/Zq5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTC wPTxGfARKbalGAKb12NMcIxHowNDXLldRqANb/9Zjr7dn3LDWyvfjFvO5QxGbJKy CqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tNf1zuacpzEPuKqf2e vTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi5Dp6 Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIa Gl6I6lD4WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeL eG9QgkRQP2YGiqtDhFZKDyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8 FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGyeUN51q1veieQA6TqJIc/2b3Z6fJfUEkc 7uzXLg== -----END CERTIFICATE----- # Issuer: CN=IdenTrust Commercial Root CA 1 O=IdenTrust # Subject: CN=IdenTrust Commercial Root CA 1 O=IdenTrust # Label: "IdenTrust Commercial Root CA 1" # Serial: 13298821034946342390520003877796839426 # MD5 Fingerprint: b3:3e:77:73:75:ee:a0:d3:e3:7e:49:63:49:59:bb:c7 # SHA1 Fingerprint: df:71:7e:aa:4a:d9:4e:c9:55:84:99:60:2d:48:de:5f:bc:f0:3a:25 # SHA256 Fingerprint: 5d:56:49:9b:e4:d2:e0:8b:cf:ca:d0:8a:3e:38:72:3d:50:50:3b:de:70:69:48:e4:2f:55:60:30:19:e5:28:ae -----BEGIN CERTIFICATE----- MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT 3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU +ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB /zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH 6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 +wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG 4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A 7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H -----END CERTIFICATE----- # Issuer: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust # Subject: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust # Label: "IdenTrust Public Sector Root CA 1" # Serial: 13298821034946342390521976156843933698 # MD5 Fingerprint: 37:06:a5:b0:fc:89:9d:ba:f4:6b:8c:1a:64:cd:d5:ba # SHA1 Fingerprint: ba:29:41:60:77:98:3f:f4:f3:ef:f2:31:05:3b:2e:ea:6d:4d:45:fd # SHA256 Fingerprint: 30:d0:89:5a:9a:44:8a:26:20:91:63:55:22:d1:f5:20:10:b5:86:7a:ca:e1:2c:78:ef:95:8f:d4:f4:38:9f:2f -----BEGIN CERTIFICATE----- MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0 MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7 ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF /YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R 3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy 9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ 2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9 TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5 +bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv 8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c -----END CERTIFICATE----- # Issuer: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only # Subject: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only # Label: "Entrust Root Certification Authority - G2" # Serial: 1246989352 # MD5 Fingerprint: 4b:e2:c9:91:96:65:0c:f4:0e:5a:93:92:a0:0a:fe:b2 # SHA1 Fingerprint: 8c:f4:27:fd:79:0c:3a:d1:66:06:8d:e8:1e:57:ef:bb:93:22:72:d4 # SHA256 Fingerprint: 43:df:57:74:b0:3e:7f:ef:5f:e4:0d:93:1a:7b:ed:f1:bb:2e:6b:42:73:8c:4e:6d:38:41:10:3d:3a:a7:f3:39 -----BEGIN CERTIFICATE----- MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50 cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0 aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1 U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0 jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/ jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v 1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g== -----END CERTIFICATE----- # Issuer: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only # Subject: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only # Label: "Entrust Root Certification Authority - EC1" # Serial: 51543124481930649114116133369 # MD5 Fingerprint: b6:7e:1d:f0:58:c5:49:6c:24:3b:3d:ed:98:18:ed:bc # SHA1 Fingerprint: 20:d8:06:40:df:9b:25:f5:12:25:3a:11:ea:f7:59:8a:eb:14:b5:47 # SHA256 Fingerprint: 02:ed:0e:b2:8c:14:da:45:16:5c:56:67:91:70:0d:64:51:d7:fb:56:f0:b2:ab:1d:3b:8e:b0:70:e5:6e:df:f5 -----BEGIN CERTIFICATE----- MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3 d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G -----END CERTIFICATE----- # Issuer: CN=CFCA EV ROOT O=China Financial Certification Authority # Subject: CN=CFCA EV ROOT O=China Financial Certification Authority # Label: "CFCA EV ROOT" # Serial: 407555286 # MD5 Fingerprint: 74:e1:b6:ed:26:7a:7a:44:30:33:94:ab:7b:27:81:30 # SHA1 Fingerprint: e2:b8:29:4b:55:84:ab:6b:58:c2:90:46:6c:ac:3f:b8:39:8f:84:83 # SHA256 Fingerprint: 5c:c3:d7:8e:4e:1d:5e:45:54:7a:04:e6:87:3e:64:f9:0c:f9:53:6d:1c:cc:2e:f8:00:f3:55:c4:c5:fd:70:fd -----BEGIN CERTIFICATE----- MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y aXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx MjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP T1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03 sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL TIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5 /ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp 7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz EpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt hxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP a931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot aK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg TnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV PKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv cWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL tbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd BgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT ej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL jOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS ESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy P5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19 xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d Ci77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN 5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe /v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z AAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ 5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su -----END CERTIFICATE----- # Issuer: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed # Subject: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed # Label: "OISTE WISeKey Global Root GB CA" # Serial: 157768595616588414422159278966750757568 # MD5 Fingerprint: a4:eb:b9:61:28:2e:b7:2f:98:b0:35:26:90:99:51:1d # SHA1 Fingerprint: 0f:f9:40:76:18:d3:d7:6a:4b:98:f0:a8:35:9e:0c:fd:27:ac:cc:ed # SHA256 Fingerprint: 6b:9c:08:e8:6e:b0:f7:67:cf:ad:65:cd:98:b6:21:49:e5:49:4a:67:f5:84:5e:7b:d1:ed:01:9f:27:b8:6b:d6 -----BEGIN CERTIFICATE----- MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3 HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX 1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P 99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5 gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= -----END CERTIFICATE----- # Issuer: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. # Subject: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. # Label: "SZAFIR ROOT CA2" # Serial: 357043034767186914217277344587386743377558296292 # MD5 Fingerprint: 11:64:c1:89:b0:24:b1:8c:b1:07:7e:89:9e:51:9e:99 # SHA1 Fingerprint: e2:52:fa:95:3f:ed:db:24:60:bd:6e:28:f3:9c:cc:cf:5e:b3:3f:de # SHA256 Fingerprint: a1:33:9d:33:28:1a:0b:56:e5:57:d3:d3:2b:1c:e7:f9:36:7e:b0:94:bd:5f:a7:2a:7e:50:04:c8:de:d7:ca:fe -----BEGIN CERTIFICATE----- MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQEL BQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6 ZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkw NzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L cmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIg Uk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvN QLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT 3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw 3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr6 3fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5 BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHN XGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD AgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsF AAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw 8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOG nXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCP oky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGy d05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSg LvWpCz/UXeHPhJ/iGcJfitYgHuNztw== -----END CERTIFICATE----- # Issuer: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority # Subject: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority # Label: "Certum Trusted Network CA 2" # Serial: 44979900017204383099463764357512596969 # MD5 Fingerprint: 6d:46:9e:d9:25:6d:08:23:5b:5e:74:7d:1e:27:db:f2 # SHA1 Fingerprint: d3:dd:48:3e:2b:bf:4c:05:e8:af:10:f5:fa:76:26:cf:d3:dc:30:92 # SHA256 Fingerprint: b6:76:f2:ed:da:e8:77:5c:d3:6c:b0:f6:3c:d1:d4:60:39:61:f4:9e:62:65:ba:01:3a:2f:03:07:b6:d0:b8:04 -----BEGIN CERTIFICATE----- MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCB gDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIG A1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgz OTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZ VW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRp ZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3 b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWA DGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn 0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFB OJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lE fktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+E Sv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1m o130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02i sx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOW OZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgez Tv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFAS adgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n 3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMC AQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQ F/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTf CVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29 XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywm djWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/ WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jb AoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksq P/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Ko b7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnj XALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P 5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbi DrW5viSP -----END CERTIFICATE----- # Issuer: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority # Subject: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority # Label: "Hellenic Academic and Research Institutions RootCA 2015" # Serial: 0 # MD5 Fingerprint: ca:ff:e2:db:03:d9:cb:4b:e9:0f:ad:84:fd:7b:18:ce # SHA1 Fingerprint: 01:0c:06:95:a6:98:19:14:ff:bf:5f:c6:b0:b6:95:ea:29:e9:12:a6 # SHA256 Fingerprint: a0:40:92:9a:02:ce:53:b4:ac:f4:f2:ff:c6:98:1c:e4:49:6f:75:5e:6d:45:fe:0b:2a:69:2b:cd:52:52:3f:36 -----BEGIN CERTIFICATE----- MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA 4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0 AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10 4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV 9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6 Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot 9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4 pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0 vm9qp/UsQu0yrbYhnr68 -----END CERTIFICATE----- # Issuer: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority # Subject: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority # Label: "Hellenic Academic and Research Institutions ECC RootCA 2015" # Serial: 0 # MD5 Fingerprint: 81:e5:b4:17:eb:c2:f5:e1:4b:0d:41:7b:49:92:fe:ef # SHA1 Fingerprint: 9f:f1:71:8d:92:d5:9a:f3:7d:74:97:b4:bc:6f:84:68:0b:ba:b6:66 # SHA256 Fingerprint: 44:b5:45:aa:8a:25:e6:5a:73:ca:15:dc:27:fc:36:d2:4c:1c:b9:95:3a:06:65:39:b1:15:82:dc:48:7b:48:33 -----BEGIN CERTIFICATE----- MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5 MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0 dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR -----END CERTIFICATE----- # Issuer: CN=ISRG Root X1 O=Internet Security Research Group # Subject: CN=ISRG Root X1 O=Internet Security Research Group # Label: "ISRG Root X1" # Serial: 172886928669790476064670243504169061120 # MD5 Fingerprint: 0c:d2:f9:e0:da:17:73:e9:ed:86:4d:a5:e3:70:e7:4e # SHA1 Fingerprint: ca:bd:2a:79:a1:07:6a:31:f2:1d:25:36:35:cb:03:9d:43:29:a5:e8 # SHA256 Fingerprint: 96:bc:ec:06:26:49:76:f3:74:60:77:9a:cf:28:c5:a7:cf:e8:a3:c0:aa:e1:1a:8f:fc:ee:05:c0:bd:df:08:c6 -----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= -----END CERTIFICATE----- # Issuer: O=FNMT-RCM OU=AC RAIZ FNMT-RCM # Subject: O=FNMT-RCM OU=AC RAIZ FNMT-RCM # Label: "AC RAIZ FNMT-RCM" # Serial: 485876308206448804701554682760554759 # MD5 Fingerprint: e2:09:04:b4:d3:bd:d1:a0:14:fd:1a:d2:47:c4:57:1d # SHA1 Fingerprint: ec:50:35:07:b2:15:c4:95:62:19:e2:a8:9a:5b:42:99:2c:4c:2c:20 # SHA256 Fingerprint: eb:c5:57:0c:29:01:8c:4d:67:b1:aa:12:7b:af:12:f7:03:b4:61:1e:bc:17:b7:da:b5:57:38:94:17:9b:93:fa -----BEGIN CERTIFICATE----- MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsx CzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJ WiBGTk1ULVJDTTAeFw0wODEwMjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJ BgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBG Tk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALpxgHpMhm5/ yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcfqQgf BBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAz WHFctPVrbtQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxF tBDXaEAUwED653cXeuYLj2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z 374jNUUeAlz+taibmSXaXvMiwzn15Cou08YfxGyqxRxqAQVKL9LFwag0Jl1mpdIC IfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mwWsXmo8RZZUc1g16p6DUL mbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnTtOmlcYF7 wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peS MKGJ47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2 ZSysV4999AeU14ECll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMet UqIJ5G+GR4of6ygnXYMgrwTJbFaai0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUw AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPd9xf3E6Jobd2Sn9R2gzL+H YJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3 LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1 RXxlDPiyN8+sD8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYM LVN0V2Ue1bLdI4E7pWYjJ2cJj+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf 77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrTQfv6MooqtyuGC2mDOL7Nii4LcK2N JpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW+YJF1DngoABd15jm fZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7Ixjp 6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp 1txyM/1d8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B 9kiABdcPUXmsEKvU7ANm5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wok RqEIr9baRRmW1FMdW4R58MD3R++Lj8UGrp1MYp3/RgT408m2ECVAdf4WqslKYIYv uu8wd+RU4riEmViAqhOLUTpPSPaLtrM= -----END CERTIFICATE----- # Issuer: CN=Amazon Root CA 1 O=Amazon # Subject: CN=Amazon Root CA 1 O=Amazon # Label: "Amazon Root CA 1" # Serial: 143266978916655856878034712317230054538369994 # MD5 Fingerprint: 43:c6:bf:ae:ec:fe:ad:2f:18:c6:88:68:30:fc:c8:e6 # SHA1 Fingerprint: 8d:a7:f9:65:ec:5e:fc:37:91:0f:1c:6e:59:fd:c1:cc:6a:6e:de:16 # SHA256 Fingerprint: 8e:cd:e6:88:4f:3d:87:b1:12:5b:a3:1a:c3:fc:b1:3d:70:16:de:7f:57:cc:90:4f:e1:cb:97:c6:ae:98:19:6e -----BEGIN CERTIFICATE----- MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM 9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L 93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU 5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy rqXRfboQnoZsG4q5WTP468SQvvG5 -----END CERTIFICATE----- # Issuer: CN=Amazon Root CA 2 O=Amazon # Subject: CN=Amazon Root CA 2 O=Amazon # Label: "Amazon Root CA 2" # Serial: 143266982885963551818349160658925006970653239 # MD5 Fingerprint: c8:e5:8d:ce:a8:42:e2:7a:c0:2a:5c:7c:9e:26:bf:66 # SHA1 Fingerprint: 5a:8c:ef:45:d7:a6:98:59:76:7a:8c:8b:44:96:b5:78:cf:47:4b:1a # SHA256 Fingerprint: 1b:a5:b2:aa:8c:65:40:1a:82:96:01:18:f8:0b:ec:4f:62:30:4d:83:ce:c4:71:3a:19:c3:9c:01:1e:a4:6d:b4 -----BEGIN CERTIFICATE----- MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv b3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK gXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ W0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg 1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K 8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r 2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me z/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR 8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj mUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz 7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6 +XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI 0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm UjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2 LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY +gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS k5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl 7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm btmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl urR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+ fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63 n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE 76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H 9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT 4PsJYGw= -----END CERTIFICATE----- # Issuer: CN=Amazon Root CA 3 O=Amazon # Subject: CN=Amazon Root CA 3 O=Amazon # Label: "Amazon Root CA 3" # Serial: 143266986699090766294700635381230934788665930 # MD5 Fingerprint: a0:d4:ef:0b:f7:b5:d8:49:95:2a:ec:f5:c4:fc:81:87 # SHA1 Fingerprint: 0d:44:dd:8c:3c:8c:1a:1a:58:75:64:81:e9:0f:2e:2a:ff:b3:d2:6e # SHA256 Fingerprint: 18:ce:6c:fe:7b:f1:4e:60:b2:e3:47:b8:df:e8:68:cb:31:d0:2e:bb:3a:da:27:15:69:f5:03:43:b4:6d:b3:a4 -----BEGIN CERTIFICATE----- MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5 MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM YyRIHN8wfdVoOw== -----END CERTIFICATE----- # Issuer: CN=Amazon Root CA 4 O=Amazon # Subject: CN=Amazon Root CA 4 O=Amazon # Label: "Amazon Root CA 4" # Serial: 143266989758080763974105200630763877849284878 # MD5 Fingerprint: 89:bc:27:d5:eb:17:8d:06:6a:69:d5:fd:89:47:b4:cd # SHA1 Fingerprint: f6:10:84:07:d6:f8:bb:67:98:0c:c2:e2:44:c2:eb:ae:1c:ef:63:be # SHA256 Fingerprint: e3:5d:28:41:9e:d0:20:25:cf:a6:90:38:cd:62:39:62:45:8d:a5:c6:95:fb:de:a3:c2:2b:0b:fb:25:89:70:92 -----BEGIN CERTIFICATE----- MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5 MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi 9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB /zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW 1KyLa2tJElMzrdfkviT8tQp21KW8EA== -----END CERTIFICATE----- # Issuer: CN=LuxTrust Global Root 2 O=LuxTrust S.A. # Subject: CN=LuxTrust Global Root 2 O=LuxTrust S.A. # Label: "LuxTrust Global Root 2" # Serial: 59914338225734147123941058376788110305822489521 # MD5 Fingerprint: b2:e1:09:00:61:af:f7:f1:91:6f:c4:ad:8d:5e:3b:7c # SHA1 Fingerprint: 1e:0e:56:19:0a:d1:8b:25:98:b2:04:44:ff:66:8a:04:17:99:5f:3f # SHA256 Fingerprint: 54:45:5f:71:29:c2:0b:14:47:c4:18:f9:97:16:8f:24:c5:8f:c5:02:3b:f5:da:5b:e2:eb:6e:1d:d8:90:2e:d5 -----BEGIN CERTIFICATE----- MIIFwzCCA6ugAwIBAgIUCn6m30tEntpqJIWe5rgV0xZ/u7EwDQYJKoZIhvcNAQEL BQAwRjELMAkGA1UEBhMCTFUxFjAUBgNVBAoMDUx1eFRydXN0IFMuQS4xHzAdBgNV BAMMFkx1eFRydXN0IEdsb2JhbCBSb290IDIwHhcNMTUwMzA1MTMyMTU3WhcNMzUw MzA1MTMyMTU3WjBGMQswCQYDVQQGEwJMVTEWMBQGA1UECgwNTHV4VHJ1c3QgUy5B LjEfMB0GA1UEAwwWTHV4VHJ1c3QgR2xvYmFsIFJvb3QgMjCCAiIwDQYJKoZIhvcN AQEBBQADggIPADCCAgoCggIBANeFl78RmOnwYoNMPIf5U2o3C/IPPIfOb9wmKb3F ibrJgz337spbxm1Jc7TJRqMbNBM/wYlFV/TZsfs2ZUv7COJIcRHIbjuend+JZTem hfY7RBi2xjcwYkSSl2l9QjAk5A0MiWtj3sXh306pFGxT4GHO9hcvHTy95iJMHZP1 EMShduxq3sVs35a0VkBCwGKSMKEtFZSg0iAGCW5qbeXrt77U8PEVfIvmTroTzEsn Xpk8F12PgX8zPU/TPxvsXD/wPEx1bvKm1Z3aLQdjAsZy6ZS8TEmVT4hSyNvoaYL4 zDRbIvCGp4m9SAptZoFtyMhk+wHh9OHe2Z7d21vUKpkmFRseTJIpgp7VkoGSQXAZ 96Tlk0u8d2cx3Rz9MXANF5kM+Qw5GSoXtTBxVdUPrljhPS80m8+f9niFwpN6cj5m j5wWEWCPnolvZ77gR1o7DJpni89Gxq44o/KnvObWhWszJHAiS8sIm7vI+AIpHb4g DEa/a4ebsypmQjVGbKq6rfmYe+lQVRQxv7HaLe2ArWgk+2mr2HETMOZns4dA/Yl+ 8kPREd8vZS9kzl8UubG/Mb2HeFpZZYiq/FkySIbWTLkpS5XTdvN3JW1CHDiDTf2j X5t/Lax5Gw5CMZdjpPuKadUiDTSQMC6otOBttpSsvItO13D8xTiOZCXhTTmQzsmH hFhxAgMBAAGjgagwgaUwDwYDVR0TAQH/BAUwAwEB/zBCBgNVHSAEOzA5MDcGByuB KwEBAQowLDAqBggrBgEFBQcCARYeaHR0cHM6Ly9yZXBvc2l0b3J5Lmx1eHRydXN0 Lmx1MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBT/GCh2+UgFLKGu8SsbK7JT +Et8szAdBgNVHQ4EFgQU/xgodvlIBSyhrvErGyuyU/hLfLMwDQYJKoZIhvcNAQEL BQADggIBAGoZFO1uecEsh9QNcH7X9njJCwROxLHOk3D+sFTAMs2ZMGQXvw/l4jP9 BzZAcg4atmpZ1gDlaCDdLnINH2pkMSCEfUmmWjfrRcmF9dTHF5kH5ptV5AzoqbTO jFu1EVzPig4N1qx3gf4ynCSecs5U89BvolbW7MM3LGVYvlcAGvI1+ut7MV3CwRI9 loGIlonBWVx65n9wNOeD4rHh4bhY79SV5GCc8JaXcozrhAIuZY+kt9J/Z93I055c qqmkoCUUBpvsT34tC38ddfEz2O3OuHVtPlu5mB0xDVbYQw8wkbIEa91WvpWAVWe+ 2M2D2RjuLg+GLZKecBPs3lHJQ3gCpU3I+V/EkVhGFndadKpAvAefMLmx9xIX3eP/ JEAdemrRTxgKqpAd60Ae36EeRJIQmvKN4dFLRp7oRUKX6kWZ8+xm1QL68qZKJKre zrnK+T+Tb/mjuuqlPpmt/f97mfVl7vBZKGfXkJWkE4SphMHozs51k2MavDzq1WQf LSoSOcbDWjLtR5EWDrw4wVDej8oqkDQc7kGUnF4ZLvhFSZl0kbAEb+MEWrGrKqv+ x9CWttrhSmQGbmBNvUJO/3jaJMobtNeWOWyu8Q6qp31IiyBMz2TWuJdGsE7RKlY6 oJO9r4Ak4Ap+58rVyuiFVdw2KuGUaJPHZnJED4AhMmwlxyOAgwrr -----END CERTIFICATE----- # Issuer: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM # Subject: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM # Label: "TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1" # Serial: 1 # MD5 Fingerprint: dc:00:81:dc:69:2f:3e:2f:b0:3b:f6:3d:5a:91:8e:49 # SHA1 Fingerprint: 31:43:64:9b:ec:ce:27:ec:ed:3a:3f:0b:8f:0d:e4:e8:91:dd:ee:ca # SHA256 Fingerprint: 46:ed:c3:68:90:46:d5:3a:45:3f:b3:10:4a:b8:0d:ca:ec:65:8b:26:60:ea:16:29:dd:7e:86:79:90:64:87:16 -----BEGIN CERTIFICATE----- MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIx GDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxp bXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0w KwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0 BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3Vy dW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQG EwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXll IEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklU QUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBT TTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kg LSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7 a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySr LqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INr N3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2X YacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/ iSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4f AJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxH V8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL BQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPf IPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4 lzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c 8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCf lo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= -----END CERTIFICATE----- # Issuer: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. # Subject: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. # Label: "GDCA TrustAUTH R5 ROOT" # Serial: 9009899650740120186 # MD5 Fingerprint: 63:cc:d9:3d:34:35:5c:6f:53:a3:e2:08:70:48:1f:b4 # SHA1 Fingerprint: 0f:36:38:5b:81:1a:25:c3:9b:31:4e:83:ca:e9:34:66:70:cc:74:b4 # SHA256 Fingerprint: bf:ff:8f:d0:44:33:48:7d:6a:8a:a6:0c:1a:29:76:7a:9f:c2:bb:b0:5e:42:0f:71:3a:13:b9:92:89:1d:38:93 -----BEGIN CERTIFICATE----- MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE BhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0 MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVowYjELMAkGA1UEBhMCQ04xMjAwBgNV BAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8w HQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0BAQEF AAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJj Dp6L3TQsAlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBj TnnEt1u9ol2x8kECK62pOqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+u KU49tm7srsHwJ5uu4/Ts765/94Y9cnrrpftZTqfrlYwiOXnhLQiPzLyRuEH3FMEj qcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ9Cy5WmYqsBebnh52nUpm MUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQxXABZG12 ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloP zgsMR6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3Gk L30SgLdTMEZeS1SZD2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeC jGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4oR24qoAATILnsn8JuLwwoC8N9VKejveSswoA HQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx9hoh49pwBiFYFIeFd3mqgnkC AwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlRMA8GA1UdEwEB /wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZm DRd9FBUb1Ov9H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5 COmSdI31R9KrO9b7eGZONn356ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ry L3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd+PwyvzeG5LuOmCd+uh8W4XAR8gPf JWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQHtZa37dG/OaG+svg IHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBDF8Io 2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV 09tL7ECQ8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQ XR4EzzffHqhmsYzmIGrv/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrq T8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOe MTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== -----END CERTIFICATE----- # Issuer: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority # Subject: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority # Label: "TrustCor RootCert CA-1" # Serial: 15752444095811006489 # MD5 Fingerprint: 6e:85:f1:dc:1a:00:d3:22:d5:b2:b2:ac:6b:37:05:45 # SHA1 Fingerprint: ff:bd:cd:e7:82:c8:43:5e:3c:6f:26:86:5c:ca:a8:3a:45:5b:c3:0a # SHA256 Fingerprint: d4:0e:9c:86:cd:8f:e4:68:c1:77:69:59:f4:9e:a7:74:fa:54:86:84:b6:c4:06:f3:90:92:61:f4:dc:e2:57:5c -----BEGIN CERTIFICATE----- MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYD VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29y IFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkxMjMxMTcyMzE2WjCB pDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFuYW1h IENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUG A1UECwweVHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZU cnVzdENvciBSb290Q2VydCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB CgKCAQEAv463leLCJhJrMxnHQFgKq1mqjQCj/IDHUHuO1CAmujIS2CNUSSUQIpid RtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4pQa81QBeCQryJ3pS/C3V seq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0JEsq1pme 9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CV EY4hgLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorW hnAbJN7+KIor0Gqw/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/ DeOxCbeKyKsZn3MzUOcwHwYDVR0jBBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcw DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD ggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5mDo4Nvu7Zp5I /5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZ yonnMlo2HD6CqFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djts L1Ac59v2Z3kf9YKVmgenFK+P3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdN zl/HHk484IkzlQsPpTLWPFp5LBk= -----END CERTIFICATE----- # Issuer: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority # Subject: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority # Label: "TrustCor RootCert CA-2" # Serial: 2711694510199101698 # MD5 Fingerprint: a2:e1:f8:18:0b:ba:45:d5:c7:41:2a:bb:37:52:45:64 # SHA1 Fingerprint: b8:be:6d:cb:56:f1:55:b9:63:d4:12:ca:4e:06:34:c7:94:b2:1c:c0 # SHA256 Fingerprint: 07:53:e9:40:37:8c:1b:d5:e3:83:6e:39:5d:ae:a5:cb:83:9e:50:46:f1:bd:0e:ae:19:51:cf:10:fe:c7:c9:65 -----BEGIN CERTIFICATE----- MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNV BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEfMB0GA1UEAwwWVHJ1c3RDb3Ig Um9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEyMzExNzI2MzlaMIGk MQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEg Q2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYD VQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRy dXN0Q29yIFJvb3RDZXJ0IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK AoICAQCnIG7CKqJiJJWQdsg4foDSq8GbZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+ QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9NkRvRUqdw6VC0xK5mC8tkq 1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1oYxOdqHp 2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nK DOObXUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hape az6LMvYHL1cEksr1/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF 3wP+TfSvPd9cW436cOGlfifHhi5qjxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88 oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQPeSghYA2FFn3XVDjxklb9tTNM g9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+CtgrKAmrhQhJ8Z3 mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh 8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAd BgNVHQ4EFgQU2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6U nrybPZx9mCAZ5YwwYrIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYw DQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/hOsh80QA9z+LqBrWyOrsGS2h60COX dKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnpkpfbsEZC89NiqpX+ MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv2wnL /V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RX CI/hOWB3S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYa ZH9bDTMJBzN7Bj8RpFxwPIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW 2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dvDDqPys/cA8GiCcjl/YBeyGBCARsaU1q7 N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYURpFHmygk71dSTlxCnKr3 Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANExdqtvArB As8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp 5KeXRKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu 1uwJ -----END CERTIFICATE----- # Issuer: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority # Subject: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority # Label: "TrustCor ECA-1" # Serial: 9548242946988625984 # MD5 Fingerprint: 27:92:23:1d:0a:f5:40:7c:e9:e6:6b:9d:d8:f5:e7:6c # SHA1 Fingerprint: 58:d1:df:95:95:67:6b:63:c0:f0:5b:1c:17:4d:8b:84:0b:c8:78:bd # SHA256 Fingerprint: 5a:88:5d:b1:9c:01:d9:12:c5:75:93:88:93:8c:af:bb:df:03:1a:b2:d4:8e:91:ee:15:58:9b:42:97:1d:03:9c -----BEGIN CERTIFICATE----- MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYD VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxFzAVBgNVBAMMDlRydXN0Q29y IEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3MjgwN1owgZwxCzAJBgNV BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3Ig RUNBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb 3w9U73NjKYKtR8aja+3+XzP4Q1HpGjORMRegdMTUpwHmspI+ap3tDvl0mEDTPwOA BoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23xFUfJ3zSCNV2HykVh0A5 3ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmcp0yJF4Ou owReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/ wZ0+fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZF ZtS6mFjBAgMBAAGjYzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAf BgNVHSMEGDAWgBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/ MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAQEABT41XBVwm8nHc2Fv civUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u/ukZMjgDfxT2 AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50 soIipX1TH0XsJ5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BI WJZpTdwHjFGTot+fDz2LYLSCjaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1Wi tJ/X5g== -----END CERTIFICATE----- # Issuer: CN=SSL.com Root Certification Authority RSA O=SSL Corporation # Subject: CN=SSL.com Root Certification Authority RSA O=SSL Corporation # Label: "SSL.com Root Certification Authority RSA" # Serial: 8875640296558310041 # MD5 Fingerprint: 86:69:12:c0:70:f1:ec:ac:ac:c2:d5:bc:a5:5b:a1:29 # SHA1 Fingerprint: b7:ab:33:08:d1:ea:44:77:ba:14:80:12:5a:6f:bd:a9:36:49:0c:bb # SHA256 Fingerprint: 85:66:6a:56:2e:e0:be:5c:e9:25:c1:d8:89:0a:6f:76:a8:7e:c1:6d:4d:7d:5f:29:ea:74:19:cf:20:12:3b:69 -----BEGIN CERTIFICATE----- MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp Y2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwMjEyMTczOTM5WhcNNDEwMjEyMTcz OTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcN AQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2R xFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aX qhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcC C52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZExqysdBP+lSgQ3 6YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh /l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrF YD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93E JNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVc US4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8 ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnIk2snYxnP/Okm +Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4sbE6x/c+cCbqi M+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4G A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGV cpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBc Hadm47GUBwwyOabqG7B52B2ccETjit3E+ZUfijhDPwGFpUenPUayvOUiaPd7nNgs PgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAslu1OJD7OAUN5F7kR/ q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0 cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jr a6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90I H37hVZkLId6Tngr75qNJvTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/Y K9f1JmzJBjSWFupwWRoyeXkLtoh/D1JIPb9s2KJELtFOt3JY04kTlf5Eq/jXixtu nLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406ywKBjYZC6VWg3dGq2ktuf oYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NIWuuA8ShY Ic2wBlX7Jz9TkHCpBB5XJ7k= -----END CERTIFICATE----- # Issuer: CN=SSL.com Root Certification Authority ECC O=SSL Corporation # Subject: CN=SSL.com Root Certification Authority ECC O=SSL Corporation # Label: "SSL.com Root Certification Authority ECC" # Serial: 8495723813297216424 # MD5 Fingerprint: 2e:da:e4:39:7f:9c:8f:37:d1:70:9f:26:17:51:3a:8e # SHA1 Fingerprint: c3:19:7c:39:24:e6:54:af:1b:c4:ab:20:95:7a:e2:c3:0e:13:02:6a # SHA256 Fingerprint: 34:17:bb:06:cc:60:07:da:1b:96:1c:92:0b:8a:b4:ce:3f:ad:82:0e:4a:a3:0b:9a:cb:c4:a7:4e:bd:ce:bc:65 -----BEGIN CERTIFICATE----- MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMC VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T U0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0 aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNDAzWhcNNDEwMjEyMTgxNDAz WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0 b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBS b290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB BAAiA2IABEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI 7Z4INcgn64mMU1jrYor+8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPg CemB+vNH06NjMGEwHQYDVR0OBBYEFILRhXMw5zUE044CkvvlpNHEIejNMA8GA1Ud EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTTjgKS++Wk0cQh6M0wDgYD VR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCWe+0F+S8T kdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+ gA0z5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl -----END CERTIFICATE----- # Issuer: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation # Subject: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation # Label: "SSL.com EV Root Certification Authority RSA R2" # Serial: 6248227494352943350 # MD5 Fingerprint: e1:1e:31:58:1a:ae:54:53:02:f6:17:6a:11:7b:4d:95 # SHA1 Fingerprint: 74:3a:f0:52:9b:d0:32:a0:f4:4a:83:cd:d4:ba:a9:7b:7c:2e:c4:9a # SHA256 Fingerprint: 2e:7b:f1:6c:c2:24:85:a7:bb:e2:aa:86:96:75:07:61:b0:ae:39:be:3b:2f:e9:d0:cc:6d:4e:f7:34:91:42:5c -----BEGIN CERTIFICATE----- MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNV BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UE CgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2Vy dGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMB4XDTE3MDUzMTE4MTQzN1oXDTQy MDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4G A1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQD DC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvq M0fNTPl9fb69LT3w23jhhqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssuf OePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7wcXHswxzpY6IXFJ3vG2fThVUCAtZJycxa 4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTOZw+oz12WGQvE43LrrdF9 HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+B6KjBSYR aZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcA b9ZhCBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQ Gp8hLH94t2S42Oim9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQV PWKchjgGAGYS5Fl2WlPAApiiECtoRHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMO pgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+SlmJuwgUHfbSguPvuUCYHBBXtSu UDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48+qvWBkofZ6aY MBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa4 9QaAJadz20ZpqJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBW s47LCp1Jjr+kxJG7ZhcFUZh1++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5 Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nxY/hoLVUE0fKNsKTPvDxeH3jnpaAg cLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2GguDKBAdRUNf/ktUM 79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDzOFSz /bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXt ll9ldDz7CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEm Kf7GUmG6sXP/wwyc5WxqlD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKK QbNmC1r7fSOl8hqw/96bg5Qu0T/fkreRrwU7ZcegbLHNYhLDkBvjJc40vG93drEQ w/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1hlMYegouCRw2n5H9gooi S9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX9hwJ1C07 mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== -----END CERTIFICATE----- # Issuer: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation # Subject: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation # Label: "SSL.com EV Root Certification Authority ECC" # Serial: 3182246526754555285 # MD5 Fingerprint: 59:53:22:65:83:42:01:54:c0:ce:42:b9:5a:7c:f2:90 # SHA1 Fingerprint: 4c:dd:51:a3:d1:f5:20:32:14:b0:c6:c5:32:23:03:91:c7:46:42:6d # SHA256 Fingerprint: 22:a2:c1:f7:bd:ed:70:4c:c1:e7:01:b5:f4:08:c3:10:88:0f:e9:56:b5:de:2a:4a:44:f9:9c:87:3a:25:a7:c8 -----BEGIN CERTIFICATE----- MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMC VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T U0wgQ29ycG9yYXRpb24xNDAyBgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZp Y2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNTIzWhcNNDEwMjEyMTgx NTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NMLmNv bSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49 AgEGBSuBBAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMA VIbc/R/fALhBYlzccBYy3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1Kthku WnBaBu2+8KGwytAJKaNjMGEwHQYDVR0OBBYEFFvKXuXe0oGqzagtZFG22XKbl+ZP MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe5d7SgarNqC1kUbbZcpuX 5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJN+vp1RPZ ytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZg h5Mmm7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== -----END CERTIFICATE----- # Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 # Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 # Label: "GlobalSign Root CA - R6" # Serial: 1417766617973444989252670301619537 # MD5 Fingerprint: 4f:dd:07:e4:d4:22:64:39:1e:0c:37:42:ea:d1:c6:ae # SHA1 Fingerprint: 80:94:64:0e:b5:a7:a1:ca:11:9c:1f:dd:d5:9f:81:02:63:a7:fb:d1 # SHA256 Fingerprint: 2c:ab:ea:fe:37:d0:6c:a2:2a:ba:73:91:c0:03:3d:25:98:29:52:c4:53:64:73:49:76:3a:3a:b5:ad:6c:cf:69 -----BEGIN CERTIFICATE----- MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEg MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2Jh bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQx MjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjET MBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCAiIwDQYJ KoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQssgrRI xutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1k ZguSgMpE3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxD aNc9PIrFsmbVkJq3MQbFvuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJw LnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqMPKq0pPbzlUoSB239jLKJz9CgYXfIWHSw 1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+azayOeSsJDa38O+2HBNX k7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05OWgtH8wY2 SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/h bguyCLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4n WUx2OVvq+aWh2IMP0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpY rZxCRXluDocZXFSxZba/jJvcE+kNb7gu3GduyYsRtYQUigAZcIN5kZeR1Bonvzce MgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD AQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNVHSMEGDAWgBSu bAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGt Ixg93eFyRJa0lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr61 55wsTLxDKZmOMNOsIeDjHfrYBzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLj vUYAGm0CuiVdjaExUd1URhxN25mW7xocBFymFe944Hn+Xds+qkxV/ZoVqW/hpvvf cDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr3TsTjxKM4kEaSHpz oHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB10jZp nOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfs pA9MRf/TuTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+v JJUEeKgDu+6B5dpffItKoZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R 8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+tJDfLRVpOoERIyNiwmcUVhAn21klJwGW4 5hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= -----END CERTIFICATE----- # Issuer: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed # Subject: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed # Label: "OISTE WISeKey Global Root GC CA" # Serial: 44084345621038548146064804565436152554 # MD5 Fingerprint: a9:d6:b9:2d:2f:93:64:f8:a5:69:ca:91:e9:68:07:23 # SHA1 Fingerprint: e0:11:84:5e:34:de:be:88:81:b9:9c:f6:16:26:d1:96:1f:c3:b9:31 # SHA256 Fingerprint: 85:60:f9:1c:36:24:da:ba:95:70:b5:fe:a0:db:e3:6f:f1:1a:83:23:be:94:86:85:4f:b3:f3:4a:55:71:19:8d -----BEGIN CERTIFICATE----- MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQsw CQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91 bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwg Um9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRaFw00MjA1MDkwOTU4MzNaMG0xCzAJ BgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBGb3Vu ZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2JhbCBS b290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4ni eUqjFqdrVCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4W p2OQ0jnUsYd4XxiWD1AbNTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8E BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7T rYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0EAwMDaAAwZQIwJsdpW9zV 57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtkAjEA2zQg Mgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 -----END CERTIFICATE----- # Issuer: CN=GTS Root R1 O=Google Trust Services LLC # Subject: CN=GTS Root R1 O=Google Trust Services LLC # Label: "GTS Root R1" # Serial: 146587175971765017618439757810265552097 # MD5 Fingerprint: 82:1a:ef:d4:d2:4a:f2:9f:e2:3d:97:06:14:70:72:85 # SHA1 Fingerprint: e1:c9:50:e6:ef:22:f8:4c:56:45:72:8b:92:20:60:d7:d5:a7:a3:e8 # SHA256 Fingerprint: 2a:57:54:71:e3:13:40:bc:21:58:1c:bd:2c:f1:3e:15:84:63:20:3e:ce:94:bc:f9:d3:cc:19:6b:f0:9a:54:72 -----BEGIN CERTIFICATE----- MIIFWjCCA0KgAwIBAgIQbkepxUtHDA3sM9CJuRz04TANBgkqhkiG9w0BAQwFADBH MQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExM QzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIy MDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNl cnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEB AQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaM f/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vX mX7wCl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7 zUjwTcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0P fyblqAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtc vfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4 Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUsp zBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOO Rc92wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYW k70paDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+ DVrNVjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgF lQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV HQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBADiW Cu49tJYeX++dnAsznyvgyv3SjgofQXSlfKqE1OXyHuY3UjKcC9FhHb8owbZEKTV1 d5iyfNm9dKyKaOOpMQkpAWBz40d8U6iQSifvS9efk+eCNs6aaAyC58/UEBZvXw6Z XPYfcX3v73svfuo21pdwCxXu11xWajOl40k4DLh9+42FpLFZXvRq4d2h9mREruZR gyFmxhE+885H7pwoHyXa/6xmld01D1zvICxi/ZG6qcz8WpyTgYMpl0p8WnK0OdC3 d8t5/Wk6kjftbjhlRn7pYL15iJdfOBL07q9bgsiG1eGZbYwE8na6SfZu6W0eX6Dv J4J2QPim01hcDyxC2kLGe4g0x8HYRZvBPsVhHdljUEn2NIVq4BjFbkerQUIpm/Zg DdIx02OYI5NaAIFItO/Nis3Jz5nu2Z6qNuFoS3FJFDYoOj0dzpqPJeaAcWErtXvM +SUWgeExX6GjfhaknBZqlxi9dnKlC54dNuYvoS++cJEPqOba+MSSQGwlfnuzCdyy F62ARPBopY+Udf90WuioAnwMCeKpSwughQtiue+hMZL77/ZRBIls6Kl0obsXs7X9 SQ98POyDGCBDTtWTurQ0sR8WNh8M5mQ5Fkzc4P4dyKliPUDqysU0ArSuiYgzNdws E3PYJ/HQcu51OyLemGhmW/HGY0dVHLqlCFF1pkgl -----END CERTIFICATE----- # Issuer: CN=GTS Root R2 O=Google Trust Services LLC # Subject: CN=GTS Root R2 O=Google Trust Services LLC # Label: "GTS Root R2" # Serial: 146587176055767053814479386953112547951 # MD5 Fingerprint: 44:ed:9a:0e:a4:09:3b:00:f2:ae:4c:a3:c6:61:b0:8b # SHA1 Fingerprint: d2:73:96:2a:2a:5e:39:9f:73:3f:e1:c7:1e:64:3f:03:38:34:fc:4d # SHA256 Fingerprint: c4:5d:7b:b0:8e:6d:67:e6:2e:42:35:11:0b:56:4e:5f:78:fd:92:ef:05:8c:84:0a:ea:4e:64:55:d7:58:5c:60 -----BEGIN CERTIFICATE----- MIIFWjCCA0KgAwIBAgIQbkepxlqz5yDFMJo/aFLybzANBgkqhkiG9w0BAQwFADBH MQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExM QzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIy MDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNl cnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEB AQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3Lv CvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3Kg GjSY6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9Bu XvAuMC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOd re7kRXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXu PuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1 mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K 8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqj x5RWIr9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsR nTKaG73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0 kzCqgc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9Ok twIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV HQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBALZp 8KZ3/p7uC4Gt4cCpx/k1HUCCq+YEtN/L9x0Pg/B+E02NjO7jMyLDOfxA325BS0JT vhaI8dI4XsRomRyYUpOM52jtG2pzegVATX9lO9ZY8c6DR2Dj/5epnGB3GFW1fgiT z9D2PGcDFWEJ+YF59exTpJ/JjwGLc8R3dtyDovUMSRqodt6Sm2T4syzFJ9MHwAiA pJiS4wGWAqoC7o87xdFtCjMwc3i5T1QWvwsHoaRc5svJXISPD+AVdyx+Jn7axEvb pxZ3B7DNdehyQtaVhJ2Gg/LkkM0JR9SLA3DaWsYDQvTtN6LwG1BUSw7YhN4ZKJmB R64JGz9I0cNv4rBgF/XuIwKl2gBbbZCr7qLpGzvpx0QnRY5rn/WkhLx3+WuXrD5R RaIRpsyF7gpo8j5QOHokYh4XIDdtak23CZvJ/KRY9bb7nE4Yu5UC56GtmwfuNmsk 0jmGwZODUNKBRqhfYlcsu2xkiAhu7xNUX90txGdj08+JN7+dIPT7eoOboB6BAFDC 5AwiWVIQ7UNWhwD4FFKnHYuTjKJNRn8nxnGbJN7k2oaLDX5rIMHAnuFl2GqjpuiF izoHCBy69Y9Vmhh1fuXsgWbRIXOhNUQLgD1bnF5vKheW0YMjiGZt5obicDIvUiLn yOd/xCxgXS/Dr55FBcOEArf9LAhST4Ldo/DUhgkC -----END CERTIFICATE----- # Issuer: CN=GTS Root R3 O=Google Trust Services LLC # Subject: CN=GTS Root R3 O=Google Trust Services LLC # Label: "GTS Root R3" # Serial: 146587176140553309517047991083707763997 # MD5 Fingerprint: 1a:79:5b:6b:04:52:9c:5d:c7:74:33:1b:25:9a:f9:25 # SHA1 Fingerprint: 30:d4:24:6f:07:ff:db:91:89:8a:0b:e9:49:66:11:eb:8c:5e:46:e5 # SHA256 Fingerprint: 15:d5:b8:77:46:19:ea:7d:54:ce:1c:a6:d0:b0:c4:03:e0:37:a9:17:f1:31:e8:a0:4e:1e:6b:7a:71:ba:bc:e5 -----BEGIN CERTIFICATE----- MIICDDCCAZGgAwIBAgIQbkepx2ypcyRAiQ8DVd2NHTAKBggqhkjOPQQDAzBHMQsw CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU MBIGA1UEAxMLR1RTIFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQA IgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout 736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2A DDL24CejQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud DgQWBBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEAgFuk fCPAlaUs3L6JbyO5o91lAFJekazInXJ0glMLfalAvWhgxeG4VDvBNhcl2MG9AjEA njWSdIUlUfUk7GRSJFClH9voy8l27OyCbvWFGFPouOOaKaqW04MjyaR7YbPMAuhd -----END CERTIFICATE----- # Issuer: CN=GTS Root R4 O=Google Trust Services LLC # Subject: CN=GTS Root R4 O=Google Trust Services LLC # Label: "GTS Root R4" # Serial: 146587176229350439916519468929765261721 # MD5 Fingerprint: 5d:b6:6a:c4:60:17:24:6a:1a:99:a8:4b:ee:5e:b4:26 # SHA1 Fingerprint: 2a:1d:60:27:d9:4a:b1:0a:1c:4d:91:5c:cd:33:a0:cb:3e:2d:54:cb # SHA256 Fingerprint: 71:cc:a5:39:1f:9e:79:4b:04:80:25:30:b3:63:e1:21:da:8a:30:43:bb:26:66:2f:ea:4d:ca:7f:c9:51:a4:bd -----BEGIN CERTIFICATE----- MIICCjCCAZGgAwIBAgIQbkepyIuUtui7OyrYorLBmTAKBggqhkjOPQQDAzBHMQsw CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU MBIGA1UEAxMLR1RTIFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQA IgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzu hXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/l xKvRHYqjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud DgQWBBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNnADBkAjBqUFJ0 CMRw3J5QdCHojXohw0+WbhXRIjVhLfoIN+4Zba3bssx9BzT1YBkstTTZbyACMANx sbqjYAuG7ZoIapVon+Kz4ZNkfF6Tpt95LY2F45TPI11xzPKwTdb+mciUqXWi4w== -----END CERTIFICATE----- # Issuer: CN=UCA Global G2 Root O=UniTrust # Subject: CN=UCA Global G2 Root O=UniTrust # Label: "UCA Global G2 Root" # Serial: 124779693093741543919145257850076631279 # MD5 Fingerprint: 80:fe:f0:c4:4a:f0:5c:62:32:9f:1c:ba:78:a9:50:f8 # SHA1 Fingerprint: 28:f9:78:16:19:7a:ff:18:25:18:aa:44:fe:c1:a0:ce:5c:b6:4c:8a # SHA256 Fingerprint: 9b:ea:11:c9:76:fe:01:47:64:c1:be:56:a6:f9:14:b5:a5:60:31:7a:bd:99:88:39:33:82:e5:16:1a:a0:49:3c -----BEGIN CERTIFICATE----- MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9 MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBH bG9iYWwgRzIgUm9vdDAeFw0xNjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0x CzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEbMBkGA1UEAwwSVUNBIEds b2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxeYr b3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmToni9 kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzm VHqUwCoV8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/R VogvGjqNO7uCEeBHANBSh6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDc C/Vkw85DvG1xudLeJ1uK6NjGruFZfc8oLTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIj tm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/R+zvWr9LesGtOxdQXGLY D0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBeKW4bHAyv j5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6Dl NaBa4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6 iIis7nCs+dwp4wwcOxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznP O6Q0ibd5Ei9Hxeepl2n8pndntd978XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/ BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIHEjMz15DD/pQwIX4wV ZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo5sOASD0Ee/oj L3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl 1qnN3e92mI0ADs0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oU b3n09tDh05S60FdRvScFDcH9yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LV PtateJLbXDzz2K36uGt/xDYotgIVilQsnLAXc47QN6MUPJiVAAwpBVueSUmxX8fj y88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHojhJi6IjMtX9Gl8Cb EGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZkbxqg DMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI +Vg7RE+xygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGy YiGqhkCyLmTTX8jjfhFnRR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bX UB+K+wb1whnw0A== -----END CERTIFICATE----- # Issuer: CN=UCA Extended Validation Root O=UniTrust # Subject: CN=UCA Extended Validation Root O=UniTrust # Label: "UCA Extended Validation Root" # Serial: 106100277556486529736699587978573607008 # MD5 Fingerprint: a1:f3:5f:43:c6:34:9b:da:bf:8c:7e:05:53:ad:96:e2 # SHA1 Fingerprint: a3:a1:b0:6f:24:61:23:4a:e3:36:a5:c2:37:fc:a6:ff:dd:f0:d7:3a # SHA256 Fingerprint: d4:3a:f9:b3:54:73:75:5c:96:84:fc:06:d7:d8:cb:70:ee:5c:28:e7:73:fb:29:4e:b4:1e:e7:17:22:92:4d:24 -----BEGIN CERTIFICATE----- MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBH MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBF eHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMx MDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNV BAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIiMA0GCSqGSIb3DQEB AQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrsiWog D4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvS sPGP2KxFRv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aop O2z6+I9tTcg1367r3CTueUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dk sHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR59mzLC52LqGj3n5qiAno8geK+LLNEOfi c0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH0mK1lTnj8/FtDw5lhIpj VMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KRel7sFsLz KuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/ TuDvB0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41G sx2VYVdWf6/wFlthWG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs 1+lvK9JKBZP8nm9rZ/+I8U6laUpSNwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQD fwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS3H5aBZ8eNJr34RQwDwYDVR0T AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBADaN l8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQ VBcZEhrxH9cMaVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5 c6sq1WnIeJEmMX3ixzDx/BR4dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp 4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb+7lsq+KePRXBOy5nAliRn+/4Qh8s t2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOWF3sGPjLtx7dCvHaj 2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwiGpWO vpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2C xR9GUeOcGMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmx cmtpzyKEC2IPrNkZAJSidjzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbM fjKaiJUINlK73nZfdklJrX+9ZSCyycErdhh2n1ax -----END CERTIFICATE----- # Issuer: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 # Subject: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 # Label: "Certigna Root CA" # Serial: 269714418870597844693661054334862075617 # MD5 Fingerprint: 0e:5c:30:62:27:eb:5b:bc:d7:ae:62:ba:e9:d5:df:77 # SHA1 Fingerprint: 2d:0d:52:14:ff:9e:ad:99:24:01:74:20:47:6e:6c:85:27:27:f5:43 # SHA256 Fingerprint: d4:8d:3d:23:ee:db:50:a4:59:e5:51:97:60:1c:27:77:4b:9d:7b:18:c9:4d:5a:05:95:11:a1:02:50:b9:31:68 -----BEGIN CERTIFICATE----- MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAw WjELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAw MiA0ODE0NjMwODEwMDAzNjEZMBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0x MzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjdaMFoxCzAJBgNVBAYTAkZSMRIwEAYD VQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYzMDgxMDAwMzYxGTAX BgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw ggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sO ty3tRQgXstmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9M CiBtnyN6tMbaLOQdLNyzKNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPu I9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8JXrJhFwLrN1CTivngqIkicuQstDuI7pm TLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16XdG+RCYyKfHx9WzMfgIh C59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq4NYKpkDf ePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3Yz IoejwpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWT Co/1VTp2lc5ZmIoJlXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1k JWumIWmbat10TWuXekG9qxf5kBdIjzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5 hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp//TBt2dzhauH8XwIDAQABo4IB GjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE FBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of 1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczov L3d3d3cuY2VydGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilo dHRwOi8vY3JsLmNlcnRpZ25hLmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYr aHR0cDovL2NybC5kaGlteW90aXMuY29tL2NlcnRpZ25hcm9vdGNhLmNybDANBgkq hkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOItOoldaDgvUSILSo3L 6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxPTGRG HVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH6 0BGM+RFq7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncB lA2c5uk5jR+mUYyZDDl34bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdi o2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1 gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS6Cvu5zHbugRqh5jnxV/v faci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaYtlu3zM63 Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayh jWZSaX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw 3kAP+HwV96LOPNdeE4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= -----END CERTIFICATE----- # Issuer: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI # Subject: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI # Label: "emSign Root CA - G1" # Serial: 235931866688319308814040 # MD5 Fingerprint: 9c:42:84:57:dd:cb:0b:a7:2e:95:ad:b6:f3:da:bc:ac # SHA1 Fingerprint: 8a:c7:ad:8f:73:ac:4e:c1:b5:75:4d:a5:40:f4:fc:cf:7c:b5:8e:8c # SHA256 Fingerprint: 40:f6:af:03:46:a9:9a:a1:cd:1d:55:5a:4e:9c:ce:62:c7:f9:63:46:03:ee:40:66:15:83:3d:c8:c8:d0:03:67 -----BEGIN CERTIFICATE----- MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYD VQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBU ZWNobm9sb2dpZXMgTGltaXRlZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBH MTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgxODMwMDBaMGcxCzAJBgNVBAYTAklO MRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVkaHJhIFRlY2hub2xv Z2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIBIjAN BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQz f2N4aLTNLnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO 8oG0x5ZOrRkVUkr+PHB1cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aq d7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHWDV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhM tTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ6DqS0hdW5TUaQBw+jSzt Od9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrHhQIDAQAB o0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQD AgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31x PaOfG1vR2vjTnGs2vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjM wiI/aTvFthUvozXGaCocV685743QNcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6d GNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q+Mri/Tm3R7nrft8EI6/6nAYH 6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeihU80Bv2noWgby RQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx iN66zB+Afko= -----END CERTIFICATE----- # Issuer: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI # Subject: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI # Label: "emSign ECC Root CA - G3" # Serial: 287880440101571086945156 # MD5 Fingerprint: ce:0b:72:d1:9f:88:8e:d0:50:03:e8:e3:b8:8b:67:40 # SHA1 Fingerprint: 30:43:fa:4f:f2:57:dc:a0:c3:80:ee:2e:58:ea:78:b2:3f:e6:bb:c1 # SHA256 Fingerprint: 86:a1:ec:ba:08:9c:4a:8d:3b:be:27:34:c6:12:ba:34:1d:81:3e:04:3c:f9:e8:a8:62:cd:5c:57:a3:6b:be:6b -----BEGIN CERTIFICATE----- MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQG EwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNo bm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g RzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4MTgzMDAwWjBrMQswCQYDVQQGEwJJ TjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9s b2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMw djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0 WXTsuwYc58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xyS fvalY8L1X44uT6EYGQIrMgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuB zhccLikenEhjQjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggq hkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+DCBeQyh+KTOgNG3qxrdWB CUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7jHvrZQnD +JbNR6iC8hZVdyR+EhCVBCyj -----END CERTIFICATE----- # Issuer: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI # Subject: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI # Label: "emSign Root CA - C1" # Serial: 825510296613316004955058 # MD5 Fingerprint: d8:e3:5d:01:21:fa:78:5a:b0:df:ba:d2:ee:2a:5f:68 # SHA1 Fingerprint: e7:2e:f1:df:fc:b2:09:28:cf:5d:d4:d5:67:37:b1:51:cb:86:4f:01 # SHA256 Fingerprint: 12:56:09:aa:30:1d:a0:a2:49:b9:7a:82:39:cb:6a:34:21:6f:44:dc:ac:9f:39:54:b1:42:92:f2:e8:c8:60:8f -----BEGIN CERTIFICATE----- MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkG A1UEBhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEg SW5jMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAw MFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNpZ24gUm9v dCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+upufGZ BczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZ HdPIWoU/Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH 3DspVpNqs8FqOp099cGXOFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvH GPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4VI5b2P/AgNBbeCsbEBEV5f6f9vtKppa+c xSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleoomslMuoaJuvimUnzYnu3Yy1 aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+XJGFehiq TbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL BQADggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87 /kOXSTKZEhVb3xEp/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4 kqNPEjE2NuLe/gDEo2APJ62gsIq1NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrG YQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9wC68AivTxEDkigcxHpvOJpkT +xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQBmIMMMAVSKeo WXzhriKi4gp6D/piq1JM4fHfyr6DDUI= -----END CERTIFICATE----- # Issuer: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI # Subject: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI # Label: "emSign ECC Root CA - C3" # Serial: 582948710642506000014504 # MD5 Fingerprint: 3e:53:b3:a3:81:ee:d7:10:f8:d3:b0:1d:17:92:f5:d5 # SHA1 Fingerprint: b6:af:43:c2:9b:81:53:7d:f6:ef:6b:c3:1f:1f:60:15:0c:ee:48:66 # SHA256 Fingerprint: bc:4d:80:9b:15:18:9d:78:db:3e:1d:8c:f4:f9:72:6a:79:5d:a1:64:3c:a5:f1:35:8e:1d:db:0e:dc:0d:7e:b3 -----BEGIN CERTIFICATE----- MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQG EwJVUzETMBEGA1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMx IDAeBgNVBAMTF2VtU2lnbiBFQ0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAw MFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQDExdlbVNpZ24gRUND IFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd6bci MK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4Ojavti sIGJAnB9SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0O BBYEFPtaSNCAIEDyqOkAB2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB Af8EBTADAQH/MAoGCCqGSM49BAMDA2gAMGUCMQC02C8Cif22TGK6Q04ThHK1rt0c 3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwUZOR8loMRnLDRWmFLpg9J 0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== -----END CERTIFICATE----- # Issuer: CN=Hongkong Post Root CA 3 O=Hongkong Post # Subject: CN=Hongkong Post Root CA 3 O=Hongkong Post # Label: "Hongkong Post Root CA 3" # Serial: 46170865288971385588281144162979347873371282084 # MD5 Fingerprint: 11:fc:9f:bd:73:30:02:8a:fd:3f:f3:58:b9:cb:20:f0 # SHA1 Fingerprint: 58:a2:d0:ec:20:52:81:5b:c1:f3:f8:64:02:24:4e:c2:8e:02:4b:02 # SHA256 Fingerprint: 5a:2f:c0:3f:0c:83:b0:90:bb:fa:40:60:4b:09:88:44:6c:76:36:18:3d:f9:84:6e:17:10:1a:44:7f:b8:ef:d6 -----BEGIN CERTIFICATE----- MIIFzzCCA7egAwIBAgIUCBZfikyl7ADJk0DfxMauI7gcWqQwDQYJKoZIhvcNAQEL BQAwbzELMAkGA1UEBhMCSEsxEjAQBgNVBAgTCUhvbmcgS29uZzESMBAGA1UEBxMJ SG9uZyBLb25nMRYwFAYDVQQKEw1Ib25na29uZyBQb3N0MSAwHgYDVQQDExdIb25n a29uZyBQb3N0IFJvb3QgQ0EgMzAeFw0xNzA2MDMwMjI5NDZaFw00MjA2MDMwMjI5 NDZaMG8xCzAJBgNVBAYTAkhLMRIwEAYDVQQIEwlIb25nIEtvbmcxEjAQBgNVBAcT CUhvbmcgS29uZzEWMBQGA1UEChMNSG9uZ2tvbmcgUG9zdDEgMB4GA1UEAxMXSG9u Z2tvbmcgUG9zdCBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK AoICAQCziNfqzg8gTr7m1gNt7ln8wlffKWihgw4+aMdoWJwcYEuJQwy51BWy7sFO dem1p+/l6TWZ5Mwc50tfjTMwIDNT2aa71T4Tjukfh0mtUC1Qyhi+AViiE3CWu4mI VoBc+L0sPOFMV4i707mV78vH9toxdCim5lSJ9UExyuUmGs2C4HDaOym71QP1mbpV 9WTRYA6ziUm4ii8F0oRFKHyPaFASePwLtVPLwpgchKOesL4jpNrcyCse2m5FHomY 2vkALgbpDDtw1VAliJnLzXNg99X/NWfFobxeq81KuEXryGgeDQ0URhLj0mRiikKY vLTGCAj4/ahMZJx2Ab0vqWwzD9g/KLg8aQFChn5pwckGyuV6RmXpwtZQQS4/t+Tt bNe/JgERohYpSms0BpDsE9K2+2p20jzt8NYt3eEV7KObLyzJPivkaTv/ciWxNoZb x39ri1UbSsUgYT2uy1DhCDq+sI9jQVMwCFk8mB13umOResoQUGC/8Ne8lYePl8X+ l2oBlKN8W4UdKjk60FSh0Tlxnf0h+bV78OLgAo9uliQlLKAeLKjEiafv7ZkGL7YK TE/bosw3Gq9HhS2KX8Q0NEwA/RiTZxPRN+ZItIsGxVd7GYYKecsAyVKvQv83j+Gj Hno9UKtjBucVtT+2RTeUN7F+8kjDf8V1/peNRY8apxpyKBpADwIDAQABo2MwYTAP BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQXnc0e i9Y5K3DTXNSguB+wAPzFYTAdBgNVHQ4EFgQUF53NHovWOStw01zUoLgfsAD8xWEw DQYJKoZIhvcNAQELBQADggIBAFbVe27mIgHSQpsY1Q7XZiNc4/6gx5LS6ZStS6LG 7BJ8dNVI0lkUmcDrudHr9EgwW62nV3OZqdPlt9EuWSRY3GguLmLYauRwCy0gUCCk MpXRAJi70/33MvJJrsZ64Ee+bs7Lo3I6LWldy8joRTnU+kLBEUx3XZL7av9YROXr gZ6voJmtvqkBZss4HTzfQx/0TW60uhdG/H39h4F5ag0zD/ov+BS5gLNdTaqX4fnk GMX41TiMJjz98iji7lpJiCzfeT2OnpA8vUFKOt1b9pq0zj8lMH8yfaIDlNDceqFS 3m6TjRgm/VWsvY+b0s+v54Ysyx8Jb6NvqYTUc79NoXQbTiNg8swOqn+knEwlqLJm Ozj/2ZQw9nKEvmhVEA/GcywWaZMH/rFF7buiVWqw2rVKAiUnhde3t4ZEFolsgCs+ l6mc1X5VTMbeRRAc6uk7nwNT7u56AQIWeNTowr5GdogTPyK7SBIdUgC0An4hGh6c JfTzPV4e0hz5sy229zdcxsshTrD3mUcYhcErulWuBurQB7Lcq9CClnXO0lD+mefP L5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB60PZ2Pierc+xYw5F9KBa LJstxabArahH9CdMOA0uG0k7UvToiIMrVCjU8jVStDKDYmlkDJGcn5fqdBb9HxEG mpv0 -----END CERTIFICATE----- # Issuer: CN=Entrust Root Certification Authority - G4 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2015 Entrust, Inc. - for authorized use only # Subject: CN=Entrust Root Certification Authority - G4 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2015 Entrust, Inc. - for authorized use only # Label: "Entrust Root Certification Authority - G4" # Serial: 289383649854506086828220374796556676440 # MD5 Fingerprint: 89:53:f1:83:23:b7:7c:8e:05:f1:8c:71:38:4e:1f:88 # SHA1 Fingerprint: 14:88:4e:86:26:37:b0:26:af:59:62:5c:40:77:ec:35:29:ba:96:01 # SHA256 Fingerprint: db:35:17:d1:f6:73:2a:2d:5a:b9:7c:53:3e:c7:07:79:ee:32:70:a6:2f:b4:ac:42:38:37:24:60:e6:f0:1e:88 -----BEGIN CERTIFICATE----- MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAw gb4xCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQL Ex9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykg MjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMjAw BgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEc0 MB4XDTE1MDUyNzExMTExNloXDTM3MTIyNzExNDExNlowgb4xCzAJBgNVBAYTAlVT MRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1 c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJ bmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3Qg Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEc0MIICIjANBgkqhkiG9w0B AQEFAAOCAg8AMIICCgKCAgEAsewsQu7i0TD/pZJH4i3DumSXbcr3DbVZwbPLqGgZ 2K+EbTBwXX7zLtJTmeH+H17ZSK9dE43b/2MzTdMAArzE+NEGCJR5WIoV3imz/f3E T+iq4qA7ec2/a0My3dl0ELn39GjUu9CH1apLiipvKgS1sqbHoHrmSKvS0VnM1n4j 5pds8ELl3FFLFUHtSUrJ3hCX1nbB76W1NhSXNdh4IjVS70O92yfbYVaCNNzLiGAM C1rlLAHGVK/XqsEQe9IFWrhAnoanw5CGAlZSCXqc0ieCU0plUmr1POeo8pyvi73T DtTUXm6Hnmo9RR3RXRv06QqsYJn7ibT/mCzPfB3pAqoEmh643IhuJbNsZvc8kPNX wbMv9W3y+8qh+CmdRouzavbmZwe+LGcKKh9asj5XxNMhIWNlUpEbsZmOeX7m640A 2Vqq6nPopIICR5b+W45UYaPrL0swsIsjdXJ8ITzI9vF01Bx7owVV7rtNOzK+mndm nqxpkCIHH2E6lr7lmk/MBTwoWdPBDFSoWWG9yHJM6Nyfh3+9nEg2XpWjDrk4JFX8 dWbrAuMINClKxuMrLzOg2qOGpRKX/YAr2hRC45K9PvJdXmd0LhyIRyk0X+IyqJwl N4y6mACXi0mWHv0liqzc2thddG5msP9E36EYxr5ILzeUePiVSj9/E15dWf10hkNj c0kCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD VR0OBBYEFJ84xFYjwznooHFs6FRM5Og6sb9nMA0GCSqGSIb3DQEBCwUAA4ICAQAS 5UKme4sPDORGpbZgQIeMJX6tuGguW8ZAdjwD+MlZ9POrYs4QjbRaZIxowLByQzTS Gwv2LFPSypBLhmb8qoMi9IsabyZIrHZ3CL/FmFz0Jomee8O5ZDIBf9PD3Vht7LGr hFV0d4QEJ1JrhkzO3bll/9bGXp+aEJlLdWr+aumXIOTkdnrG0CSqkM0gkLpHZPt/ B7NTeLUKYvJzQ85BK4FqLoUWlFPUa19yIqtRLULVAJyZv967lDtX/Zr1hstWO1uI AeV8KEsD+UmDfLJ/fOPtjqF/YFOOVZ1QNBIPt5d7bIdKROf1beyAN/BYGW5KaHbw H5Lk6rWS02FREAutp9lfx1/cH6NcjKF+m7ee01ZvZl4HliDtC3T7Zk6LERXpgUl+ b7DUUH8i119lAg2m9IUe2K4GS0qn0jFmwvjO5QimpAKWRGhXxNUzzxkvFMSUHHuk 2fCfDrGA4tGeEWSpiBE6doLlYsKA2KSD7ZPvfC+QsDJMlhVoSFLUmQjAJOgc47Ol IQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk 5F6G+TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuY n/PIjhs4ViFqUZPTkcpG2om3PVODLAgfi49T3f+sHw== -----END CERTIFICATE----- grpc-1.30.2/examples/000077500000000000000000000000001370425124100143455ustar00rootroot00000000000000grpc-1.30.2/examples/BUILD000066400000000000000000000127431370425124100151360ustar00rootroot00000000000000# Copyright 2017 gRPC 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 # # 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. licenses(["notice"]) # 3-clause BSD package(default_visibility = ["//visibility:public"]) load("@grpc_python_dependencies//:requirements.bzl", "requirement") load("@rules_proto//proto:defs.bzl", "proto_library") load("//bazel:cc_grpc_library.bzl", "cc_grpc_library") load("//bazel:grpc_build_system.bzl", "grpc_proto_library") load("//bazel:python_rules.bzl", "py_grpc_library", "py_proto_library") grpc_proto_library( name = "auth_sample", srcs = ["protos/auth_sample.proto"], ) grpc_proto_library( name = "hellostreamingworld", srcs = ["protos/hellostreamingworld.proto"], ) # The following three rules demonstrate the usage of the cc_grpc_library rule in # in a mode compatible with the native proto_library and cc_proto_library rules. proto_library( name = "helloworld_proto", srcs = ["protos/helloworld.proto"], ) cc_proto_library( name = "helloworld_cc_proto", deps = [":helloworld_proto"], ) cc_grpc_library( name = "helloworld_cc_grpc", srcs = [":helloworld_proto"], grpc_only = True, deps = [":helloworld_cc_proto"], ) grpc_proto_library( name = "route_guide", srcs = ["protos/route_guide.proto"], ) grpc_proto_library( name = "keyvaluestore", srcs = ["protos/keyvaluestore.proto"], ) proto_library( name = "protos/helloworld_proto", srcs = ["protos/helloworld.proto"], ) py_proto_library( name = "helloworld_py_pb2", deps = [":protos/helloworld_proto"], ) py_grpc_library( name = "helloworld_py_pb2_grpc", srcs = [":protos/helloworld_proto"], deps = [":helloworld_py_pb2"], ) cc_binary( name = "greeter_client", srcs = ["cpp/helloworld/greeter_client.cc"], defines = ["BAZEL_BUILD"], deps = [ ":helloworld_cc_grpc", "//:grpc++", ], ) cc_binary( name = "greeter_async_client", srcs = ["cpp/helloworld/greeter_async_client.cc"], defines = ["BAZEL_BUILD"], deps = [ ":helloworld_cc_grpc", "//:grpc++", ], ) cc_binary( name = "greeter_async_client2", srcs = ["cpp/helloworld/greeter_async_client2.cc"], defines = ["BAZEL_BUILD"], deps = [ ":helloworld_cc_grpc", "//:grpc++", ], ) cc_binary( name = "greeter_server", srcs = ["cpp/helloworld/greeter_server.cc"], defines = ["BAZEL_BUILD"], deps = [ ":helloworld_cc_grpc", "//:grpc++", "//:grpc++_reflection", ], ) cc_binary( name = "greeter_async_server", srcs = ["cpp/helloworld/greeter_async_server.cc"], defines = ["BAZEL_BUILD"], deps = [ ":helloworld_cc_grpc", "//:grpc++", ], ) cc_binary( name = "metadata_client", srcs = ["cpp/metadata/greeter_client.cc"], defines = ["BAZEL_BUILD"], deps = [ ":helloworld_cc_grpc", "//:grpc++", ], ) cc_binary( name = "metadata_server", srcs = ["cpp/metadata/greeter_server.cc"], defines = ["BAZEL_BUILD"], deps = [ ":helloworld_cc_grpc", "//:grpc++", ], ) cc_binary( name = "lb_client", srcs = ["cpp/load_balancing/greeter_client.cc"], defines = ["BAZEL_BUILD"], deps = [ ":helloworld_cc_grpc", "//:grpc++", ], ) cc_binary( name = "lb_server", srcs = ["cpp/load_balancing/greeter_server.cc"], defines = ["BAZEL_BUILD"], deps = [ ":helloworld_cc_grpc", "//:grpc++", ], ) cc_binary( name = "compression_client", srcs = ["cpp/compression/greeter_client.cc"], defines = ["BAZEL_BUILD"], deps = [ ":helloworld_cc_grpc", "//:grpc++", ], ) cc_binary( name = "compression_server", srcs = ["cpp/compression/greeter_server.cc"], defines = ["BAZEL_BUILD"], deps = [ ":helloworld_cc_grpc", "//:grpc++", ], ) cc_binary( name = "keyvaluestore_client", srcs = [ "cpp/keyvaluestore/caching_interceptor.h", "cpp/keyvaluestore/client.cc", ], defines = ["BAZEL_BUILD"], deps = [ ":keyvaluestore", "//:grpc++", ], ) cc_binary( name = "keyvaluestore_server", srcs = ["cpp/keyvaluestore/server.cc"], defines = ["BAZEL_BUILD"], deps = [ ":keyvaluestore", "//:grpc++", ], ) cc_binary( name = "route_guide_client", srcs = [ "cpp/route_guide/helper.cc", "cpp/route_guide/helper.h", "cpp/route_guide/route_guide_client.cc", ], data = ["cpp/route_guide/route_guide_db.json"], defines = ["BAZEL_BUILD"], deps = [ ":route_guide", "//:grpc++", ], ) cc_binary( name = "route_guide_server", srcs = [ "cpp/route_guide/helper.cc", "cpp/route_guide/helper.h", "cpp/route_guide/route_guide_server.cc", ], data = ["cpp/route_guide/route_guide_db.json"], defines = ["BAZEL_BUILD"], deps = [ ":route_guide", "//:grpc++", ], ) proto_library( name = "route_guide_proto", srcs = ["protos/route_guide.proto"], ) grpc-1.30.2/examples/README.md000066400000000000000000000017761370425124100156370ustar00rootroot00000000000000# Examples This directory contains code examples for all the C-based gRPC implementations: C++, Node.js, Python, Ruby, Objective-C, PHP, and C#. You can find examples and instructions specific to your favourite language in the relevant subdirectory. Examples for Go and Java gRPC live in their own repositories: * [Java](https://github.com/grpc/grpc-java/tree/master/examples) * [Android Java](https://github.com/grpc/grpc-java/tree/master/examples/android) * [Go](https://github.com/grpc/grpc-go/tree/master/examples) For more comprehensive documentation, including an [overview](https://grpc.io/docs/) and tutorials that use this example code, visit [grpc.io](https://grpc.io/docs/). ## Quick start Each example directory has quick start instructions for the appropriate language, including installation instructions and how to run our simplest Hello World example: * [C++](cpp) * [Ruby](ruby) * [Node.js](node) * [Python](python/helloworld) * [C#](csharp) * [Objective-C](objective-c/helloworld) * [PHP](php) grpc-1.30.2/examples/android/000077500000000000000000000000001370425124100157655ustar00rootroot00000000000000grpc-1.30.2/examples/android/helloworld/000077500000000000000000000000001370425124100201405ustar00rootroot00000000000000grpc-1.30.2/examples/android/helloworld/.gitignore000066400000000000000000000001661370425124100221330ustar00rootroot00000000000000*.iml .gradle /local.properties /.idea/workspace.xml /.idea/libraries .DS_Store /build /captures .externalNativeBuild grpc-1.30.2/examples/android/helloworld/README.md000066400000000000000000000010531370425124100214160ustar00rootroot00000000000000gRPC on Android ============== Note: Building the protobuf dependency for Android requires https://github.com/google/protobuf/pull/3878. This fix will be in the next protobuf release, but until then must be manually patched in to `third_party/protobuf` to build gRPC for Android. PREREQUISITES ------------- - Android SDK - Android NDK - `protoc` and `grpc_cpp_plugin` binaries on the host system INSTALL ------- The example application can be built via Android Studio or on the command line using `gradle`: ```sh $ ./gradlew installDebug ``` grpc-1.30.2/examples/android/helloworld/app/000077500000000000000000000000001370425124100207205ustar00rootroot00000000000000grpc-1.30.2/examples/android/helloworld/app/.gitignore000066400000000000000000000000071370425124100227050ustar00rootroot00000000000000/build grpc-1.30.2/examples/android/helloworld/app/CMakeLists.txt000066400000000000000000000060331370425124100234620ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.4.1) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") set(helloworld_PROTOBUF_PROTOC_EXECUTABLE "/usr/local/bin/protoc" CACHE STRING "Protoc binary on host") set(helloworld_GRPC_CPP_PLUGIN_EXECUTABLE "/usr/local/bin/grpc_cpp_plugin" CACHE STRING "gRPC CPP plugin binary on host") set(GRPC_SRC_DIR ../../../../) set(GRPC_BUILD_DIR ../grpc/outputs/${ANDROID_ABI}) file(MAKE_DIRECTORY ${GRPC_BUILD_DIR}) add_subdirectory(${GRPC_SRC_DIR} ${GRPC_BUILD_DIR}) set(GRPC_PROTO_GENS_DIR ${CMAKE_BINARY_DIR}/gens) file(MAKE_DIRECTORY ${GRPC_PROTO_GENS_DIR}) include_directories(${GRPC_PROTO_GENS_DIR}) function(android_protobuf_grpc_generate_cpp SRC_FILES HDR_FILES INCLUDE_ROOT) if(NOT ARGN) message(SEND_ERROR "Error: android_protobuf_grpc_generate_cpp() called without any proto files") return() endif() set(${SRC_FILES}) set(${HDR_FILES}) set(PROTOBUF_INCLUDE_PATH -I ${INCLUDE_ROOT}) foreach(FIL ${ARGN}) get_filename_component(ABS_FIL ${FIL} ABSOLUTE) get_filename_component(FIL_WE ${FIL} NAME_WE) file(RELATIVE_PATH REL_FIL ${CMAKE_CURRENT_SOURCE_DIR}/${INCLUDE_ROOT} ${ABS_FIL}) get_filename_component(REL_DIR ${REL_FIL} DIRECTORY) set(RELFIL_WE "${REL_DIR}/${FIL_WE}") list(APPEND ${SRC_FILES} "${GRPC_PROTO_GENS_DIR}/${RELFIL_WE}.pb.cc") list(APPEND ${HDR_FILES} "${GRPC_PROTO_GENS_DIR}/${RELFIL_WE}.pb.h") list(APPEND ${SRC_FILES} "${GRPC_PROTO_GENS_DIR}/${RELFIL_WE}.grpc.pb.cc") list(APPEND ${HDR_FILES} "${GRPC_PROTO_GENS_DIR}/${RELFIL_WE}.grpc.pb.h") add_custom_command( OUTPUT "${GRPC_PROTO_GENS_DIR}/${RELFIL_WE}.grpc.pb.cc" "${GRPC_PROTO_GENS_DIR}/${RELFIL_WE}.grpc.pb.h" "${GRPC_PROTO_GENS_DIR}/${RELFIL_WE}.pb.cc" "${GRPC_PROTO_GENS_DIR}/${RELFIL_WE}.pb.h" COMMAND ${helloworld_PROTOBUF_PROTOC_EXECUTABLE} ARGS --grpc_out=${GRPC_PROTO_GENS_DIR} --cpp_out=${GRPC_PROTO_GENS_DIR} --plugin=protoc-gen-grpc=${helloworld_GRPC_CPP_PLUGIN_EXECUTABLE} ${PROTOBUF_INCLUDE_PATH} ${REL_FIL} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} DEPENDS ${helloworld_PROTOBUF_PROTOC_EXECUTABLE} ${helloworld_GRPC_CPP_PLUGIN_EXECUTABLE} ${ABS_FIL} ) endforeach() set_source_files_properties(${${SRC_FILES}} ${${HDR_FILES}} PROPERTIES GENERATED TRUE) set(${SRC_FILES} ${${SRC_FILES}} PARENT_SCOPE) set(${HDR_FILES} ${${HDR_FILES}} PARENT_SCOPE) endfunction() set(PROTO_BASE_DIR ${GRPC_SRC_DIR}/examples/protos) android_protobuf_grpc_generate_cpp( HELLOWORLD_PROTO_SRCS HELLOWORLD_PROTO_HDRS ${PROTO_BASE_DIR} ${PROTO_BASE_DIR}/helloworld.proto) add_library(helloworld_proto_lib SHARED ${HELLOWORLD_PROTO_HDRS} ${HELLOWORLD_PROTO_SRCS}) target_link_libraries(helloworld_proto_lib grpc++ libprotobuf android log) find_library(log-lib log) add_library(grpc-helloworld SHARED src/main/cpp/grpc-helloworld.cc) target_include_directories(grpc-helloworld PRIVATE ${HELLOWORLD_PROTO_HEADERS}) target_link_libraries(grpc-helloworld helloworld_proto_lib android ${log-lib}) grpc-1.30.2/examples/android/helloworld/app/build.gradle000066400000000000000000000041301370425124100231750ustar00rootroot00000000000000apply plugin: 'com.android.application' android { compileSdkVersion 26 defaultConfig { applicationId "io.grpc.android.cpp.helloworldexample" minSdkVersion 14 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" externalNativeBuild { cmake { // The paths to the protoc and grpc_cpp_plugin binaries on the host system (codegen // is not cross-compiled to Android) def protoc = project.hasProperty('protoc') ? project.property('protoc') : '/usr/local/bin/protoc' def grpc_cpp_plugin = project.hasProperty('grpc_cpp_plugin') ? project.property('grpc_cpp_plugin') : '/usr/local/bin/grpc_cpp_plugin' cppFlags "-std=c++14 -frtti -fexceptions" arguments '-DANDROID_STL=c++_static' arguments '-DRUN_HAVE_POSIX_REGEX=0' arguments '-DRUN_HAVE_STD_REGEX=0' arguments '-DRUN_HAVE_STEADY_CLOCK=0' arguments '-Dprotobuf_BUILD_PROTOC_BINARIES=off' arguments '-DgRPC_BUILD_CODEGEN=off' arguments '-Dhelloworld_PROTOBUF_PROTOC_EXECUTABLE=' + protoc arguments '-Dhelloworld_GRPC_CPP_PLUGIN_EXECUTABLE=' + grpc_cpp_plugin } } ndk.abiFilters 'x86' } buildTypes { debug { minifyEnabled false } release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } externalNativeBuild { cmake { path "CMakeLists.txt" } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:26.1.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } grpc-1.30.2/examples/android/helloworld/app/proguard-rules.pro000066400000000000000000000013571370425124100244230ustar00rootroot00000000000000# Add project specific ProGuard rules here. # You can control the set of applied configuration files using the # proguardFiles setting in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} # Uncomment this to preserve the line number information for # debugging stack traces. #-keepattributes SourceFile,LineNumberTable # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile grpc-1.30.2/examples/android/helloworld/app/src/000077500000000000000000000000001370425124100215075ustar00rootroot00000000000000grpc-1.30.2/examples/android/helloworld/app/src/main/000077500000000000000000000000001370425124100224335ustar00rootroot00000000000000grpc-1.30.2/examples/android/helloworld/app/src/main/AndroidManifest.xml000066400000000000000000000014261370425124100262270ustar00rootroot00000000000000 grpc-1.30.2/examples/android/helloworld/app/src/main/cpp/000077500000000000000000000000001370425124100232155ustar00rootroot00000000000000grpc-1.30.2/examples/android/helloworld/app/src/main/cpp/grpc-helloworld.cc000066400000000000000000000110221370425124100266240ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #include #include #include #include "helloworld.grpc.pb.h" using grpc::Channel; using grpc::ClientContext; using grpc::Server; using grpc::ServerBuilder; using grpc::ServerContext; using grpc::Status; using helloworld::Greeter; using helloworld::HelloReply; using helloworld::HelloRequest; std::atomic stop_server(false); // Logic and data behind the server's behavior. class GreeterServiceImpl final : public Greeter::Service { Status SayHello(ServerContext* context, const HelloRequest* request, HelloReply* reply) override { std::string prefix("Hello "); reply->set_message(prefix + request->name()); return Status::OK; } }; void StartServer(JNIEnv* env, jobject obj, jmethodID is_cancelled_mid, int port) { const int host_port_buf_size = 1024; char host_port[host_port_buf_size]; snprintf(host_port, host_port_buf_size, "0.0.0.0:%d", port); GreeterServiceImpl service; ServerBuilder builder; // Listen on the given address without any authentication mechanism. builder.AddListeningPort(host_port, grpc::InsecureServerCredentials()); // Register "service" as the instance through which we'll communicate with // clients. In this case it corresponds to an *synchronous* service. builder.RegisterService(&service); // Finally assemble the server. std::unique_ptr server(builder.BuildAndStart()); while (!stop_server.load()) { // Check with the Java code to see if the user has requested the server stop or the app is no // longer in the foreground. jboolean is_cancelled = env->CallBooleanMethod(obj, is_cancelled_mid); if (is_cancelled == JNI_TRUE) { stop_server = true; } } } class GreeterClient { public: GreeterClient(std::shared_ptr channel) : stub_(Greeter::NewStub(channel)) {} // Assembles the client's payload, sends it and presents the response back // from the server. std::string SayHello(const std::string& user) { // Data we are sending to the server. HelloRequest request; request.set_name(user); // Container for the data we expect from the server. HelloReply reply; // Context for the client. It could be used to convey extra information to // the server and/or tweak certain RPC behaviors. ClientContext context; // The actual RPC. Status status = stub_->SayHello(&context, request, &reply); if (status.ok()) { return reply.message(); } else { return status.error_message(); } } private: std::unique_ptr stub_; }; // Send an RPC and return the response. Invoked from Java code. extern "C" JNIEXPORT jstring JNICALL Java_io_grpc_helloworldexample_cpp_HelloworldActivity_sayHello( JNIEnv* env, jobject obj_unused, jstring host_raw, jint port_raw, jstring message_raw) { const char* host_chars = env->GetStringUTFChars(host_raw, (jboolean*)0); std::string host(host_chars, env->GetStringUTFLength(host_raw)); int port = static_cast(port_raw); const char* message_chars = env->GetStringUTFChars(message_raw, (jboolean*)0); std::string message(message_chars, env->GetStringUTFLength(message_raw)); const int host_port_buf_size = 1024; char host_port[host_port_buf_size]; snprintf(host_port, host_port_buf_size, "%s:%d", host.c_str(), port); GreeterClient greeter( grpc::CreateChannel(host_port, grpc::InsecureChannelCredentials())); std::string reply = greeter.SayHello(message); return env->NewStringUTF(reply.c_str()); } // Start the server. Invoked from Java code. extern "C" JNIEXPORT void JNICALL Java_io_grpc_helloworldexample_cpp_HelloworldActivity_startServer( JNIEnv* env, jobject obj_this, jint port_raw) { int port = static_cast(port_raw); jclass cls = env->GetObjectClass(obj_this); jmethodID is_cancelled_mid = env->GetMethodID(cls, "isRunServerTaskCancelled", "()Z"); stop_server = false; StartServer(env, obj_this, is_cancelled_mid, port); } grpc-1.30.2/examples/android/helloworld/app/src/main/java/000077500000000000000000000000001370425124100233545ustar00rootroot00000000000000grpc-1.30.2/examples/android/helloworld/app/src/main/java/io/000077500000000000000000000000001370425124100237635ustar00rootroot00000000000000grpc-1.30.2/examples/android/helloworld/app/src/main/java/io/grpc/000077500000000000000000000000001370425124100247165ustar00rootroot00000000000000grpc-1.30.2/examples/android/helloworld/app/src/main/java/io/grpc/helloworldexample/000077500000000000000000000000001370425124100304455ustar00rootroot00000000000000grpc-1.30.2/examples/android/helloworld/app/src/main/java/io/grpc/helloworldexample/cpp/000077500000000000000000000000001370425124100312275ustar00rootroot00000000000000HelloworldActivity.java000066400000000000000000000130471370425124100356500ustar00rootroot00000000000000grpc-1.30.2/examples/android/helloworld/app/src/main/java/io/grpc/helloworldexample/cpp/* * Copyright 2018, gRPC Authors All rights reserved. * * 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. */ package io.grpc.helloworldexample.cpp; import android.content.Context; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.text.method.ScrollingMovementMethod; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import java.lang.ref.WeakReference; public class HelloworldActivity extends AppCompatActivity { static { System.loadLibrary("grpc-helloworld"); } private Button sendButton; private Button serverButton; private EditText hostEdit; private EditText portEdit; private EditText messageEdit; private EditText serverPortEdit; private TextView resultText; private GrpcTask grpcTask; private RunServerTask runServerTask; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_helloworld); sendButton = (Button) findViewById(R.id.send_button); serverButton = (Button) findViewById(R.id.server_button); hostEdit = (EditText) findViewById(R.id.host_edit_text); portEdit = (EditText) findViewById(R.id.port_edit_text); messageEdit = (EditText) findViewById(R.id.message_edit_text); serverPortEdit = (EditText) findViewById(R.id.server_port_edit_text); resultText = (TextView) findViewById(R.id.grpc_response_text); resultText.setMovementMethod(new ScrollingMovementMethod()); } @Override protected void onPause() { super.onPause(); if (runServerTask != null) { runServerTask.cancel(true); runServerTask = null; serverButton.setText("Start gRPC Server"); } if (grpcTask != null) { grpcTask.cancel(true); grpcTask = null; } } public void sendMessage(View view) { ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)) .hideSoftInputFromWindow(hostEdit.getWindowToken(), 0); sendButton.setEnabled(false); resultText.setText(""); grpcTask = new GrpcTask(this); grpcTask.executeOnExecutor( AsyncTask.THREAD_POOL_EXECUTOR, hostEdit.getText().toString(), messageEdit.getText().toString(), portEdit.getText().toString()); } public void startOrStopServer(View view) { if (runServerTask != null) { runServerTask.cancel(true); runServerTask = null; serverButton.setText("Start gRPC Server"); Toast.makeText(this, "Server stopped", Toast.LENGTH_SHORT).show(); } else { runServerTask = new RunServerTask(this); String portStr = serverPortEdit.getText().toString(); int port = TextUtils.isEmpty(portStr) ? 50051 : Integer.valueOf(portStr); runServerTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, port); serverButton.setText("Stop gRPC Server"); Toast.makeText(this, "Server started on port " + port, Toast.LENGTH_SHORT).show(); } } private static class RunServerTask extends AsyncTask { private final WeakReference activityReference; private RunServerTask(HelloworldActivity activity) { this.activityReference = new WeakReference(activity); } @Override protected Void doInBackground(Integer... params) { int port = params[0]; HelloworldActivity activity = activityReference.get(); if (activity != null) { activity.startServer(port); } return null; } } private static class GrpcTask extends AsyncTask { private final WeakReference activityReference; private GrpcTask(HelloworldActivity activity) { this.activityReference = new WeakReference(activity); } @Override protected String doInBackground(String... params) { String host = params[0]; String message = params[1]; String portStr = params[2]; int port = TextUtils.isEmpty(portStr) ? 50051 : Integer.valueOf(portStr); return sayHello(host, port, message); } @Override protected void onPostExecute(String result) { HelloworldActivity activity = activityReference.get(); if (activity == null || isCancelled()) { return; } TextView resultText = (TextView) activity.findViewById(R.id.grpc_response_text); Button sendButton = (Button) activity.findViewById(R.id.send_button); resultText.setText(result); sendButton.setEnabled(true); } } /** * Invoked by native code to stop server when RunServerTask has been canceled, either by user * request or upon app moving to background. */ public boolean isRunServerTaskCancelled() { if (runServerTask != null) { return runServerTask.isCancelled(); } return false; } public static native String sayHello(String host, int port, String message); public native void startServer(int port); } grpc-1.30.2/examples/android/helloworld/app/src/main/res/000077500000000000000000000000001370425124100232245ustar00rootroot00000000000000grpc-1.30.2/examples/android/helloworld/app/src/main/res/layout/000077500000000000000000000000001370425124100245415ustar00rootroot00000000000000grpc-1.30.2/examples/android/helloworld/app/src/main/res/layout/activity_helloworld.xml000066400000000000000000000056611370425124100313620ustar00rootroot00000000000000 grpc-1.30.2/examples/csharp/HelloworldXamarin/iOS/ViewController.cs000066400000000000000000000052111370425124100252560ustar00rootroot00000000000000#region Copyright notice and license // Copyright 2018 The gRPC 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 // // 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. #endregion using System; using System.Threading.Tasks; using Grpc.Core; using Helloworld; using UIKit; namespace HelloworldXamarin.iOS { public partial class ViewController : UIViewController { const int Port = 50051; int count = 1; public ViewController(IntPtr handle) : base(handle) { } public override void ViewDidLoad() { base.ViewDidLoad(); // Perform any additional setup after loading the view, typically from a nib. Button.AccessibilityIdentifier = "myButton"; Button.TouchUpInside += delegate { var title = SayHello(); Button.SetTitle(title, UIControlState.Normal); }; } public override void DidReceiveMemoryWarning() { base.DidReceiveMemoryWarning(); // Release any cached data, images, etc that aren't in use. } private string SayHello() { Server server = new Server { Services = { Greeter.BindService(new GreeterImpl()) }, Ports = { new ServerPort("localhost", Port, ServerCredentials.Insecure) } }; server.Start(); Channel channel = new Channel("localhost:50051", ChannelCredentials.Insecure); var client = new Greeter.GreeterClient(channel); string user = "Xamarin " + count; var reply = client.SayHello(new HelloRequest { Name = user }); channel.ShutdownAsync().Wait(); server.ShutdownAsync().Wait(); count++; return "Greeting: " + reply.Message; } class GreeterImpl : Greeter.GreeterBase { // Server side handler of the SayHello RPC public override Task SayHello(HelloRequest request, ServerCallContext context) { return Task.FromResult(new HelloReply { Message = "Hello " + request.Name }); } } } } grpc-1.30.2/examples/csharp/HelloworldXamarin/iOS/ViewController.designer.cs000066400000000000000000000011501370425124100270530ustar00rootroot00000000000000// // This file has been generated automatically by MonoDevelop to store outlets and // actions made in the Xcode designer. If it is removed, they will be lost. // Manual changes to this file may not be handled correctly. // using Foundation; namespace HelloworldXamarin.iOS { [Register("ViewController")] partial class ViewController { [Outlet] UIKit.UIButton Button { get; set; } void ReleaseDesignerOutlets() { if (Button != null) { Button.Dispose(); Button = null; } } } } grpc-1.30.2/examples/csharp/HelloworldXamarin/iOS/packages.config000066400000000000000000000116731370425124100247270ustar00rootroot00000000000000 grpc-1.30.2/examples/csharp/RouteGuide/000077500000000000000000000000001370425124100177015ustar00rootroot00000000000000grpc-1.30.2/examples/csharp/RouteGuide/.gitignore000066400000000000000000000000461370425124100216710ustar00rootroot00000000000000bin/ obj/ packages/ *.suo *.userprefs grpc-1.30.2/examples/csharp/RouteGuide/README.md000066400000000000000000000003231370425124100211560ustar00rootroot00000000000000# gRPC Basics: C# sample code The files in this folder are the samples used in [gRPC Basics: C#][], a detailed tutorial for using gRPC in C#. [gRPC Basics: C#]:https://grpc.io/docs/tutorials/basic/csharp.html grpc-1.30.2/examples/csharp/RouteGuide/RouteGuide.sln000066400000000000000000000036541370425124100225030ustar00rootroot00000000000000 Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 VisualStudioVersion = 15.0.26228.4 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RouteGuide", "RouteGuide\RouteGuide.csproj", "{49954D9C-5F17-4662-96B2-73BE833DD81A}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RouteGuideClient", "RouteGuideClient\RouteGuideClient.csproj", "{D47BE663-4DE3-4206-B7A8-EA3FA066DADC}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RouteGuideServer", "RouteGuideServer\RouteGuideServer.csproj", "{4B7C7794-BE24-4477-ACE7-18259EB73D27}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {49954D9C-5F17-4662-96B2-73BE833DD81A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {49954D9C-5F17-4662-96B2-73BE833DD81A}.Debug|Any CPU.Build.0 = Debug|Any CPU {49954D9C-5F17-4662-96B2-73BE833DD81A}.Release|Any CPU.ActiveCfg = Release|Any CPU {49954D9C-5F17-4662-96B2-73BE833DD81A}.Release|Any CPU.Build.0 = Release|Any CPU {D47BE663-4DE3-4206-B7A8-EA3FA066DADC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D47BE663-4DE3-4206-B7A8-EA3FA066DADC}.Debug|Any CPU.Build.0 = Debug|Any CPU {D47BE663-4DE3-4206-B7A8-EA3FA066DADC}.Release|Any CPU.ActiveCfg = Release|Any CPU {D47BE663-4DE3-4206-B7A8-EA3FA066DADC}.Release|Any CPU.Build.0 = Release|Any CPU {4B7C7794-BE24-4477-ACE7-18259EB73D27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4B7C7794-BE24-4477-ACE7-18259EB73D27}.Debug|Any CPU.Build.0 = Debug|Any CPU {4B7C7794-BE24-4477-ACE7-18259EB73D27}.Release|Any CPU.ActiveCfg = Release|Any CPU {4B7C7794-BE24-4477-ACE7-18259EB73D27}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal grpc-1.30.2/examples/csharp/RouteGuide/RouteGuide/000077500000000000000000000000001370425124100217555ustar00rootroot00000000000000grpc-1.30.2/examples/csharp/RouteGuide/RouteGuide/RouteGuide.csproj000066400000000000000000000012121370425124100252470ustar00rootroot00000000000000 netstandard1.5 grpc-1.30.2/examples/csharp/RouteGuide/RouteGuide/RouteGuideUtil.cs000066400000000000000000000120021370425124100252110ustar00rootroot00000000000000// Copyright 2015 gRPC 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 // // 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. using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace Routeguide { ///

/// Utility methods for the route guide example. /// public static class RouteGuideUtil { public const string DefaultFeaturesResourceName = "RouteGuide.route_guide_db.json"; private const double CoordFactor = 1e7; /// /// Indicates whether the given feature exists (i.e. has a valid name). /// public static bool Exists(this Feature feature) { return feature != null && (feature.Name.Length != 0); } public static double GetLatitude(this Point point) { return point.Latitude / CoordFactor; } public static double GetLongitude(this Point point) { return point.Longitude / CoordFactor; } /// /// Calculate the distance between two points using the "haversine" formula. /// The formula is based on http://mathforum.org/library/drmath/view/51879.html /// /// the starting point /// the end point /// the distance between the points in meters public static double GetDistance(this Point start, Point end) { int r = 6371000; // earth radius in metres double lat1 = ToRadians(start.GetLatitude()); double lat2 = ToRadians(end.GetLatitude()); double lon1 = ToRadians(start.GetLongitude()); double lon2 = ToRadians(end.GetLongitude()); double deltalat = lat2 - lat1; double deltalon = lon2 - lon1; double a = Math.Sin(deltalat / 2) * Math.Sin(deltalat / 2) + Math.Cos(lat1) * Math.Cos(lat2) * Math.Sin(deltalon / 2) * Math.Sin(deltalon / 2); double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a)); return r * c; } /// /// Returns true if rectangular area contains given point. /// public static bool Contains(this Rectangle rectangle, Point point) { int left = Math.Min(rectangle.Lo.Longitude, rectangle.Hi.Longitude); int right = Math.Max(rectangle.Lo.Longitude, rectangle.Hi.Longitude); int top = Math.Max(rectangle.Lo.Latitude, rectangle.Hi.Latitude); int bottom = Math.Min(rectangle.Lo.Latitude, rectangle.Hi.Latitude); return (point.Longitude >= left && point.Longitude <= right && point.Latitude >= bottom && point.Latitude <= top); } private static double ToRadians(double val) { return (Math.PI / 180) * val; } /// /// Parses features from an embedded resource. /// public static List LoadFeatures() { var features = new List(); var jsonFeatures = JsonConvert.DeserializeObject>(ReadFeaturesFromResource()); foreach(var jsonFeature in jsonFeatures) { features.Add(new Feature { Name = jsonFeature.name, Location = new Point { Longitude = jsonFeature.location.longitude, Latitude = jsonFeature.location.latitude} }); } return features; } private static string ReadFeaturesFromResource() { var stream = typeof(RouteGuideUtil).GetTypeInfo().Assembly.GetManifestResourceStream(DefaultFeaturesResourceName); if (stream == null) { throw new IOException(string.Format("Error loading the embedded resource \"{0}\"", DefaultFeaturesResourceName)); } using (var streamReader = new StreamReader(stream)) { return streamReader.ReadToEnd(); } } #pragma warning disable 0649 // Suppresses "Field 'x' is never assigned to". private class JsonFeature { public string name; public JsonLocation location; } private class JsonLocation { public int longitude; public int latitude; } #pragma warning restore 0649 } } grpc-1.30.2/examples/csharp/RouteGuide/RouteGuide/route_guide_db.json000066400000000000000000000327071370425124100256410ustar00rootroot00000000000000[{ "location": { "latitude": 407838351, "longitude": -746143763 }, "name": "Patriots Path, Mendham, NJ 07945, USA" }, { "location": { "latitude": 408122808, "longitude": -743999179 }, "name": "101 New Jersey 10, Whippany, NJ 07981, USA" }, { "location": { "latitude": 413628156, "longitude": -749015468 }, "name": "U.S. 6, Shohola, PA 18458, USA" }, { "location": { "latitude": 419999544, "longitude": -740371136 }, "name": "5 Conners Road, Kingston, NY 12401, USA" }, { "location": { "latitude": 414008389, "longitude": -743951297 }, "name": "Mid Hudson Psychiatric Center, New Hampton, NY 10958, USA" }, { "location": { "latitude": 419611318, "longitude": -746524769 }, "name": "287 Flugertown Road, Livingston Manor, NY 12758, USA" }, { "location": { "latitude": 406109563, "longitude": -742186778 }, "name": "4001 Tremley Point Road, Linden, NJ 07036, USA" }, { "location": { "latitude": 416802456, "longitude": -742370183 }, "name": "352 South Mountain Road, Wallkill, NY 12589, USA" }, { "location": { "latitude": 412950425, "longitude": -741077389 }, "name": "Bailey Turn Road, Harriman, NY 10926, USA" }, { "location": { "latitude": 412144655, "longitude": -743949739 }, "name": "193-199 Wawayanda Road, Hewitt, NJ 07421, USA" }, { "location": { "latitude": 415736605, "longitude": -742847522 }, "name": "406-496 Ward Avenue, Pine Bush, NY 12566, USA" }, { "location": { "latitude": 413843930, "longitude": -740501726 }, "name": "162 Merrill Road, Highland Mills, NY 10930, USA" }, { "location": { "latitude": 410873075, "longitude": -744459023 }, "name": "Clinton Road, West Milford, NJ 07480, USA" }, { "location": { "latitude": 412346009, "longitude": -744026814 }, "name": "16 Old Brook Lane, Warwick, NY 10990, USA" }, { "location": { "latitude": 402948455, "longitude": -747903913 }, "name": "3 Drake Lane, Pennington, NJ 08534, USA" }, { "location": { "latitude": 406337092, "longitude": -740122226 }, "name": "6324 8th Avenue, Brooklyn, NY 11220, USA" }, { "location": { "latitude": 406421967, "longitude": -747727624 }, "name": "1 Merck Access Road, Whitehouse Station, NJ 08889, USA" }, { "location": { "latitude": 416318082, "longitude": -749677716 }, "name": "78-98 Schalck Road, Narrowsburg, NY 12764, USA" }, { "location": { "latitude": 415301720, "longitude": -748416257 }, "name": "282 Lakeview Drive Road, Highland Lake, NY 12743, USA" }, { "location": { "latitude": 402647019, "longitude": -747071791 }, "name": "330 Evelyn Avenue, Hamilton Township, NJ 08619, USA" }, { "location": { "latitude": 412567807, "longitude": -741058078 }, "name": "New York State Reference Route 987E, Southfields, NY 10975, USA" }, { "location": { "latitude": 416855156, "longitude": -744420597 }, "name": "103-271 Tempaloni Road, Ellenville, NY 12428, USA" }, { "location": { "latitude": 404663628, "longitude": -744820157 }, "name": "1300 Airport Road, North Brunswick Township, NJ 08902, USA" }, { "location": { "latitude": 407113723, "longitude": -749746483 }, "name": "" }, { "location": { "latitude": 402133926, "longitude": -743613249 }, "name": "" }, { "location": { "latitude": 400273442, "longitude": -741220915 }, "name": "" }, { "location": { "latitude": 411236786, "longitude": -744070769 }, "name": "" }, { "location": { "latitude": 411633782, "longitude": -746784970 }, "name": "211-225 Plains Road, Augusta, NJ 07822, USA" }, { "location": { "latitude": 415830701, "longitude": -742952812 }, "name": "" }, { "location": { "latitude": 413447164, "longitude": -748712898 }, "name": "165 Pedersen Ridge Road, Milford, PA 18337, USA" }, { "location": { "latitude": 405047245, "longitude": -749800722 }, "name": "100-122 Locktown Road, Frenchtown, NJ 08825, USA" }, { "location": { "latitude": 418858923, "longitude": -746156790 }, "name": "" }, { "location": { "latitude": 417951888, "longitude": -748484944 }, "name": "650-652 Willi Hill Road, Swan Lake, NY 12783, USA" }, { "location": { "latitude": 407033786, "longitude": -743977337 }, "name": "26 East 3rd Street, New Providence, NJ 07974, USA" }, { "location": { "latitude": 417548014, "longitude": -740075041 }, "name": "" }, { "location": { "latitude": 410395868, "longitude": -744972325 }, "name": "" }, { "location": { "latitude": 404615353, "longitude": -745129803 }, "name": "" }, { "location": { "latitude": 406589790, "longitude": -743560121 }, "name": "611 Lawrence Avenue, Westfield, NJ 07090, USA" }, { "location": { "latitude": 414653148, "longitude": -740477477 }, "name": "18 Lannis Avenue, New Windsor, NY 12553, USA" }, { "location": { "latitude": 405957808, "longitude": -743255336 }, "name": "82-104 Amherst Avenue, Colonia, NJ 07067, USA" }, { "location": { "latitude": 411733589, "longitude": -741648093 }, "name": "170 Seven Lakes Drive, Sloatsburg, NY 10974, USA" }, { "location": { "latitude": 412676291, "longitude": -742606606 }, "name": "1270 Lakes Road, Monroe, NY 10950, USA" }, { "location": { "latitude": 409224445, "longitude": -748286738 }, "name": "509-535 Alphano Road, Great Meadows, NJ 07838, USA" }, { "location": { "latitude": 406523420, "longitude": -742135517 }, "name": "652 Garden Street, Elizabeth, NJ 07202, USA" }, { "location": { "latitude": 401827388, "longitude": -740294537 }, "name": "349 Sea Spray Court, Neptune City, NJ 07753, USA" }, { "location": { "latitude": 410564152, "longitude": -743685054 }, "name": "13-17 Stanley Street, West Milford, NJ 07480, USA" }, { "location": { "latitude": 408472324, "longitude": -740726046 }, "name": "47 Industrial Avenue, Teterboro, NJ 07608, USA" }, { "location": { "latitude": 412452168, "longitude": -740214052 }, "name": "5 White Oak Lane, Stony Point, NY 10980, USA" }, { "location": { "latitude": 409146138, "longitude": -746188906 }, "name": "Berkshire Valley Management Area Trail, Jefferson, NJ, USA" }, { "location": { "latitude": 404701380, "longitude": -744781745 }, "name": "1007 Jersey Avenue, New Brunswick, NJ 08901, USA" }, { "location": { "latitude": 409642566, "longitude": -746017679 }, "name": "6 East Emerald Isle Drive, Lake Hopatcong, NJ 07849, USA" }, { "location": { "latitude": 408031728, "longitude": -748645385 }, "name": "1358-1474 New Jersey 57, Port Murray, NJ 07865, USA" }, { "location": { "latitude": 413700272, "longitude": -742135189 }, "name": "367 Prospect Road, Chester, NY 10918, USA" }, { "location": { "latitude": 404310607, "longitude": -740282632 }, "name": "10 Simon Lake Drive, Atlantic Highlands, NJ 07716, USA" }, { "location": { "latitude": 409319800, "longitude": -746201391 }, "name": "11 Ward Street, Mount Arlington, NJ 07856, USA" }, { "location": { "latitude": 406685311, "longitude": -742108603 }, "name": "300-398 Jefferson Avenue, Elizabeth, NJ 07201, USA" }, { "location": { "latitude": 419018117, "longitude": -749142781 }, "name": "43 Dreher Road, Roscoe, NY 12776, USA" }, { "location": { "latitude": 412856162, "longitude": -745148837 }, "name": "Swan Street, Pine Island, NY 10969, USA" }, { "location": { "latitude": 416560744, "longitude": -746721964 }, "name": "66 Pleasantview Avenue, Monticello, NY 12701, USA" }, { "location": { "latitude": 405314270, "longitude": -749836354 }, "name": "" }, { "location": { "latitude": 414219548, "longitude": -743327440 }, "name": "" }, { "location": { "latitude": 415534177, "longitude": -742900616 }, "name": "565 Winding Hills Road, Montgomery, NY 12549, USA" }, { "location": { "latitude": 406898530, "longitude": -749127080 }, "name": "231 Rocky Run Road, Glen Gardner, NJ 08826, USA" }, { "location": { "latitude": 407586880, "longitude": -741670168 }, "name": "100 Mount Pleasant Avenue, Newark, NJ 07104, USA" }, { "location": { "latitude": 400106455, "longitude": -742870190 }, "name": "517-521 Huntington Drive, Manchester Township, NJ 08759, USA" }, { "location": { "latitude": 400066188, "longitude": -746793294 }, "name": "" }, { "location": { "latitude": 418803880, "longitude": -744102673 }, "name": "40 Mountain Road, Napanoch, NY 12458, USA" }, { "location": { "latitude": 414204288, "longitude": -747895140 }, "name": "" }, { "location": { "latitude": 414777405, "longitude": -740615601 }, "name": "" }, { "location": { "latitude": 415464475, "longitude": -747175374 }, "name": "48 North Road, Forestburgh, NY 12777, USA" }, { "location": { "latitude": 404062378, "longitude": -746376177 }, "name": "" }, { "location": { "latitude": 405688272, "longitude": -749285130 }, "name": "" }, { "location": { "latitude": 400342070, "longitude": -748788996 }, "name": "" }, { "location": { "latitude": 401809022, "longitude": -744157964 }, "name": "" }, { "location": { "latitude": 404226644, "longitude": -740517141 }, "name": "9 Thompson Avenue, Leonardo, NJ 07737, USA" }, { "location": { "latitude": 410322033, "longitude": -747871659 }, "name": "" }, { "location": { "latitude": 407100674, "longitude": -747742727 }, "name": "" }, { "location": { "latitude": 418811433, "longitude": -741718005 }, "name": "213 Bush Road, Stone Ridge, NY 12484, USA" }, { "location": { "latitude": 415034302, "longitude": -743850945 }, "name": "" }, { "location": { "latitude": 411349992, "longitude": -743694161 }, "name": "" }, { "location": { "latitude": 404839914, "longitude": -744759616 }, "name": "1-17 Bergen Court, New Brunswick, NJ 08901, USA" }, { "location": { "latitude": 414638017, "longitude": -745957854 }, "name": "35 Oakland Valley Road, Cuddebackville, NY 12729, USA" }, { "location": { "latitude": 412127800, "longitude": -740173578 }, "name": "" }, { "location": { "latitude": 401263460, "longitude": -747964303 }, "name": "" }, { "location": { "latitude": 412843391, "longitude": -749086026 }, "name": "" }, { "location": { "latitude": 418512773, "longitude": -743067823 }, "name": "" }, { "location": { "latitude": 404318328, "longitude": -740835638 }, "name": "42-102 Main Street, Belford, NJ 07718, USA" }, { "location": { "latitude": 419020746, "longitude": -741172328 }, "name": "" }, { "location": { "latitude": 404080723, "longitude": -746119569 }, "name": "" }, { "location": { "latitude": 401012643, "longitude": -744035134 }, "name": "" }, { "location": { "latitude": 404306372, "longitude": -741079661 }, "name": "" }, { "location": { "latitude": 403966326, "longitude": -748519297 }, "name": "" }, { "location": { "latitude": 405002031, "longitude": -748407866 }, "name": "" }, { "location": { "latitude": 409532885, "longitude": -742200683 }, "name": "" }, { "location": { "latitude": 416851321, "longitude": -742674555 }, "name": "" }, { "location": { "latitude": 406411633, "longitude": -741722051 }, "name": "3387 Richmond Terrace, Staten Island, NY 10303, USA" }, { "location": { "latitude": 413069058, "longitude": -744597778 }, "name": "261 Van Sickle Road, Goshen, NY 10924, USA" }, { "location": { "latitude": 418465462, "longitude": -746859398 }, "name": "" }, { "location": { "latitude": 411733222, "longitude": -744228360 }, "name": "" }, { "location": { "latitude": 410248224, "longitude": -747127767 }, "name": "3 Hasta Way, Newton, NJ 07860, USA" }]grpc-1.30.2/examples/csharp/RouteGuide/RouteGuideClient/000077500000000000000000000000001370425124100231145ustar00rootroot00000000000000grpc-1.30.2/examples/csharp/RouteGuide/RouteGuideClient/Program.cs000066400000000000000000000220071370425124100250530ustar00rootroot00000000000000// Copyright 2015 gRPC 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 // // 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. using Grpc.Core; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Routeguide { class Program { /// /// Sample client code that makes gRPC calls to the server. /// public class RouteGuideClient { readonly RouteGuide.RouteGuideClient client; public RouteGuideClient(RouteGuide.RouteGuideClient client) { this.client = client; } /// /// Blocking unary call example. Calls GetFeature and prints the response. /// public void GetFeature(int lat, int lon) { try { Log("*** GetFeature: lat={0} lon={1}", lat, lon); Point request = new Point { Latitude = lat, Longitude = lon }; Feature feature = client.GetFeature(request); if (feature.Exists()) { Log("Found feature called \"{0}\" at {1}, {2}", feature.Name, feature.Location.GetLatitude(), feature.Location.GetLongitude()); } else { Log("Found no feature at {0}, {1}", feature.Location.GetLatitude(), feature.Location.GetLongitude()); } } catch (RpcException e) { Log("RPC failed " + e); throw; } } /// /// Server-streaming example. Calls listFeatures with a rectangle of interest. Prints each response feature as it arrives. /// public async Task ListFeatures(int lowLat, int lowLon, int hiLat, int hiLon) { try { Log("*** ListFeatures: lowLat={0} lowLon={1} hiLat={2} hiLon={3}", lowLat, lowLon, hiLat, hiLon); Rectangle request = new Rectangle { Lo = new Point { Latitude = lowLat, Longitude = lowLon }, Hi = new Point { Latitude = hiLat, Longitude = hiLon } }; using (var call = client.ListFeatures(request)) { var responseStream = call.ResponseStream; StringBuilder responseLog = new StringBuilder("Result: "); while (await responseStream.MoveNext()) { Feature feature = responseStream.Current; responseLog.Append(feature.ToString()); } Log(responseLog.ToString()); } } catch (RpcException e) { Log("RPC failed " + e); throw; } } /// /// Client-streaming example. Sends numPoints randomly chosen points from features /// with a variable delay in between. Prints the statistics when they are sent from the server. /// public async Task RecordRoute(List features, int numPoints) { try { Log("*** RecordRoute"); using (var call = client.RecordRoute()) { // Send numPoints points randomly selected from the features list. StringBuilder numMsg = new StringBuilder(); Random rand = new Random(); for (int i = 0; i < numPoints; ++i) { int index = rand.Next(features.Count); Point point = features[index].Location; Log("Visiting point {0}, {1}", point.GetLatitude(), point.GetLongitude()); await call.RequestStream.WriteAsync(point); // A bit of delay before sending the next one. await Task.Delay(rand.Next(1000) + 500); } await call.RequestStream.CompleteAsync(); RouteSummary summary = await call.ResponseAsync; Log("Finished trip with {0} points. Passed {1} features. " + "Travelled {2} meters. It took {3} seconds.", summary.PointCount, summary.FeatureCount, summary.Distance, summary.ElapsedTime); Log("Finished RecordRoute"); } } catch (RpcException e) { Log("RPC failed", e); throw; } } /// /// Bi-directional streaming example. Send some chat messages, and print any /// chat messages that are sent from the server. /// public async Task RouteChat() { try { Log("*** RouteChat"); var requests = new List { NewNote("First message", 0, 0), NewNote("Second message", 0, 1), NewNote("Third message", 1, 0), NewNote("Fourth message", 0, 0) }; using (var call = client.RouteChat()) { var responseReaderTask = Task.Run(async () => { while (await call.ResponseStream.MoveNext()) { var note = call.ResponseStream.Current; Log("Got message \"{0}\" at {1}, {2}", note.Message, note.Location.Latitude, note.Location.Longitude); } }); foreach (RouteNote request in requests) { Log("Sending message \"{0}\" at {1}, {2}", request.Message, request.Location.Latitude, request.Location.Longitude); await call.RequestStream.WriteAsync(request); } await call.RequestStream.CompleteAsync(); await responseReaderTask; Log("Finished RouteChat"); } } catch (RpcException e) { Log("RPC failed", e); throw; } } private void Log(string s, params object[] args) { Console.WriteLine(string.Format(s, args)); } private void Log(string s) { Console.WriteLine(s); } private RouteNote NewNote(string message, int lat, int lon) { return new RouteNote { Message = message, Location = new Point { Latitude = lat, Longitude = lon } }; } } static void Main(string[] args) { var channel = new Channel("127.0.0.1:50052", ChannelCredentials.Insecure); var client = new RouteGuideClient(new RouteGuide.RouteGuideClient(channel)); // Looking for a valid feature client.GetFeature(409146138, -746188906); // Feature missing. client.GetFeature(0, 0); // Looking for features between 40, -75 and 42, -73. client.ListFeatures(400000000, -750000000, 420000000, -730000000).Wait(); // Record a few randomly selected points from the features file. client.RecordRoute(RouteGuideUtil.LoadFeatures(), 10).Wait(); // Send and receive some notes. client.RouteChat().Wait(); channel.ShutdownAsync().Wait(); Console.WriteLine("Press any key to exit..."); Console.ReadKey(); } } } grpc-1.30.2/examples/csharp/RouteGuide/RouteGuideClient/RouteGuideClient.csproj000066400000000000000000000004131370425124100275470ustar00rootroot00000000000000 netcoreapp2.1 Exe grpc-1.30.2/examples/csharp/RouteGuide/RouteGuideServer/000077500000000000000000000000001370425124100231445ustar00rootroot00000000000000grpc-1.30.2/examples/csharp/RouteGuide/RouteGuideServer/Program.cs000066400000000000000000000026271370425124100251110ustar00rootroot00000000000000// Copyright 2015 gRPC 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 // // 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. using Grpc.Core; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Routeguide { class Program { static void Main(string[] args) { const int Port = 50052; var features = RouteGuideUtil.LoadFeatures(); Server server = new Server { Services = { RouteGuide.BindService(new RouteGuideImpl(features)) }, Ports = { new ServerPort("localhost", Port, ServerCredentials.Insecure) } }; server.Start(); Console.WriteLine("RouteGuide server listening on port " + Port); Console.WriteLine("Press any key to stop the server..."); Console.ReadKey(); server.ShutdownAsync().Wait(); } } } grpc-1.30.2/examples/csharp/RouteGuide/RouteGuideServer/RouteGuideImpl.cs000066400000000000000000000131021370425124100263660ustar00rootroot00000000000000// Copyright 2015 gRPC 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 // // 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. using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using Grpc.Core; using Grpc.Core.Utils; namespace Routeguide { /// /// Example implementation of RouteGuide server. /// public class RouteGuideImpl : RouteGuide.RouteGuideBase { readonly List features; readonly object myLock = new object(); readonly Dictionary> routeNotes = new Dictionary>(); public RouteGuideImpl(List features) { this.features = features; } /// /// Gets the feature at the requested point. If no feature at that location /// exists, an unnammed feature is returned at the provided location. /// public override Task GetFeature(Point request, ServerCallContext context) { return Task.FromResult(CheckFeature(request)); } /// /// Gets all features contained within the given bounding rectangle. /// public override async Task ListFeatures(Rectangle request, IServerStreamWriter responseStream, ServerCallContext context) { var responses = features.FindAll( (feature) => feature.Exists() && request.Contains(feature.Location) ); foreach (var response in responses) { await responseStream.WriteAsync(response); } } /// /// Gets a stream of points, and responds with statistics about the "trip": number of points, /// number of known features visited, total distance traveled, and total time spent. /// public override async Task RecordRoute(IAsyncStreamReader requestStream, ServerCallContext context) { int pointCount = 0; int featureCount = 0; int distance = 0; Point previous = null; var stopwatch = new Stopwatch(); stopwatch.Start(); while (await requestStream.MoveNext()) { var point = requestStream.Current; pointCount++; if (CheckFeature(point).Exists()) { featureCount++; } if (previous != null) { distance += (int) previous.GetDistance(point); } previous = point; } stopwatch.Stop(); return new RouteSummary { PointCount = pointCount, FeatureCount = featureCount, Distance = distance, ElapsedTime = (int)(stopwatch.ElapsedMilliseconds / 1000) }; } /// /// Receives a stream of message/location pairs, and responds with a stream of all previous /// messages at each of those locations. /// public override async Task RouteChat(IAsyncStreamReader requestStream, IServerStreamWriter responseStream, ServerCallContext context) { while (await requestStream.MoveNext()) { var note = requestStream.Current; List prevNotes = AddNoteForLocation(note.Location, note); foreach (var prevNote in prevNotes) { await responseStream.WriteAsync(prevNote); } } } /// /// Adds a note for location and returns a list of pre-existing notes for that location (not containing the newly added note). /// private List AddNoteForLocation(Point location, RouteNote note) { lock (myLock) { List notes; if (!routeNotes.TryGetValue(location, out notes)) { notes = new List(); routeNotes.Add(location, notes); } var preexistingNotes = new List(notes); notes.Add(note); return preexistingNotes; } } /// /// Gets the feature at the given point. /// /// the location to check /// The feature object at the point Note that an empty name indicates no feature. private Feature CheckFeature(Point location) { var result = features.FirstOrDefault((feature) => feature.Location.Equals(location)); if (result == null) { // No feature was found, return an unnamed feature. return new Feature { Name = "", Location = location }; } return result; } } } grpc-1.30.2/examples/csharp/RouteGuide/RouteGuideServer/RouteGuideServer.csproj000066400000000000000000000004131370425124100276270ustar00rootroot00000000000000 netcoreapp2.1 Exe grpc-1.30.2/examples/csharp/Xds/000077500000000000000000000000001370425124100163635ustar00rootroot00000000000000grpc-1.30.2/examples/csharp/Xds/Greeter.sln000066400000000000000000000036211370425124100205000ustar00rootroot00000000000000 Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 VisualStudioVersion = 15.0.26228.4 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greeter", "Greeter\Greeter.csproj", "{13B6DFC8-F5F6-4CC2-99DF-57A7CF042033}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GreeterClient", "GreeterClient\GreeterClient.csproj", "{B754FB02-D501-4308-8B89-33AB7119C80D}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GreeterServer", "GreeterServer\GreeterServer.csproj", "{DDBFF994-E076-43AD-B18D-049DFC1B670C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {13B6DFC8-F5F6-4CC2-99DF-57A7CF042033}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {13B6DFC8-F5F6-4CC2-99DF-57A7CF042033}.Debug|Any CPU.Build.0 = Debug|Any CPU {13B6DFC8-F5F6-4CC2-99DF-57A7CF042033}.Release|Any CPU.ActiveCfg = Release|Any CPU {13B6DFC8-F5F6-4CC2-99DF-57A7CF042033}.Release|Any CPU.Build.0 = Release|Any CPU {B754FB02-D501-4308-8B89-33AB7119C80D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B754FB02-D501-4308-8B89-33AB7119C80D}.Debug|Any CPU.Build.0 = Debug|Any CPU {B754FB02-D501-4308-8B89-33AB7119C80D}.Release|Any CPU.ActiveCfg = Release|Any CPU {B754FB02-D501-4308-8B89-33AB7119C80D}.Release|Any CPU.Build.0 = Release|Any CPU {DDBFF994-E076-43AD-B18D-049DFC1B670C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DDBFF994-E076-43AD-B18D-049DFC1B670C}.Debug|Any CPU.Build.0 = Debug|Any CPU {DDBFF994-E076-43AD-B18D-049DFC1B670C}.Release|Any CPU.ActiveCfg = Release|Any CPU {DDBFF994-E076-43AD-B18D-049DFC1B670C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal grpc-1.30.2/examples/csharp/Xds/Greeter/000077500000000000000000000000001370425124100177605ustar00rootroot00000000000000grpc-1.30.2/examples/csharp/Xds/Greeter/Greeter.csproj000066400000000000000000000012741370425124100226030ustar00rootroot00000000000000 netstandard2.0 grpc-1.30.2/examples/csharp/Xds/GreeterClient/000077500000000000000000000000001370425124100211175ustar00rootroot00000000000000grpc-1.30.2/examples/csharp/Xds/GreeterClient/GreeterClient.csproj000066400000000000000000000004051370425124100250740ustar00rootroot00000000000000 netcoreapp2.1 Exe grpc-1.30.2/examples/csharp/Xds/GreeterClient/Program.cs000066400000000000000000000031721370425124100230600ustar00rootroot00000000000000// Copyright 2015 gRPC 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 // // 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. using System; using Grpc.Core; using Helloworld; using CommandLine; namespace GreeterClient { class Program { private class Options { [Option("server", Default = "localhost:50051", HelpText = "The address of the server")] public string Server { get; set; } } public static void Main(string[] args) { Parser.Default.ParseArguments(args) .WithParsed(options => RunClient(options)); } private static void RunClient(Options options) { Channel channel = new Channel(options.Server, ChannelCredentials.Insecure); var client = new Greeter.GreeterClient(channel); String user = "you"; var reply = client.SayHello(new HelloRequest { Name = user }); Console.WriteLine("Greeter client received: " + reply.Message); channel.ShutdownAsync().Wait(); Console.WriteLine("Press any key to exit..."); Console.ReadKey(); } } } grpc-1.30.2/examples/csharp/Xds/GreeterServer/000077500000000000000000000000001370425124100211475ustar00rootroot00000000000000grpc-1.30.2/examples/csharp/Xds/GreeterServer/GreeterServer.csproj000066400000000000000000000004051370425124100251540ustar00rootroot00000000000000 netcoreapp2.1 Exe grpc-1.30.2/examples/csharp/Xds/GreeterServer/Program.cs000066400000000000000000000064571370425124100231210ustar00rootroot00000000000000// Copyright 2020 The gRPC 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 // // 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. using System; using System.Net; using System.Threading.Tasks; using Grpc.Core; using Grpc.HealthCheck; using Helloworld; using Grpc.Health; using Grpc.Health.V1; using Grpc.Reflection; using Grpc.Reflection.V1Alpha; using CommandLine; namespace GreeterServer { class GreeterImpl : Greeter.GreeterBase { private string hostname; public GreeterImpl(string hostname) { this.hostname = hostname; } // Server side handler of the SayHello RPC public override Task SayHello(HelloRequest request, ServerCallContext context) { return Task.FromResult(new HelloReply { Message = $"Hello {request.Name} from {hostname}!"}); } } class Program { class Options { [Option("port", Default = 50051, HelpText = "The port to listen on.")] public int Port { get; set; } [Option("hostname", Required = false, HelpText = "The name clients will see in responses. If not specified, machine's hostname will obtain automatically.")] public string Hostname { get; set; } } public static void Main(string[] args) { Parser.Default.ParseArguments(args) .WithParsed(options => RunServer(options)); } private static void RunServer(Options options) { var hostName = options.Hostname ?? Dns.GetHostName(); var serviceDescriptors = new [] {Greeter.Descriptor, Health.Descriptor, ServerReflection.Descriptor}; var greeterImpl = new GreeterImpl(hostName); var healthServiceImpl = new HealthServiceImpl(); var reflectionImpl = new ReflectionServiceImpl(serviceDescriptors); Server server = new Server { Services = { Greeter.BindService(greeterImpl), Health.BindService(healthServiceImpl), ServerReflection.BindService(reflectionImpl) }, Ports = { new ServerPort("[::]", options.Port, ServerCredentials.Insecure) } }; server.Start(); // Mark all services as healthy. foreach (var serviceDescriptor in serviceDescriptors) { healthServiceImpl.SetStatus(serviceDescriptor.FullName, HealthCheckResponse.Types.ServingStatus.Serving); } // Mark overall server status as healthy. healthServiceImpl.SetStatus("", HealthCheckResponse.Types.ServingStatus.Serving); Console.WriteLine("Greeter server listening on port " + options.Port); Console.WriteLine("Press any key to stop the server..."); Console.ReadKey(); server.ShutdownAsync().Wait(); } } } grpc-1.30.2/examples/csharp/Xds/README.md000066400000000000000000000045331370425124100176470ustar00rootroot00000000000000gRPC Hostname example (C#) ======================== BACKGROUND ------------- This is a version of the helloworld example with a server whose response includes its hostname. It also supports health and reflection services. This makes it a good server to test infrastructure, such as XDS load balancing. PREREQUISITES ------------- - The [.NET Core SDK 2.1+](https://www.microsoft.com/net/core) You can also build the solution `Greeter.sln` using Visual Studio 2019, but it's not a requirement. RUN THE EXAMPLE ------------- First, build and run the server, then verify the server is running and check the server is behaving as expected (more on that below). ``` cd GreeterServer dotnet run ``` After configuring your xDS server to track the gRPC server we just started, create a bootstrap file as desribed in [gRFC A27](https://github.com/grpc/proposal/blob/master/A27-xds-global-load-balancing.md): ``` { xds_servers": [ { "server_uri": , "channel_creds": [ { "type": , "config": } ] } ], "node": } ``` Then point the `GRPC_XDS_BOOTSTRAP` environment variable at the bootstrap file: ``` export GRPC_XDS_BOOTSTRAP=/etc/xds-bootstrap.json ``` Finally, run your client: ``` cd GreeterClient dotnet run --server xds-experimental:///my-backend ``` VERIFYING THE SERVER ------------- `grpcurl` can be used to test your server. If you don't have it, install [`grpcurl`](https://github.com/fullstorydev/grpcurl/releases). This will allow you to manually test the service. Exercise your server's application-layer service: ```sh > grpcurl --plaintext -d '{"name": "you"}' localhost:50051 { "message": "Hello you from jtatt.muc.corp.google.com!" } ``` Make sure that all of your server's services are available via reflection: ```sh > grpcurl --plaintext localhost:50051 list grpc.health.v1.Health grpc.reflection.v1alpha.ServerReflection helloworld.Greeter ``` Make sure that your services are reporting healthy: ```sh > grpcurl --plaintext -d '{"service": "helloworld.Greeter"}' localhost:50051 grpc.health.v1.Health/Check { "status": "SERVING" } > grpcurl --plaintext -d '{"service": ""}' localhost:50051 grpc.health.v1.Health/Check { "status": "SERVING" } ``` grpc-1.30.2/examples/node/000077500000000000000000000000001370425124100152725ustar00rootroot00000000000000grpc-1.30.2/examples/node/.gitignore000066400000000000000000000000351370425124100172600ustar00rootroot00000000000000*~ node_modules npm-debug.loggrpc-1.30.2/examples/node/README.md000066400000000000000000000024561370425124100165600ustar00rootroot00000000000000gRPC in 3 minutes (Node.js) =========================== PREREQUISITES ------------- - `node`: This requires Node 0.12.x or greater. INSTALL ------- ```sh $ # Get the gRPC repository $ export REPO_ROOT=grpc # REPO root can be any directory of your choice $ git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc $REPO_ROOT $ cd $REPO_ROOT $ cd examples/node $ npm install ``` TRY IT! ------- There are two ways to generate the code needed to work with protocol buffers in Node.js - one approach uses [Protobuf.js](https://github.com/dcodeIO/ProtoBuf.js/) to dynamically generate the code at runtime, the other uses code statically generated using the protocol buffer compiler `protoc`. The examples behave identically, and either server can be used with either client. - Run the server ```sh $ # from this directory $ node ./dynamic_codegen/greeter_server.js & $ # OR $ node ./static_codegen/greeter_server.js & ``` - Run the client ```sh $ # from this directory $ node ./dynamic_codegen/greeter_client.js $ # OR $ node ./static_codegen/greeter_client.js ``` TUTORIAL -------- You can find a more detailed tutorial in [gRPC Basics: Node.js][] [Install gRPC Node]:../../src/node [gRPC Basics: Node.js]:https://grpc.io/docs/tutorials/basic/node.html grpc-1.30.2/examples/node/dynamic_codegen/000077500000000000000000000000001370425124100204025ustar00rootroot00000000000000grpc-1.30.2/examples/node/dynamic_codegen/README.md000066400000000000000000000002041370425124100216550ustar00rootroot00000000000000This is the dynamic code generation variant of the Node examples. Code in these examples is generated at runtime using Protobuf.js. grpc-1.30.2/examples/node/dynamic_codegen/greeter_client.js000066400000000000000000000025371370425124100237420ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ var PROTO_PATH = __dirname + '/../../protos/helloworld.proto'; var grpc = require('grpc'); var protoLoader = require('@grpc/proto-loader'); var packageDefinition = protoLoader.loadSync( PROTO_PATH, {keepCase: true, longs: String, enums: String, defaults: true, oneofs: true }); var hello_proto = grpc.loadPackageDefinition(packageDefinition).helloworld; function main() { var client = new hello_proto.Greeter('localhost:50051', grpc.credentials.createInsecure()); var user; if (process.argv.length >= 3) { user = process.argv[2]; } else { user = 'world'; } client.sayHello({name: user}, function(err, response) { console.log('Greeting:', response.message); }); } main(); grpc-1.30.2/examples/node/dynamic_codegen/greeter_server.js000066400000000000000000000026771370425124100237770ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ var PROTO_PATH = __dirname + '/../../protos/helloworld.proto'; var grpc = require('grpc'); var protoLoader = require('@grpc/proto-loader'); var packageDefinition = protoLoader.loadSync( PROTO_PATH, {keepCase: true, longs: String, enums: String, defaults: true, oneofs: true }); var hello_proto = grpc.loadPackageDefinition(packageDefinition).helloworld; /** * Implements the SayHello RPC method. */ function sayHello(call, callback) { callback(null, {message: 'Hello ' + call.request.name}); } /** * Starts an RPC server that receives requests for the Greeter service at the * sample server port */ function main() { var server = new grpc.Server(); server.addService(hello_proto.Greeter.service, {sayHello: sayHello}); server.bind('0.0.0.0:50051', grpc.ServerCredentials.createInsecure()); server.start(); } main(); grpc-1.30.2/examples/node/dynamic_codegen/route_guide/000077500000000000000000000000001370425124100227155ustar00rootroot00000000000000grpc-1.30.2/examples/node/dynamic_codegen/route_guide/README.md000066400000000000000000000003451370425124100241760ustar00rootroot00000000000000# gRPC Basics: Node.js sample code The files in this folder are the samples used in [gRPC Basics: Node.js][], a detailed tutorial for using gRPC in Node.js. [gRPC Basics: Node.js]:https://grpc.io/docs/tutorials/basic/node.html grpc-1.30.2/examples/node/dynamic_codegen/route_guide/route_guide_client.js000066400000000000000000000150101370425124100271210ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ var PROTO_PATH = __dirname + '/../../../protos/route_guide.proto'; var async = require('async'); var fs = require('fs'); var parseArgs = require('minimist'); var path = require('path'); var _ = require('lodash'); var grpc = require('grpc'); var protoLoader = require('@grpc/proto-loader'); var packageDefinition = protoLoader.loadSync( PROTO_PATH, {keepCase: true, longs: String, enums: String, defaults: true, oneofs: true }); var routeguide = grpc.loadPackageDefinition(packageDefinition).routeguide; var client = new routeguide.RouteGuide('localhost:50051', grpc.credentials.createInsecure()); var COORD_FACTOR = 1e7; /** * Run the getFeature demo. Calls getFeature with a point known to have a * feature and a point known not to have a feature. * @param {function} callback Called when this demo is complete */ function runGetFeature(callback) { var next = _.after(2, callback); function featureCallback(error, feature) { if (error) { callback(error); return; } if (feature.name === '') { console.log('Found no feature at ' + feature.location.latitude/COORD_FACTOR + ', ' + feature.location.longitude/COORD_FACTOR); } else { console.log('Found feature called "' + feature.name + '" at ' + feature.location.latitude/COORD_FACTOR + ', ' + feature.location.longitude/COORD_FACTOR); } next(); } var point1 = { latitude: 409146138, longitude: -746188906 }; var point2 = { latitude: 0, longitude: 0 }; client.getFeature(point1, featureCallback); client.getFeature(point2, featureCallback); } /** * Run the listFeatures demo. Calls listFeatures with a rectangle containing all * of the features in the pre-generated database. Prints each response as it * comes in. * @param {function} callback Called when this demo is complete */ function runListFeatures(callback) { var rectangle = { lo: { latitude: 400000000, longitude: -750000000 }, hi: { latitude: 420000000, longitude: -730000000 } }; console.log('Looking for features between 40, -75 and 42, -73'); var call = client.listFeatures(rectangle); call.on('data', function(feature) { console.log('Found feature called "' + feature.name + '" at ' + feature.location.latitude/COORD_FACTOR + ', ' + feature.location.longitude/COORD_FACTOR); }); call.on('end', callback); } /** * Run the recordRoute demo. Sends several randomly chosen points from the * pre-generated feature database with a variable delay in between. Prints the * statistics when they are sent from the server. * @param {function} callback Called when this demo is complete */ function runRecordRoute(callback) { var argv = parseArgs(process.argv, { string: 'db_path' }); fs.readFile(path.resolve(argv.db_path), function(err, data) { if (err) { callback(err); return; } var feature_list = JSON.parse(data); var num_points = 10; var call = client.recordRoute(function(error, stats) { if (error) { callback(error); return; } console.log('Finished trip with', stats.point_count, 'points'); console.log('Passed', stats.feature_count, 'features'); console.log('Travelled', stats.distance, 'meters'); console.log('It took', stats.elapsed_time, 'seconds'); callback(); }); /** * Constructs a function that asynchronously sends the given point and then * delays sending its callback * @param {number} lat The latitude to send * @param {number} lng The longitude to send * @return {function(function)} The function that sends the point */ function pointSender(lat, lng) { /** * Sends the point, then calls the callback after a delay * @param {function} callback Called when complete */ return function(callback) { console.log('Visiting point ' + lat/COORD_FACTOR + ', ' + lng/COORD_FACTOR); call.write({ latitude: lat, longitude: lng }); _.delay(callback, _.random(500, 1500)); }; } var point_senders = []; for (var i = 0; i < num_points; i++) { var rand_point = feature_list[_.random(0, feature_list.length - 1)]; point_senders[i] = pointSender(rand_point.location.latitude, rand_point.location.longitude); } async.series(point_senders, function() { call.end(); }); }); } /** * Run the routeChat demo. Send some chat messages, and print any chat messages * that are sent from the server. * @param {function} callback Called when the demo is complete */ function runRouteChat(callback) { var call = client.routeChat(); call.on('data', function(note) { console.log('Got message "' + note.message + '" at ' + note.location.latitude + ', ' + note.location.longitude); }); call.on('end', callback); var notes = [{ location: { latitude: 0, longitude: 0 }, message: 'First message' }, { location: { latitude: 0, longitude: 1 }, message: 'Second message' }, { location: { latitude: 1, longitude: 0 }, message: 'Third message' }, { location: { latitude: 0, longitude: 0 }, message: 'Fourth message' }]; for (var i = 0; i < notes.length; i++) { var note = notes[i]; console.log('Sending message "' + note.message + '" at ' + note.location.latitude + ', ' + note.location.longitude); call.write(note); } call.end(); } /** * Run all of the demos in order */ function main() { async.series([ runGetFeature, runListFeatures, runRecordRoute, runRouteChat ]); } if (require.main === module) { main(); } exports.runGetFeature = runGetFeature; exports.runListFeatures = runListFeatures; exports.runRecordRoute = runRecordRoute; exports.runRouteChat = runRouteChat; grpc-1.30.2/examples/node/dynamic_codegen/route_guide/route_guide_db.json000066400000000000000000000327101370425124100265730ustar00rootroot00000000000000[{ "location": { "latitude": 407838351, "longitude": -746143763 }, "name": "Patriots Path, Mendham, NJ 07945, USA" }, { "location": { "latitude": 408122808, "longitude": -743999179 }, "name": "101 New Jersey 10, Whippany, NJ 07981, USA" }, { "location": { "latitude": 413628156, "longitude": -749015468 }, "name": "U.S. 6, Shohola, PA 18458, USA" }, { "location": { "latitude": 419999544, "longitude": -740371136 }, "name": "5 Conners Road, Kingston, NY 12401, USA" }, { "location": { "latitude": 414008389, "longitude": -743951297 }, "name": "Mid Hudson Psychiatric Center, New Hampton, NY 10958, USA" }, { "location": { "latitude": 419611318, "longitude": -746524769 }, "name": "287 Flugertown Road, Livingston Manor, NY 12758, USA" }, { "location": { "latitude": 406109563, "longitude": -742186778 }, "name": "4001 Tremley Point Road, Linden, NJ 07036, USA" }, { "location": { "latitude": 416802456, "longitude": -742370183 }, "name": "352 South Mountain Road, Wallkill, NY 12589, USA" }, { "location": { "latitude": 412950425, "longitude": -741077389 }, "name": "Bailey Turn Road, Harriman, NY 10926, USA" }, { "location": { "latitude": 412144655, "longitude": -743949739 }, "name": "193-199 Wawayanda Road, Hewitt, NJ 07421, USA" }, { "location": { "latitude": 415736605, "longitude": -742847522 }, "name": "406-496 Ward Avenue, Pine Bush, NY 12566, USA" }, { "location": { "latitude": 413843930, "longitude": -740501726 }, "name": "162 Merrill Road, Highland Mills, NY 10930, USA" }, { "location": { "latitude": 410873075, "longitude": -744459023 }, "name": "Clinton Road, West Milford, NJ 07480, USA" }, { "location": { "latitude": 412346009, "longitude": -744026814 }, "name": "16 Old Brook Lane, Warwick, NY 10990, USA" }, { "location": { "latitude": 402948455, "longitude": -747903913 }, "name": "3 Drake Lane, Pennington, NJ 08534, USA" }, { "location": { "latitude": 406337092, "longitude": -740122226 }, "name": "6324 8th Avenue, Brooklyn, NY 11220, USA" }, { "location": { "latitude": 406421967, "longitude": -747727624 }, "name": "1 Merck Access Road, Whitehouse Station, NJ 08889, USA" }, { "location": { "latitude": 416318082, "longitude": -749677716 }, "name": "78-98 Schalck Road, Narrowsburg, NY 12764, USA" }, { "location": { "latitude": 415301720, "longitude": -748416257 }, "name": "282 Lakeview Drive Road, Highland Lake, NY 12743, USA" }, { "location": { "latitude": 402647019, "longitude": -747071791 }, "name": "330 Evelyn Avenue, Hamilton Township, NJ 08619, USA" }, { "location": { "latitude": 412567807, "longitude": -741058078 }, "name": "New York State Reference Route 987E, Southfields, NY 10975, USA" }, { "location": { "latitude": 416855156, "longitude": -744420597 }, "name": "103-271 Tempaloni Road, Ellenville, NY 12428, USA" }, { "location": { "latitude": 404663628, "longitude": -744820157 }, "name": "1300 Airport Road, North Brunswick Township, NJ 08902, USA" }, { "location": { "latitude": 407113723, "longitude": -749746483 }, "name": "" }, { "location": { "latitude": 402133926, "longitude": -743613249 }, "name": "" }, { "location": { "latitude": 400273442, "longitude": -741220915 }, "name": "" }, { "location": { "latitude": 411236786, "longitude": -744070769 }, "name": "" }, { "location": { "latitude": 411633782, "longitude": -746784970 }, "name": "211-225 Plains Road, Augusta, NJ 07822, USA" }, { "location": { "latitude": 415830701, "longitude": -742952812 }, "name": "" }, { "location": { "latitude": 413447164, "longitude": -748712898 }, "name": "165 Pedersen Ridge Road, Milford, PA 18337, USA" }, { "location": { "latitude": 405047245, "longitude": -749800722 }, "name": "100-122 Locktown Road, Frenchtown, NJ 08825, USA" }, { "location": { "latitude": 418858923, "longitude": -746156790 }, "name": "" }, { "location": { "latitude": 417951888, "longitude": -748484944 }, "name": "650-652 Willi Hill Road, Swan Lake, NY 12783, USA" }, { "location": { "latitude": 407033786, "longitude": -743977337 }, "name": "26 East 3rd Street, New Providence, NJ 07974, USA" }, { "location": { "latitude": 417548014, "longitude": -740075041 }, "name": "" }, { "location": { "latitude": 410395868, "longitude": -744972325 }, "name": "" }, { "location": { "latitude": 404615353, "longitude": -745129803 }, "name": "" }, { "location": { "latitude": 406589790, "longitude": -743560121 }, "name": "611 Lawrence Avenue, Westfield, NJ 07090, USA" }, { "location": { "latitude": 414653148, "longitude": -740477477 }, "name": "18 Lannis Avenue, New Windsor, NY 12553, USA" }, { "location": { "latitude": 405957808, "longitude": -743255336 }, "name": "82-104 Amherst Avenue, Colonia, NJ 07067, USA" }, { "location": { "latitude": 411733589, "longitude": -741648093 }, "name": "170 Seven Lakes Drive, Sloatsburg, NY 10974, USA" }, { "location": { "latitude": 412676291, "longitude": -742606606 }, "name": "1270 Lakes Road, Monroe, NY 10950, USA" }, { "location": { "latitude": 409224445, "longitude": -748286738 }, "name": "509-535 Alphano Road, Great Meadows, NJ 07838, USA" }, { "location": { "latitude": 406523420, "longitude": -742135517 }, "name": "652 Garden Street, Elizabeth, NJ 07202, USA" }, { "location": { "latitude": 401827388, "longitude": -740294537 }, "name": "349 Sea Spray Court, Neptune City, NJ 07753, USA" }, { "location": { "latitude": 410564152, "longitude": -743685054 }, "name": "13-17 Stanley Street, West Milford, NJ 07480, USA" }, { "location": { "latitude": 408472324, "longitude": -740726046 }, "name": "47 Industrial Avenue, Teterboro, NJ 07608, USA" }, { "location": { "latitude": 412452168, "longitude": -740214052 }, "name": "5 White Oak Lane, Stony Point, NY 10980, USA" }, { "location": { "latitude": 409146138, "longitude": -746188906 }, "name": "Berkshire Valley Management Area Trail, Jefferson, NJ, USA" }, { "location": { "latitude": 404701380, "longitude": -744781745 }, "name": "1007 Jersey Avenue, New Brunswick, NJ 08901, USA" }, { "location": { "latitude": 409642566, "longitude": -746017679 }, "name": "6 East Emerald Isle Drive, Lake Hopatcong, NJ 07849, USA" }, { "location": { "latitude": 408031728, "longitude": -748645385 }, "name": "1358-1474 New Jersey 57, Port Murray, NJ 07865, USA" }, { "location": { "latitude": 413700272, "longitude": -742135189 }, "name": "367 Prospect Road, Chester, NY 10918, USA" }, { "location": { "latitude": 404310607, "longitude": -740282632 }, "name": "10 Simon Lake Drive, Atlantic Highlands, NJ 07716, USA" }, { "location": { "latitude": 409319800, "longitude": -746201391 }, "name": "11 Ward Street, Mount Arlington, NJ 07856, USA" }, { "location": { "latitude": 406685311, "longitude": -742108603 }, "name": "300-398 Jefferson Avenue, Elizabeth, NJ 07201, USA" }, { "location": { "latitude": 419018117, "longitude": -749142781 }, "name": "43 Dreher Road, Roscoe, NY 12776, USA" }, { "location": { "latitude": 412856162, "longitude": -745148837 }, "name": "Swan Street, Pine Island, NY 10969, USA" }, { "location": { "latitude": 416560744, "longitude": -746721964 }, "name": "66 Pleasantview Avenue, Monticello, NY 12701, USA" }, { "location": { "latitude": 405314270, "longitude": -749836354 }, "name": "" }, { "location": { "latitude": 414219548, "longitude": -743327440 }, "name": "" }, { "location": { "latitude": 415534177, "longitude": -742900616 }, "name": "565 Winding Hills Road, Montgomery, NY 12549, USA" }, { "location": { "latitude": 406898530, "longitude": -749127080 }, "name": "231 Rocky Run Road, Glen Gardner, NJ 08826, USA" }, { "location": { "latitude": 407586880, "longitude": -741670168 }, "name": "100 Mount Pleasant Avenue, Newark, NJ 07104, USA" }, { "location": { "latitude": 400106455, "longitude": -742870190 }, "name": "517-521 Huntington Drive, Manchester Township, NJ 08759, USA" }, { "location": { "latitude": 400066188, "longitude": -746793294 }, "name": "" }, { "location": { "latitude": 418803880, "longitude": -744102673 }, "name": "40 Mountain Road, Napanoch, NY 12458, USA" }, { "location": { "latitude": 414204288, "longitude": -747895140 }, "name": "" }, { "location": { "latitude": 414777405, "longitude": -740615601 }, "name": "" }, { "location": { "latitude": 415464475, "longitude": -747175374 }, "name": "48 North Road, Forestburgh, NY 12777, USA" }, { "location": { "latitude": 404062378, "longitude": -746376177 }, "name": "" }, { "location": { "latitude": 405688272, "longitude": -749285130 }, "name": "" }, { "location": { "latitude": 400342070, "longitude": -748788996 }, "name": "" }, { "location": { "latitude": 401809022, "longitude": -744157964 }, "name": "" }, { "location": { "latitude": 404226644, "longitude": -740517141 }, "name": "9 Thompson Avenue, Leonardo, NJ 07737, USA" }, { "location": { "latitude": 410322033, "longitude": -747871659 }, "name": "" }, { "location": { "latitude": 407100674, "longitude": -747742727 }, "name": "" }, { "location": { "latitude": 418811433, "longitude": -741718005 }, "name": "213 Bush Road, Stone Ridge, NY 12484, USA" }, { "location": { "latitude": 415034302, "longitude": -743850945 }, "name": "" }, { "location": { "latitude": 411349992, "longitude": -743694161 }, "name": "" }, { "location": { "latitude": 404839914, "longitude": -744759616 }, "name": "1-17 Bergen Court, New Brunswick, NJ 08901, USA" }, { "location": { "latitude": 414638017, "longitude": -745957854 }, "name": "35 Oakland Valley Road, Cuddebackville, NY 12729, USA" }, { "location": { "latitude": 412127800, "longitude": -740173578 }, "name": "" }, { "location": { "latitude": 401263460, "longitude": -747964303 }, "name": "" }, { "location": { "latitude": 412843391, "longitude": -749086026 }, "name": "" }, { "location": { "latitude": 418512773, "longitude": -743067823 }, "name": "" }, { "location": { "latitude": 404318328, "longitude": -740835638 }, "name": "42-102 Main Street, Belford, NJ 07718, USA" }, { "location": { "latitude": 419020746, "longitude": -741172328 }, "name": "" }, { "location": { "latitude": 404080723, "longitude": -746119569 }, "name": "" }, { "location": { "latitude": 401012643, "longitude": -744035134 }, "name": "" }, { "location": { "latitude": 404306372, "longitude": -741079661 }, "name": "" }, { "location": { "latitude": 403966326, "longitude": -748519297 }, "name": "" }, { "location": { "latitude": 405002031, "longitude": -748407866 }, "name": "" }, { "location": { "latitude": 409532885, "longitude": -742200683 }, "name": "" }, { "location": { "latitude": 416851321, "longitude": -742674555 }, "name": "" }, { "location": { "latitude": 406411633, "longitude": -741722051 }, "name": "3387 Richmond Terrace, Staten Island, NY 10303, USA" }, { "location": { "latitude": 413069058, "longitude": -744597778 }, "name": "261 Van Sickle Road, Goshen, NY 10924, USA" }, { "location": { "latitude": 418465462, "longitude": -746859398 }, "name": "" }, { "location": { "latitude": 411733222, "longitude": -744228360 }, "name": "" }, { "location": { "latitude": 410248224, "longitude": -747127767 }, "name": "3 Hasta Way, Newton, NJ 07860, USA" }] grpc-1.30.2/examples/node/dynamic_codegen/route_guide/route_guide_server.js000066400000000000000000000165121370425124100271610ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ var PROTO_PATH = __dirname + '/../../../protos/route_guide.proto'; var fs = require('fs'); var parseArgs = require('minimist'); var path = require('path'); var _ = require('lodash'); var grpc = require('grpc'); var protoLoader = require('@grpc/proto-loader'); var packageDefinition = protoLoader.loadSync( PROTO_PATH, {keepCase: true, longs: String, enums: String, defaults: true, oneofs: true }); var routeguide = grpc.loadPackageDefinition(packageDefinition).routeguide; var COORD_FACTOR = 1e7; /** * For simplicity, a point is a record type that looks like * {latitude: number, longitude: number}, and a feature is a record type that * looks like {name: string, location: point}. feature objects with name==='' * are points with no feature. */ /** * List of feature objects at points that have been requested so far. */ var feature_list = []; /** * Get a feature object at the given point, or creates one if it does not exist. * @param {point} point The point to check * @return {feature} The feature object at the point. Note that an empty name * indicates no feature */ function checkFeature(point) { var feature; // Check if there is already a feature object for the given point for (var i = 0; i < feature_list.length; i++) { feature = feature_list[i]; if (feature.location.latitude === point.latitude && feature.location.longitude === point.longitude) { return feature; } } var name = ''; feature = { name: name, location: point }; return feature; } /** * getFeature request handler. Gets a request with a point, and responds with a * feature object indicating whether there is a feature at that point. * @param {EventEmitter} call Call object for the handler to process * @param {function(Error, feature)} callback Response callback */ function getFeature(call, callback) { callback(null, checkFeature(call.request)); } /** * listFeatures request handler. Gets a request with two points, and responds * with a stream of all features in the bounding box defined by those points. * @param {Writable} call Writable stream for responses with an additional * request property for the request value. */ function listFeatures(call) { var lo = call.request.lo; var hi = call.request.hi; var left = _.min([lo.longitude, hi.longitude]); var right = _.max([lo.longitude, hi.longitude]); var top = _.max([lo.latitude, hi.latitude]); var bottom = _.min([lo.latitude, hi.latitude]); // For each feature, check if it is in the given bounding box _.each(feature_list, function(feature) { if (feature.name === '') { return; } if (feature.location.longitude >= left && feature.location.longitude <= right && feature.location.latitude >= bottom && feature.location.latitude <= top) { call.write(feature); } }); call.end(); } /** * Calculate the distance between two points using the "haversine" formula. * The formula is based on http://mathforum.org/library/drmath/view/51879.html. * @param start The starting point * @param end The end point * @return The distance between the points in meters */ function getDistance(start, end) { function toRadians(num) { return num * Math.PI / 180; } var R = 6371000; // earth radius in metres var lat1 = toRadians(start.latitude / COORD_FACTOR); var lat2 = toRadians(end.latitude / COORD_FACTOR); var lon1 = toRadians(start.longitude / COORD_FACTOR); var lon2 = toRadians(end.longitude / COORD_FACTOR); var deltalat = lat2-lat1; var deltalon = lon2-lon1; var a = Math.sin(deltalat/2) * Math.sin(deltalat/2) + Math.cos(lat1) * Math.cos(lat2) * Math.sin(deltalon/2) * Math.sin(deltalon/2); var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); return R * c; } /** * recordRoute handler. Gets a stream of points, and responds with statistics * about the "trip": number of points, number of known features visited, total * distance traveled, and total time spent. * @param {Readable} call The request point stream. * @param {function(Error, routeSummary)} callback The callback to pass the * response to */ function recordRoute(call, callback) { var point_count = 0; var feature_count = 0; var distance = 0; var previous = null; // Start a timer var start_time = process.hrtime(); call.on('data', function(point) { point_count += 1; if (checkFeature(point).name !== '') { feature_count += 1; } /* For each point after the first, add the incremental distance from the * previous point to the total distance value */ if (previous != null) { distance += getDistance(previous, point); } previous = point; }); call.on('end', function() { callback(null, { point_count: point_count, feature_count: feature_count, // Cast the distance to an integer distance: distance|0, // End the timer elapsed_time: process.hrtime(start_time)[0] }); }); } var route_notes = {}; /** * Turn the point into a dictionary key. * @param {point} point The point to use * @return {string} The key for an object */ function pointKey(point) { return point.latitude + ' ' + point.longitude; } /** * routeChat handler. Receives a stream of message/location pairs, and responds * with a stream of all previous messages at each of those locations. * @param {Duplex} call The stream for incoming and outgoing messages */ function routeChat(call) { call.on('data', function(note) { var key = pointKey(note.location); /* For each note sent, respond with all previous notes that correspond to * the same point */ if (route_notes.hasOwnProperty(key)) { _.each(route_notes[key], function(note) { call.write(note); }); } else { route_notes[key] = []; } // Then add the new note to the list route_notes[key].push(JSON.parse(JSON.stringify(note))); }); call.on('end', function() { call.end(); }); } /** * Get a new server with the handler functions in this file bound to the methods * it serves. * @return {Server} The new server object */ function getServer() { var server = new grpc.Server(); server.addProtoService(routeguide.RouteGuide.service, { getFeature: getFeature, listFeatures: listFeatures, recordRoute: recordRoute, routeChat: routeChat }); return server; } if (require.main === module) { // If this is run as a script, start a server on an unused port var routeServer = getServer(); routeServer.bind('0.0.0.0:50051', grpc.ServerCredentials.createInsecure()); var argv = parseArgs(process.argv, { string: 'db_path' }); fs.readFile(path.resolve(argv.db_path), function(err, data) { if (err) throw err; feature_list = JSON.parse(data); routeServer.start(); }); } exports.getServer = getServer; grpc-1.30.2/examples/node/package.json000066400000000000000000000003611370425124100175600ustar00rootroot00000000000000{ "name": "grpc-examples", "version": "0.1.0", "dependencies": { "@grpc/proto-loader": "^0.1.0", "async": "^1.5.2", "google-protobuf": "^3.0.0", "grpc": "^1.11.0", "lodash": "^4.6.1", "minimist": "^1.2.0" } } grpc-1.30.2/examples/node/static_codegen/000077500000000000000000000000001370425124100202455ustar00rootroot00000000000000grpc-1.30.2/examples/node/static_codegen/README.md000066400000000000000000000015661370425124100215340ustar00rootroot00000000000000This is the static code generation variant of the Node examples. Code in these examples is pre-generated using protoc and the Node gRPC protoc plugin, and the generated code can be found in various `*_pb.js` files. The command line sequence for generating those files is as follows (assuming that `protoc` and `grpc_node_plugin` are present, and starting in the directory which contains this README.md file): ```sh cd ../../protos npm install -g grpc-tools grpc_tools_node_protoc --js_out=import_style=commonjs,binary:../node/static_codegen/ --grpc_out=../node/static_codegen --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` helloworld.proto grpc_tools_node_protoc --js_out=import_style=commonjs,binary:../node/static_codegen/route_guide/ --grpc_out=../node/static_codegen/route_guide/ --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` route_guide.proto ``` grpc-1.30.2/examples/node/static_codegen/greeter_client.js000066400000000000000000000022401370425124100235740ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ var messages = require('./helloworld_pb'); var services = require('./helloworld_grpc_pb'); var grpc = require('grpc'); function main() { var client = new services.GreeterClient('localhost:50051', grpc.credentials.createInsecure()); var request = new messages.HelloRequest(); var user; if (process.argv.length >= 3) { user = process.argv[2]; } else { user = 'world'; } request.setName(user); client.sayHello(request, function(err, response) { console.log('Greeting:', response.getMessage()); }); } main(); grpc-1.30.2/examples/node/static_codegen/greeter_server.js000066400000000000000000000023561370425124100236340ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ var messages = require('./helloworld_pb'); var services = require('./helloworld_grpc_pb'); var grpc = require('grpc'); /** * Implements the SayHello RPC method. */ function sayHello(call, callback) { var reply = new messages.HelloReply(); reply.setMessage('Hello ' + call.request.getName()); callback(null, reply); } /** * Starts an RPC server that receives requests for the Greeter service at the * sample server port */ function main() { var server = new grpc.Server(); server.addService(services.GreeterService, {sayHello: sayHello}); server.bind('0.0.0.0:50051', grpc.ServerCredentials.createInsecure()); server.start(); } main(); grpc-1.30.2/examples/node/static_codegen/helloworld_grpc_pb.js000066400000000000000000000037201370425124100244540ustar00rootroot00000000000000// GENERATED CODE -- DO NOT EDIT! // Original file comments: // Copyright 2015 gRPC 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 // // 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. // 'use strict'; var grpc = require('grpc'); var helloworld_pb = require('./helloworld_pb.js'); function serialize_HelloReply(arg) { if (!(arg instanceof helloworld_pb.HelloReply)) { throw new Error('Expected argument of type HelloReply'); } return new Buffer(arg.serializeBinary()); } function deserialize_HelloReply(buffer_arg) { return helloworld_pb.HelloReply.deserializeBinary(new Uint8Array(buffer_arg)); } function serialize_HelloRequest(arg) { if (!(arg instanceof helloworld_pb.HelloRequest)) { throw new Error('Expected argument of type HelloRequest'); } return new Buffer(arg.serializeBinary()); } function deserialize_HelloRequest(buffer_arg) { return helloworld_pb.HelloRequest.deserializeBinary(new Uint8Array(buffer_arg)); } // The greeting service definition. var GreeterService = exports.GreeterService = { // Sends a greeting sayHello: { path: '/helloworld.Greeter/SayHello', requestStream: false, responseStream: false, requestType: helloworld_pb.HelloRequest, responseType: helloworld_pb.HelloReply, requestSerialize: serialize_HelloRequest, requestDeserialize: deserialize_HelloRequest, responseSerialize: serialize_HelloReply, responseDeserialize: deserialize_HelloReply, }, }; exports.GreeterClient = grpc.makeGenericClientConstructor(GreeterService); grpc-1.30.2/examples/node/static_codegen/helloworld_pb.js000066400000000000000000000231601370425124100234410ustar00rootroot00000000000000/** * @fileoverview * @enhanceable * @public */ // GENERATED CODE -- DO NOT EDIT! var jspb = require('google-protobuf'); var goog = jspb; var global = Function('return this')(); goog.exportSymbol('proto.helloworld.HelloReply', null, global); goog.exportSymbol('proto.helloworld.HelloRequest', null, global); /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a * server response, or constructed directly in Javascript. The array is used * in place and becomes part of the constructed object. It is not cloned. * If no data is provided, the constructed object will be empty, but still * valid. * @extends {jspb.Message} * @constructor */ proto.helloworld.HelloRequest = function(opt_data) { jspb.Message.initialize(this, opt_data, 0, -1, null, null); }; goog.inherits(proto.helloworld.HelloRequest, jspb.Message); if (goog.DEBUG && !COMPILED) { proto.helloworld.HelloRequest.displayName = 'proto.helloworld.HelloRequest'; } if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto suitable for use in Soy templates. * Field names that are reserved in JavaScript and will be renamed to pb_name. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. * @param {boolean=} opt_includeInstance Whether to include the JSPB instance * for transitional soy proto support: http://goto/soy-param-migration * @return {!Object} */ proto.helloworld.HelloRequest.prototype.toObject = function(opt_includeInstance) { return proto.helloworld.HelloRequest.toObject(opt_includeInstance, this); }; /** * Static version of the {@see toObject} method. * @param {boolean|undefined} includeInstance Whether to include the JSPB * instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.helloworld.HelloRequest} msg The msg instance to transform. * @return {!Object} */ proto.helloworld.HelloRequest.toObject = function(includeInstance, msg) { var f, obj = { name: msg.getName() }; if (includeInstance) { obj.$jspbMessageInstance = msg; } return obj; }; } /** * Deserializes binary data (in protobuf wire format). * @param {jspb.ByteSource} bytes The bytes to deserialize. * @return {!proto.helloworld.HelloRequest} */ proto.helloworld.HelloRequest.deserializeBinary = function(bytes) { var reader = new jspb.BinaryReader(bytes); var msg = new proto.helloworld.HelloRequest; return proto.helloworld.HelloRequest.deserializeBinaryFromReader(msg, reader); }; /** * Deserializes binary data (in protobuf wire format) from the * given reader into the given message object. * @param {!proto.helloworld.HelloRequest} msg The message object to deserialize into. * @param {!jspb.BinaryReader} reader The BinaryReader to use. * @return {!proto.helloworld.HelloRequest} */ proto.helloworld.HelloRequest.deserializeBinaryFromReader = function(msg, reader) { while (reader.nextField()) { if (reader.isEndGroup()) { break; } var field = reader.getFieldNumber(); switch (field) { case 1: var value = /** @type {string} */ (reader.readString()); msg.setName(value); break; default: reader.skipField(); break; } } return msg; }; /** * Class method variant: serializes the given message to binary data * (in protobuf wire format), writing to the given BinaryWriter. * @param {!proto.helloworld.HelloRequest} message * @param {!jspb.BinaryWriter} writer */ proto.helloworld.HelloRequest.serializeBinaryToWriter = function(message, writer) { message.serializeBinaryToWriter(writer); }; /** * Serializes the message to binary data (in protobuf wire format). * @return {!Uint8Array} */ proto.helloworld.HelloRequest.prototype.serializeBinary = function() { var writer = new jspb.BinaryWriter(); this.serializeBinaryToWriter(writer); return writer.getResultBuffer(); }; /** * Serializes the message to binary data (in protobuf wire format), * writing to the given BinaryWriter. * @param {!jspb.BinaryWriter} writer */ proto.helloworld.HelloRequest.prototype.serializeBinaryToWriter = function (writer) { var f = undefined; f = this.getName(); if (f.length > 0) { writer.writeString( 1, f ); } }; /** * Creates a deep clone of this proto. No data is shared with the original. * @return {!proto.helloworld.HelloRequest} The clone. */ proto.helloworld.HelloRequest.prototype.cloneMessage = function() { return /** @type {!proto.helloworld.HelloRequest} */ (jspb.Message.cloneMessage(this)); }; /** * optional string name = 1; * @return {string} */ proto.helloworld.HelloRequest.prototype.getName = function() { return /** @type {string} */ (jspb.Message.getFieldProto3(this, 1, "")); }; /** @param {string} value */ proto.helloworld.HelloRequest.prototype.setName = function(value) { jspb.Message.setField(this, 1, value); }; /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a * server response, or constructed directly in Javascript. The array is used * in place and becomes part of the constructed object. It is not cloned. * If no data is provided, the constructed object will be empty, but still * valid. * @extends {jspb.Message} * @constructor */ proto.helloworld.HelloReply = function(opt_data) { jspb.Message.initialize(this, opt_data, 0, -1, null, null); }; goog.inherits(proto.helloworld.HelloReply, jspb.Message); if (goog.DEBUG && !COMPILED) { proto.helloworld.HelloReply.displayName = 'proto.helloworld.HelloReply'; } if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto suitable for use in Soy templates. * Field names that are reserved in JavaScript and will be renamed to pb_name. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. * @param {boolean=} opt_includeInstance Whether to include the JSPB instance * for transitional soy proto support: http://goto/soy-param-migration * @return {!Object} */ proto.helloworld.HelloReply.prototype.toObject = function(opt_includeInstance) { return proto.helloworld.HelloReply.toObject(opt_includeInstance, this); }; /** * Static version of the {@see toObject} method. * @param {boolean|undefined} includeInstance Whether to include the JSPB * instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.helloworld.HelloReply} msg The msg instance to transform. * @return {!Object} */ proto.helloworld.HelloReply.toObject = function(includeInstance, msg) { var f, obj = { message: msg.getMessage() }; if (includeInstance) { obj.$jspbMessageInstance = msg; } return obj; }; } /** * Deserializes binary data (in protobuf wire format). * @param {jspb.ByteSource} bytes The bytes to deserialize. * @return {!proto.helloworld.HelloReply} */ proto.helloworld.HelloReply.deserializeBinary = function(bytes) { var reader = new jspb.BinaryReader(bytes); var msg = new proto.helloworld.HelloReply; return proto.helloworld.HelloReply.deserializeBinaryFromReader(msg, reader); }; /** * Deserializes binary data (in protobuf wire format) from the * given reader into the given message object. * @param {!proto.helloworld.HelloReply} msg The message object to deserialize into. * @param {!jspb.BinaryReader} reader The BinaryReader to use. * @return {!proto.helloworld.HelloReply} */ proto.helloworld.HelloReply.deserializeBinaryFromReader = function(msg, reader) { while (reader.nextField()) { if (reader.isEndGroup()) { break; } var field = reader.getFieldNumber(); switch (field) { case 1: var value = /** @type {string} */ (reader.readString()); msg.setMessage(value); break; default: reader.skipField(); break; } } return msg; }; /** * Class method variant: serializes the given message to binary data * (in protobuf wire format), writing to the given BinaryWriter. * @param {!proto.helloworld.HelloReply} message * @param {!jspb.BinaryWriter} writer */ proto.helloworld.HelloReply.serializeBinaryToWriter = function(message, writer) { message.serializeBinaryToWriter(writer); }; /** * Serializes the message to binary data (in protobuf wire format). * @return {!Uint8Array} */ proto.helloworld.HelloReply.prototype.serializeBinary = function() { var writer = new jspb.BinaryWriter(); this.serializeBinaryToWriter(writer); return writer.getResultBuffer(); }; /** * Serializes the message to binary data (in protobuf wire format), * writing to the given BinaryWriter. * @param {!jspb.BinaryWriter} writer */ proto.helloworld.HelloReply.prototype.serializeBinaryToWriter = function (writer) { var f = undefined; f = this.getMessage(); if (f.length > 0) { writer.writeString( 1, f ); } }; /** * Creates a deep clone of this proto. No data is shared with the original. * @return {!proto.helloworld.HelloReply} The clone. */ proto.helloworld.HelloReply.prototype.cloneMessage = function() { return /** @type {!proto.helloworld.HelloReply} */ (jspb.Message.cloneMessage(this)); }; /** * optional string message = 1; * @return {string} */ proto.helloworld.HelloReply.prototype.getMessage = function() { return /** @type {string} */ (jspb.Message.getFieldProto3(this, 1, "")); }; /** @param {string} value */ proto.helloworld.HelloReply.prototype.setMessage = function(value) { jspb.Message.setField(this, 1, value); }; goog.object.extend(exports, proto.helloworld); grpc-1.30.2/examples/node/static_codegen/route_guide/000077500000000000000000000000001370425124100225605ustar00rootroot00000000000000grpc-1.30.2/examples/node/static_codegen/route_guide/README.md000066400000000000000000000003451370425124100240410ustar00rootroot00000000000000# gRPC Basics: Node.js sample code The files in this folder are the samples used in [gRPC Basics: Node.js][], a detailed tutorial for using gRPC in Node.js. [gRPC Basics: Node.js]:https://grpc.io/docs/tutorials/basic/node.html grpc-1.30.2/examples/node/static_codegen/route_guide/route_guide_client.js000066400000000000000000000160171370425124100267740ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ var messages = require('./route_guide_pb'); var services = require('./route_guide_grpc_pb'); var async = require('async'); var fs = require('fs'); var parseArgs = require('minimist'); var path = require('path'); var _ = require('lodash'); var grpc = require('grpc'); var client = new services.RouteGuideClient('localhost:50051', grpc.credentials.createInsecure()); var COORD_FACTOR = 1e7; /** * Run the getFeature demo. Calls getFeature with a point known to have a * feature and a point known not to have a feature. * @param {function} callback Called when this demo is complete */ function runGetFeature(callback) { var next = _.after(2, callback); function featureCallback(error, feature) { if (error) { callback(error); return; } var latitude = feature.getLocation().getLatitude(); var longitude = feature.getLocation().getLongitude(); if (feature.getName() === '') { console.log('Found no feature at ' + latitude/COORD_FACTOR + ', ' + longitude/COORD_FACTOR); } else { console.log('Found feature called "' + feature.getName() + '" at ' + latitude/COORD_FACTOR + ', ' + longitude/COORD_FACTOR); } next(); } var point1 = new messages.Point(); point1.setLatitude(409146138); point1.setLongitude(-746188906); var point2 = new messages.Point(); point2.setLatitude(0); point2.setLongitude(0); client.getFeature(point1, featureCallback); client.getFeature(point2, featureCallback); } /** * Run the listFeatures demo. Calls listFeatures with a rectangle containing all * of the features in the pre-generated database. Prints each response as it * comes in. * @param {function} callback Called when this demo is complete */ function runListFeatures(callback) { var rect = new messages.Rectangle(); var lo = new messages.Point(); lo.setLatitude(400000000); lo.setLongitude(-750000000); rect.setLo(lo); var hi = new messages.Point(); hi.setLatitude(420000000); hi.setLongitude(-730000000); rect.setHi(hi); console.log('Looking for features between 40, -75 and 42, -73'); var call = client.listFeatures(rect); call.on('data', function(feature) { console.log('Found feature called "' + feature.getName() + '" at ' + feature.getLocation().getLatitude()/COORD_FACTOR + ', ' + feature.getLocation().getLongitude()/COORD_FACTOR); }); call.on('end', callback); } /** * Run the recordRoute demo. Sends several randomly chosen points from the * pre-generated feature database with a variable delay in between. Prints the * statistics when they are sent from the server. * @param {function} callback Called when this demo is complete */ function runRecordRoute(callback) { var argv = parseArgs(process.argv, { string: 'db_path' }); fs.readFile(path.resolve(argv.db_path), function(err, data) { if (err) { callback(err); return; } // Transform the loaded features to Feature objects var feature_list = _.map(JSON.parse(data), function(value) { var feature = new messages.Feature(); feature.setName(value.name); var location = new messages.Point(); location.setLatitude(value.location.latitude); location.setLongitude(value.location.longitude); feature.setLocation(location); return feature; }); var num_points = 10; var call = client.recordRoute(function(error, stats) { if (error) { callback(error); return; } console.log('Finished trip with', stats.getPointCount(), 'points'); console.log('Passed', stats.getFeatureCount(), 'features'); console.log('Travelled', stats.getDistance(), 'meters'); console.log('It took', stats.getElapsedTime(), 'seconds'); callback(); }); /** * Constructs a function that asynchronously sends the given point and then * delays sending its callback * @param {messages.Point} location The point to send * @return {function(function)} The function that sends the point */ function pointSender(location) { /** * Sends the point, then calls the callback after a delay * @param {function} callback Called when complete */ return function(callback) { console.log('Visiting point ' + location.getLatitude()/COORD_FACTOR + ', ' + location.getLongitude()/COORD_FACTOR); call.write(location); _.delay(callback, _.random(500, 1500)); }; } var point_senders = []; for (var i = 0; i < num_points; i++) { var rand_point = feature_list[_.random(0, feature_list.length - 1)]; point_senders[i] = pointSender(rand_point.getLocation()); } async.series(point_senders, function() { call.end(); }); }); } /** * Run the routeChat demo. Send some chat messages, and print any chat messages * that are sent from the server. * @param {function} callback Called when the demo is complete */ function runRouteChat(callback) { var call = client.routeChat(); call.on('data', function(note) { console.log('Got message "' + note.getMessage() + '" at ' + note.getLocation().getLatitude() + ', ' + note.getLocation().getLongitude()); }); call.on('end', callback); var notes = [{ location: { latitude: 0, longitude: 0 }, message: 'First message' }, { location: { latitude: 0, longitude: 1 }, message: 'Second message' }, { location: { latitude: 1, longitude: 0 }, message: 'Third message' }, { location: { latitude: 0, longitude: 0 }, message: 'Fourth message' }]; for (var i = 0; i < notes.length; i++) { var note = notes[i]; console.log('Sending message "' + note.message + '" at ' + note.location.latitude + ', ' + note.location.longitude); var noteMsg = new messages.RouteNote(); noteMsg.setMessage(note.message); var location = new messages.Point(); location.setLatitude(note.location.latitude); location.setLongitude(note.location.longitude); noteMsg.setLocation(location); call.write(noteMsg); } call.end(); } /** * Run all of the demos in order */ function main() { async.series([ runGetFeature, runListFeatures, runRecordRoute, runRouteChat ]); } if (require.main === module) { main(); } exports.runGetFeature = runGetFeature; exports.runListFeatures = runListFeatures; exports.runRecordRoute = runRecordRoute; exports.runRouteChat = runRouteChat; grpc-1.30.2/examples/node/static_codegen/route_guide/route_guide_db.json000066400000000000000000000327101370425124100264360ustar00rootroot00000000000000[{ "location": { "latitude": 407838351, "longitude": -746143763 }, "name": "Patriots Path, Mendham, NJ 07945, USA" }, { "location": { "latitude": 408122808, "longitude": -743999179 }, "name": "101 New Jersey 10, Whippany, NJ 07981, USA" }, { "location": { "latitude": 413628156, "longitude": -749015468 }, "name": "U.S. 6, Shohola, PA 18458, USA" }, { "location": { "latitude": 419999544, "longitude": -740371136 }, "name": "5 Conners Road, Kingston, NY 12401, USA" }, { "location": { "latitude": 414008389, "longitude": -743951297 }, "name": "Mid Hudson Psychiatric Center, New Hampton, NY 10958, USA" }, { "location": { "latitude": 419611318, "longitude": -746524769 }, "name": "287 Flugertown Road, Livingston Manor, NY 12758, USA" }, { "location": { "latitude": 406109563, "longitude": -742186778 }, "name": "4001 Tremley Point Road, Linden, NJ 07036, USA" }, { "location": { "latitude": 416802456, "longitude": -742370183 }, "name": "352 South Mountain Road, Wallkill, NY 12589, USA" }, { "location": { "latitude": 412950425, "longitude": -741077389 }, "name": "Bailey Turn Road, Harriman, NY 10926, USA" }, { "location": { "latitude": 412144655, "longitude": -743949739 }, "name": "193-199 Wawayanda Road, Hewitt, NJ 07421, USA" }, { "location": { "latitude": 415736605, "longitude": -742847522 }, "name": "406-496 Ward Avenue, Pine Bush, NY 12566, USA" }, { "location": { "latitude": 413843930, "longitude": -740501726 }, "name": "162 Merrill Road, Highland Mills, NY 10930, USA" }, { "location": { "latitude": 410873075, "longitude": -744459023 }, "name": "Clinton Road, West Milford, NJ 07480, USA" }, { "location": { "latitude": 412346009, "longitude": -744026814 }, "name": "16 Old Brook Lane, Warwick, NY 10990, USA" }, { "location": { "latitude": 402948455, "longitude": -747903913 }, "name": "3 Drake Lane, Pennington, NJ 08534, USA" }, { "location": { "latitude": 406337092, "longitude": -740122226 }, "name": "6324 8th Avenue, Brooklyn, NY 11220, USA" }, { "location": { "latitude": 406421967, "longitude": -747727624 }, "name": "1 Merck Access Road, Whitehouse Station, NJ 08889, USA" }, { "location": { "latitude": 416318082, "longitude": -749677716 }, "name": "78-98 Schalck Road, Narrowsburg, NY 12764, USA" }, { "location": { "latitude": 415301720, "longitude": -748416257 }, "name": "282 Lakeview Drive Road, Highland Lake, NY 12743, USA" }, { "location": { "latitude": 402647019, "longitude": -747071791 }, "name": "330 Evelyn Avenue, Hamilton Township, NJ 08619, USA" }, { "location": { "latitude": 412567807, "longitude": -741058078 }, "name": "New York State Reference Route 987E, Southfields, NY 10975, USA" }, { "location": { "latitude": 416855156, "longitude": -744420597 }, "name": "103-271 Tempaloni Road, Ellenville, NY 12428, USA" }, { "location": { "latitude": 404663628, "longitude": -744820157 }, "name": "1300 Airport Road, North Brunswick Township, NJ 08902, USA" }, { "location": { "latitude": 407113723, "longitude": -749746483 }, "name": "" }, { "location": { "latitude": 402133926, "longitude": -743613249 }, "name": "" }, { "location": { "latitude": 400273442, "longitude": -741220915 }, "name": "" }, { "location": { "latitude": 411236786, "longitude": -744070769 }, "name": "" }, { "location": { "latitude": 411633782, "longitude": -746784970 }, "name": "211-225 Plains Road, Augusta, NJ 07822, USA" }, { "location": { "latitude": 415830701, "longitude": -742952812 }, "name": "" }, { "location": { "latitude": 413447164, "longitude": -748712898 }, "name": "165 Pedersen Ridge Road, Milford, PA 18337, USA" }, { "location": { "latitude": 405047245, "longitude": -749800722 }, "name": "100-122 Locktown Road, Frenchtown, NJ 08825, USA" }, { "location": { "latitude": 418858923, "longitude": -746156790 }, "name": "" }, { "location": { "latitude": 417951888, "longitude": -748484944 }, "name": "650-652 Willi Hill Road, Swan Lake, NY 12783, USA" }, { "location": { "latitude": 407033786, "longitude": -743977337 }, "name": "26 East 3rd Street, New Providence, NJ 07974, USA" }, { "location": { "latitude": 417548014, "longitude": -740075041 }, "name": "" }, { "location": { "latitude": 410395868, "longitude": -744972325 }, "name": "" }, { "location": { "latitude": 404615353, "longitude": -745129803 }, "name": "" }, { "location": { "latitude": 406589790, "longitude": -743560121 }, "name": "611 Lawrence Avenue, Westfield, NJ 07090, USA" }, { "location": { "latitude": 414653148, "longitude": -740477477 }, "name": "18 Lannis Avenue, New Windsor, NY 12553, USA" }, { "location": { "latitude": 405957808, "longitude": -743255336 }, "name": "82-104 Amherst Avenue, Colonia, NJ 07067, USA" }, { "location": { "latitude": 411733589, "longitude": -741648093 }, "name": "170 Seven Lakes Drive, Sloatsburg, NY 10974, USA" }, { "location": { "latitude": 412676291, "longitude": -742606606 }, "name": "1270 Lakes Road, Monroe, NY 10950, USA" }, { "location": { "latitude": 409224445, "longitude": -748286738 }, "name": "509-535 Alphano Road, Great Meadows, NJ 07838, USA" }, { "location": { "latitude": 406523420, "longitude": -742135517 }, "name": "652 Garden Street, Elizabeth, NJ 07202, USA" }, { "location": { "latitude": 401827388, "longitude": -740294537 }, "name": "349 Sea Spray Court, Neptune City, NJ 07753, USA" }, { "location": { "latitude": 410564152, "longitude": -743685054 }, "name": "13-17 Stanley Street, West Milford, NJ 07480, USA" }, { "location": { "latitude": 408472324, "longitude": -740726046 }, "name": "47 Industrial Avenue, Teterboro, NJ 07608, USA" }, { "location": { "latitude": 412452168, "longitude": -740214052 }, "name": "5 White Oak Lane, Stony Point, NY 10980, USA" }, { "location": { "latitude": 409146138, "longitude": -746188906 }, "name": "Berkshire Valley Management Area Trail, Jefferson, NJ, USA" }, { "location": { "latitude": 404701380, "longitude": -744781745 }, "name": "1007 Jersey Avenue, New Brunswick, NJ 08901, USA" }, { "location": { "latitude": 409642566, "longitude": -746017679 }, "name": "6 East Emerald Isle Drive, Lake Hopatcong, NJ 07849, USA" }, { "location": { "latitude": 408031728, "longitude": -748645385 }, "name": "1358-1474 New Jersey 57, Port Murray, NJ 07865, USA" }, { "location": { "latitude": 413700272, "longitude": -742135189 }, "name": "367 Prospect Road, Chester, NY 10918, USA" }, { "location": { "latitude": 404310607, "longitude": -740282632 }, "name": "10 Simon Lake Drive, Atlantic Highlands, NJ 07716, USA" }, { "location": { "latitude": 409319800, "longitude": -746201391 }, "name": "11 Ward Street, Mount Arlington, NJ 07856, USA" }, { "location": { "latitude": 406685311, "longitude": -742108603 }, "name": "300-398 Jefferson Avenue, Elizabeth, NJ 07201, USA" }, { "location": { "latitude": 419018117, "longitude": -749142781 }, "name": "43 Dreher Road, Roscoe, NY 12776, USA" }, { "location": { "latitude": 412856162, "longitude": -745148837 }, "name": "Swan Street, Pine Island, NY 10969, USA" }, { "location": { "latitude": 416560744, "longitude": -746721964 }, "name": "66 Pleasantview Avenue, Monticello, NY 12701, USA" }, { "location": { "latitude": 405314270, "longitude": -749836354 }, "name": "" }, { "location": { "latitude": 414219548, "longitude": -743327440 }, "name": "" }, { "location": { "latitude": 415534177, "longitude": -742900616 }, "name": "565 Winding Hills Road, Montgomery, NY 12549, USA" }, { "location": { "latitude": 406898530, "longitude": -749127080 }, "name": "231 Rocky Run Road, Glen Gardner, NJ 08826, USA" }, { "location": { "latitude": 407586880, "longitude": -741670168 }, "name": "100 Mount Pleasant Avenue, Newark, NJ 07104, USA" }, { "location": { "latitude": 400106455, "longitude": -742870190 }, "name": "517-521 Huntington Drive, Manchester Township, NJ 08759, USA" }, { "location": { "latitude": 400066188, "longitude": -746793294 }, "name": "" }, { "location": { "latitude": 418803880, "longitude": -744102673 }, "name": "40 Mountain Road, Napanoch, NY 12458, USA" }, { "location": { "latitude": 414204288, "longitude": -747895140 }, "name": "" }, { "location": { "latitude": 414777405, "longitude": -740615601 }, "name": "" }, { "location": { "latitude": 415464475, "longitude": -747175374 }, "name": "48 North Road, Forestburgh, NY 12777, USA" }, { "location": { "latitude": 404062378, "longitude": -746376177 }, "name": "" }, { "location": { "latitude": 405688272, "longitude": -749285130 }, "name": "" }, { "location": { "latitude": 400342070, "longitude": -748788996 }, "name": "" }, { "location": { "latitude": 401809022, "longitude": -744157964 }, "name": "" }, { "location": { "latitude": 404226644, "longitude": -740517141 }, "name": "9 Thompson Avenue, Leonardo, NJ 07737, USA" }, { "location": { "latitude": 410322033, "longitude": -747871659 }, "name": "" }, { "location": { "latitude": 407100674, "longitude": -747742727 }, "name": "" }, { "location": { "latitude": 418811433, "longitude": -741718005 }, "name": "213 Bush Road, Stone Ridge, NY 12484, USA" }, { "location": { "latitude": 415034302, "longitude": -743850945 }, "name": "" }, { "location": { "latitude": 411349992, "longitude": -743694161 }, "name": "" }, { "location": { "latitude": 404839914, "longitude": -744759616 }, "name": "1-17 Bergen Court, New Brunswick, NJ 08901, USA" }, { "location": { "latitude": 414638017, "longitude": -745957854 }, "name": "35 Oakland Valley Road, Cuddebackville, NY 12729, USA" }, { "location": { "latitude": 412127800, "longitude": -740173578 }, "name": "" }, { "location": { "latitude": 401263460, "longitude": -747964303 }, "name": "" }, { "location": { "latitude": 412843391, "longitude": -749086026 }, "name": "" }, { "location": { "latitude": 418512773, "longitude": -743067823 }, "name": "" }, { "location": { "latitude": 404318328, "longitude": -740835638 }, "name": "42-102 Main Street, Belford, NJ 07718, USA" }, { "location": { "latitude": 419020746, "longitude": -741172328 }, "name": "" }, { "location": { "latitude": 404080723, "longitude": -746119569 }, "name": "" }, { "location": { "latitude": 401012643, "longitude": -744035134 }, "name": "" }, { "location": { "latitude": 404306372, "longitude": -741079661 }, "name": "" }, { "location": { "latitude": 403966326, "longitude": -748519297 }, "name": "" }, { "location": { "latitude": 405002031, "longitude": -748407866 }, "name": "" }, { "location": { "latitude": 409532885, "longitude": -742200683 }, "name": "" }, { "location": { "latitude": 416851321, "longitude": -742674555 }, "name": "" }, { "location": { "latitude": 406411633, "longitude": -741722051 }, "name": "3387 Richmond Terrace, Staten Island, NY 10303, USA" }, { "location": { "latitude": 413069058, "longitude": -744597778 }, "name": "261 Van Sickle Road, Goshen, NY 10924, USA" }, { "location": { "latitude": 418465462, "longitude": -746859398 }, "name": "" }, { "location": { "latitude": 411733222, "longitude": -744228360 }, "name": "" }, { "location": { "latitude": 410248224, "longitude": -747127767 }, "name": "3 Hasta Way, Newton, NJ 07860, USA" }] grpc-1.30.2/examples/node/static_codegen/route_guide/route_guide_grpc_pb.js000066400000000000000000000114501370425124100271260ustar00rootroot00000000000000// GENERATED CODE -- DO NOT EDIT! // Original file comments: // Copyright 2015 gRPC 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 // // 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. // 'use strict'; var grpc = require('grpc'); var route_guide_pb = require('./route_guide_pb.js'); function serialize_Feature(arg) { if (!(arg instanceof route_guide_pb.Feature)) { throw new Error('Expected argument of type Feature'); } return new Buffer(arg.serializeBinary()); } function deserialize_Feature(buffer_arg) { return route_guide_pb.Feature.deserializeBinary(new Uint8Array(buffer_arg)); } function serialize_Point(arg) { if (!(arg instanceof route_guide_pb.Point)) { throw new Error('Expected argument of type Point'); } return new Buffer(arg.serializeBinary()); } function deserialize_Point(buffer_arg) { return route_guide_pb.Point.deserializeBinary(new Uint8Array(buffer_arg)); } function serialize_Rectangle(arg) { if (!(arg instanceof route_guide_pb.Rectangle)) { throw new Error('Expected argument of type Rectangle'); } return new Buffer(arg.serializeBinary()); } function deserialize_Rectangle(buffer_arg) { return route_guide_pb.Rectangle.deserializeBinary(new Uint8Array(buffer_arg)); } function serialize_RouteNote(arg) { if (!(arg instanceof route_guide_pb.RouteNote)) { throw new Error('Expected argument of type RouteNote'); } return new Buffer(arg.serializeBinary()); } function deserialize_RouteNote(buffer_arg) { return route_guide_pb.RouteNote.deserializeBinary(new Uint8Array(buffer_arg)); } function serialize_RouteSummary(arg) { if (!(arg instanceof route_guide_pb.RouteSummary)) { throw new Error('Expected argument of type RouteSummary'); } return new Buffer(arg.serializeBinary()); } function deserialize_RouteSummary(buffer_arg) { return route_guide_pb.RouteSummary.deserializeBinary(new Uint8Array(buffer_arg)); } // Interface exported by the server. var RouteGuideService = exports.RouteGuideService = { // A simple RPC. // // Obtains the feature at a given position. // // A feature with an empty name is returned if there's no feature at the given // position. getFeature: { path: '/routeguide.RouteGuide/GetFeature', requestStream: false, responseStream: false, requestType: route_guide_pb.Point, responseType: route_guide_pb.Feature, requestSerialize: serialize_Point, requestDeserialize: deserialize_Point, responseSerialize: serialize_Feature, responseDeserialize: deserialize_Feature, }, // A server-to-client streaming RPC. // // Obtains the Features available within the given Rectangle. Results are // streamed rather than returned at once (e.g. in a response message with a // repeated field), as the rectangle may cover a large area and contain a // huge number of features. listFeatures: { path: '/routeguide.RouteGuide/ListFeatures', requestStream: false, responseStream: true, requestType: route_guide_pb.Rectangle, responseType: route_guide_pb.Feature, requestSerialize: serialize_Rectangle, requestDeserialize: deserialize_Rectangle, responseSerialize: serialize_Feature, responseDeserialize: deserialize_Feature, }, // A client-to-server streaming RPC. // // Accepts a stream of Points on a route being traversed, returning a // RouteSummary when traversal is completed. recordRoute: { path: '/routeguide.RouteGuide/RecordRoute', requestStream: true, responseStream: false, requestType: route_guide_pb.Point, responseType: route_guide_pb.RouteSummary, requestSerialize: serialize_Point, requestDeserialize: deserialize_Point, responseSerialize: serialize_RouteSummary, responseDeserialize: deserialize_RouteSummary, }, // A Bidirectional streaming RPC. // // Accepts a stream of RouteNotes sent while a route is being traversed, // while receiving other RouteNotes (e.g. from other users). routeChat: { path: '/routeguide.RouteGuide/RouteChat', requestStream: true, responseStream: true, requestType: route_guide_pb.RouteNote, responseType: route_guide_pb.RouteNote, requestSerialize: serialize_RouteNote, requestDeserialize: deserialize_RouteNote, responseSerialize: serialize_RouteNote, responseDeserialize: deserialize_RouteNote, }, }; exports.RouteGuideClient = grpc.makeGenericClientConstructor(RouteGuideService); grpc-1.30.2/examples/node/static_codegen/route_guide/route_guide_pb.js000066400000000000000000000716231370425124100261230ustar00rootroot00000000000000/** * @fileoverview * @enhanceable * @public */ // GENERATED CODE -- DO NOT EDIT! var jspb = require('google-protobuf'); var goog = jspb; var global = Function('return this')(); goog.exportSymbol('proto.routeguide.Feature', null, global); goog.exportSymbol('proto.routeguide.Point', null, global); goog.exportSymbol('proto.routeguide.Rectangle', null, global); goog.exportSymbol('proto.routeguide.RouteNote', null, global); goog.exportSymbol('proto.routeguide.RouteSummary', null, global); /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a * server response, or constructed directly in Javascript. The array is used * in place and becomes part of the constructed object. It is not cloned. * If no data is provided, the constructed object will be empty, but still * valid. * @extends {jspb.Message} * @constructor */ proto.routeguide.Point = function(opt_data) { jspb.Message.initialize(this, opt_data, 0, -1, null, null); }; goog.inherits(proto.routeguide.Point, jspb.Message); if (goog.DEBUG && !COMPILED) { proto.routeguide.Point.displayName = 'proto.routeguide.Point'; } if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto suitable for use in Soy templates. * Field names that are reserved in JavaScript and will be renamed to pb_name. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. * @param {boolean=} opt_includeInstance Whether to include the JSPB instance * for transitional soy proto support: http://goto/soy-param-migration * @return {!Object} */ proto.routeguide.Point.prototype.toObject = function(opt_includeInstance) { return proto.routeguide.Point.toObject(opt_includeInstance, this); }; /** * Static version of the {@see toObject} method. * @param {boolean|undefined} includeInstance Whether to include the JSPB * instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.routeguide.Point} msg The msg instance to transform. * @return {!Object} */ proto.routeguide.Point.toObject = function(includeInstance, msg) { var f, obj = { latitude: msg.getLatitude(), longitude: msg.getLongitude() }; if (includeInstance) { obj.$jspbMessageInstance = msg; } return obj; }; } /** * Deserializes binary data (in protobuf wire format). * @param {jspb.ByteSource} bytes The bytes to deserialize. * @return {!proto.routeguide.Point} */ proto.routeguide.Point.deserializeBinary = function(bytes) { var reader = new jspb.BinaryReader(bytes); var msg = new proto.routeguide.Point; return proto.routeguide.Point.deserializeBinaryFromReader(msg, reader); }; /** * Deserializes binary data (in protobuf wire format) from the * given reader into the given message object. * @param {!proto.routeguide.Point} msg The message object to deserialize into. * @param {!jspb.BinaryReader} reader The BinaryReader to use. * @return {!proto.routeguide.Point} */ proto.routeguide.Point.deserializeBinaryFromReader = function(msg, reader) { while (reader.nextField()) { if (reader.isEndGroup()) { break; } var field = reader.getFieldNumber(); switch (field) { case 1: var value = /** @type {number} */ (reader.readInt32()); msg.setLatitude(value); break; case 2: var value = /** @type {number} */ (reader.readInt32()); msg.setLongitude(value); break; default: reader.skipField(); break; } } return msg; }; /** * Class method variant: serializes the given message to binary data * (in protobuf wire format), writing to the given BinaryWriter. * @param {!proto.routeguide.Point} message * @param {!jspb.BinaryWriter} writer */ proto.routeguide.Point.serializeBinaryToWriter = function(message, writer) { message.serializeBinaryToWriter(writer); }; /** * Serializes the message to binary data (in protobuf wire format). * @return {!Uint8Array} */ proto.routeguide.Point.prototype.serializeBinary = function() { var writer = new jspb.BinaryWriter(); this.serializeBinaryToWriter(writer); return writer.getResultBuffer(); }; /** * Serializes the message to binary data (in protobuf wire format), * writing to the given BinaryWriter. * @param {!jspb.BinaryWriter} writer */ proto.routeguide.Point.prototype.serializeBinaryToWriter = function (writer) { var f = undefined; f = this.getLatitude(); if (f !== 0) { writer.writeInt32( 1, f ); } f = this.getLongitude(); if (f !== 0) { writer.writeInt32( 2, f ); } }; /** * Creates a deep clone of this proto. No data is shared with the original. * @return {!proto.routeguide.Point} The clone. */ proto.routeguide.Point.prototype.cloneMessage = function() { return /** @type {!proto.routeguide.Point} */ (jspb.Message.cloneMessage(this)); }; /** * optional int32 latitude = 1; * @return {number} */ proto.routeguide.Point.prototype.getLatitude = function() { return /** @type {number} */ (jspb.Message.getFieldProto3(this, 1, 0)); }; /** @param {number} value */ proto.routeguide.Point.prototype.setLatitude = function(value) { jspb.Message.setField(this, 1, value); }; /** * optional int32 longitude = 2; * @return {number} */ proto.routeguide.Point.prototype.getLongitude = function() { return /** @type {number} */ (jspb.Message.getFieldProto3(this, 2, 0)); }; /** @param {number} value */ proto.routeguide.Point.prototype.setLongitude = function(value) { jspb.Message.setField(this, 2, value); }; /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a * server response, or constructed directly in Javascript. The array is used * in place and becomes part of the constructed object. It is not cloned. * If no data is provided, the constructed object will be empty, but still * valid. * @extends {jspb.Message} * @constructor */ proto.routeguide.Rectangle = function(opt_data) { jspb.Message.initialize(this, opt_data, 0, -1, null, null); }; goog.inherits(proto.routeguide.Rectangle, jspb.Message); if (goog.DEBUG && !COMPILED) { proto.routeguide.Rectangle.displayName = 'proto.routeguide.Rectangle'; } if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto suitable for use in Soy templates. * Field names that are reserved in JavaScript and will be renamed to pb_name. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. * @param {boolean=} opt_includeInstance Whether to include the JSPB instance * for transitional soy proto support: http://goto/soy-param-migration * @return {!Object} */ proto.routeguide.Rectangle.prototype.toObject = function(opt_includeInstance) { return proto.routeguide.Rectangle.toObject(opt_includeInstance, this); }; /** * Static version of the {@see toObject} method. * @param {boolean|undefined} includeInstance Whether to include the JSPB * instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.routeguide.Rectangle} msg The msg instance to transform. * @return {!Object} */ proto.routeguide.Rectangle.toObject = function(includeInstance, msg) { var f, obj = { lo: (f = msg.getLo()) && proto.routeguide.Point.toObject(includeInstance, f), hi: (f = msg.getHi()) && proto.routeguide.Point.toObject(includeInstance, f) }; if (includeInstance) { obj.$jspbMessageInstance = msg; } return obj; }; } /** * Deserializes binary data (in protobuf wire format). * @param {jspb.ByteSource} bytes The bytes to deserialize. * @return {!proto.routeguide.Rectangle} */ proto.routeguide.Rectangle.deserializeBinary = function(bytes) { var reader = new jspb.BinaryReader(bytes); var msg = new proto.routeguide.Rectangle; return proto.routeguide.Rectangle.deserializeBinaryFromReader(msg, reader); }; /** * Deserializes binary data (in protobuf wire format) from the * given reader into the given message object. * @param {!proto.routeguide.Rectangle} msg The message object to deserialize into. * @param {!jspb.BinaryReader} reader The BinaryReader to use. * @return {!proto.routeguide.Rectangle} */ proto.routeguide.Rectangle.deserializeBinaryFromReader = function(msg, reader) { while (reader.nextField()) { if (reader.isEndGroup()) { break; } var field = reader.getFieldNumber(); switch (field) { case 1: var value = new proto.routeguide.Point; reader.readMessage(value,proto.routeguide.Point.deserializeBinaryFromReader); msg.setLo(value); break; case 2: var value = new proto.routeguide.Point; reader.readMessage(value,proto.routeguide.Point.deserializeBinaryFromReader); msg.setHi(value); break; default: reader.skipField(); break; } } return msg; }; /** * Class method variant: serializes the given message to binary data * (in protobuf wire format), writing to the given BinaryWriter. * @param {!proto.routeguide.Rectangle} message * @param {!jspb.BinaryWriter} writer */ proto.routeguide.Rectangle.serializeBinaryToWriter = function(message, writer) { message.serializeBinaryToWriter(writer); }; /** * Serializes the message to binary data (in protobuf wire format). * @return {!Uint8Array} */ proto.routeguide.Rectangle.prototype.serializeBinary = function() { var writer = new jspb.BinaryWriter(); this.serializeBinaryToWriter(writer); return writer.getResultBuffer(); }; /** * Serializes the message to binary data (in protobuf wire format), * writing to the given BinaryWriter. * @param {!jspb.BinaryWriter} writer */ proto.routeguide.Rectangle.prototype.serializeBinaryToWriter = function (writer) { var f = undefined; f = this.getLo(); if (f != null) { writer.writeMessage( 1, f, proto.routeguide.Point.serializeBinaryToWriter ); } f = this.getHi(); if (f != null) { writer.writeMessage( 2, f, proto.routeguide.Point.serializeBinaryToWriter ); } }; /** * Creates a deep clone of this proto. No data is shared with the original. * @return {!proto.routeguide.Rectangle} The clone. */ proto.routeguide.Rectangle.prototype.cloneMessage = function() { return /** @type {!proto.routeguide.Rectangle} */ (jspb.Message.cloneMessage(this)); }; /** * optional Point lo = 1; * @return {proto.routeguide.Point} */ proto.routeguide.Rectangle.prototype.getLo = function() { return /** @type{proto.routeguide.Point} */ ( jspb.Message.getWrapperField(this, proto.routeguide.Point, 1)); }; /** @param {proto.routeguide.Point|undefined} value */ proto.routeguide.Rectangle.prototype.setLo = function(value) { jspb.Message.setWrapperField(this, 1, value); }; proto.routeguide.Rectangle.prototype.clearLo = function() { this.setLo(undefined); }; /** * optional Point hi = 2; * @return {proto.routeguide.Point} */ proto.routeguide.Rectangle.prototype.getHi = function() { return /** @type{proto.routeguide.Point} */ ( jspb.Message.getWrapperField(this, proto.routeguide.Point, 2)); }; /** @param {proto.routeguide.Point|undefined} value */ proto.routeguide.Rectangle.prototype.setHi = function(value) { jspb.Message.setWrapperField(this, 2, value); }; proto.routeguide.Rectangle.prototype.clearHi = function() { this.setHi(undefined); }; /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a * server response, or constructed directly in Javascript. The array is used * in place and becomes part of the constructed object. It is not cloned. * If no data is provided, the constructed object will be empty, but still * valid. * @extends {jspb.Message} * @constructor */ proto.routeguide.Feature = function(opt_data) { jspb.Message.initialize(this, opt_data, 0, -1, null, null); }; goog.inherits(proto.routeguide.Feature, jspb.Message); if (goog.DEBUG && !COMPILED) { proto.routeguide.Feature.displayName = 'proto.routeguide.Feature'; } if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto suitable for use in Soy templates. * Field names that are reserved in JavaScript and will be renamed to pb_name. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. * @param {boolean=} opt_includeInstance Whether to include the JSPB instance * for transitional soy proto support: http://goto/soy-param-migration * @return {!Object} */ proto.routeguide.Feature.prototype.toObject = function(opt_includeInstance) { return proto.routeguide.Feature.toObject(opt_includeInstance, this); }; /** * Static version of the {@see toObject} method. * @param {boolean|undefined} includeInstance Whether to include the JSPB * instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.routeguide.Feature} msg The msg instance to transform. * @return {!Object} */ proto.routeguide.Feature.toObject = function(includeInstance, msg) { var f, obj = { name: msg.getName(), location: (f = msg.getLocation()) && proto.routeguide.Point.toObject(includeInstance, f) }; if (includeInstance) { obj.$jspbMessageInstance = msg; } return obj; }; } /** * Deserializes binary data (in protobuf wire format). * @param {jspb.ByteSource} bytes The bytes to deserialize. * @return {!proto.routeguide.Feature} */ proto.routeguide.Feature.deserializeBinary = function(bytes) { var reader = new jspb.BinaryReader(bytes); var msg = new proto.routeguide.Feature; return proto.routeguide.Feature.deserializeBinaryFromReader(msg, reader); }; /** * Deserializes binary data (in protobuf wire format) from the * given reader into the given message object. * @param {!proto.routeguide.Feature} msg The message object to deserialize into. * @param {!jspb.BinaryReader} reader The BinaryReader to use. * @return {!proto.routeguide.Feature} */ proto.routeguide.Feature.deserializeBinaryFromReader = function(msg, reader) { while (reader.nextField()) { if (reader.isEndGroup()) { break; } var field = reader.getFieldNumber(); switch (field) { case 1: var value = /** @type {string} */ (reader.readString()); msg.setName(value); break; case 2: var value = new proto.routeguide.Point; reader.readMessage(value,proto.routeguide.Point.deserializeBinaryFromReader); msg.setLocation(value); break; default: reader.skipField(); break; } } return msg; }; /** * Class method variant: serializes the given message to binary data * (in protobuf wire format), writing to the given BinaryWriter. * @param {!proto.routeguide.Feature} message * @param {!jspb.BinaryWriter} writer */ proto.routeguide.Feature.serializeBinaryToWriter = function(message, writer) { message.serializeBinaryToWriter(writer); }; /** * Serializes the message to binary data (in protobuf wire format). * @return {!Uint8Array} */ proto.routeguide.Feature.prototype.serializeBinary = function() { var writer = new jspb.BinaryWriter(); this.serializeBinaryToWriter(writer); return writer.getResultBuffer(); }; /** * Serializes the message to binary data (in protobuf wire format), * writing to the given BinaryWriter. * @param {!jspb.BinaryWriter} writer */ proto.routeguide.Feature.prototype.serializeBinaryToWriter = function (writer) { var f = undefined; f = this.getName(); if (f.length > 0) { writer.writeString( 1, f ); } f = this.getLocation(); if (f != null) { writer.writeMessage( 2, f, proto.routeguide.Point.serializeBinaryToWriter ); } }; /** * Creates a deep clone of this proto. No data is shared with the original. * @return {!proto.routeguide.Feature} The clone. */ proto.routeguide.Feature.prototype.cloneMessage = function() { return /** @type {!proto.routeguide.Feature} */ (jspb.Message.cloneMessage(this)); }; /** * optional string name = 1; * @return {string} */ proto.routeguide.Feature.prototype.getName = function() { return /** @type {string} */ (jspb.Message.getFieldProto3(this, 1, "")); }; /** @param {string} value */ proto.routeguide.Feature.prototype.setName = function(value) { jspb.Message.setField(this, 1, value); }; /** * optional Point location = 2; * @return {proto.routeguide.Point} */ proto.routeguide.Feature.prototype.getLocation = function() { return /** @type{proto.routeguide.Point} */ ( jspb.Message.getWrapperField(this, proto.routeguide.Point, 2)); }; /** @param {proto.routeguide.Point|undefined} value */ proto.routeguide.Feature.prototype.setLocation = function(value) { jspb.Message.setWrapperField(this, 2, value); }; proto.routeguide.Feature.prototype.clearLocation = function() { this.setLocation(undefined); }; /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a * server response, or constructed directly in Javascript. The array is used * in place and becomes part of the constructed object. It is not cloned. * If no data is provided, the constructed object will be empty, but still * valid. * @extends {jspb.Message} * @constructor */ proto.routeguide.RouteNote = function(opt_data) { jspb.Message.initialize(this, opt_data, 0, -1, null, null); }; goog.inherits(proto.routeguide.RouteNote, jspb.Message); if (goog.DEBUG && !COMPILED) { proto.routeguide.RouteNote.displayName = 'proto.routeguide.RouteNote'; } if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto suitable for use in Soy templates. * Field names that are reserved in JavaScript and will be renamed to pb_name. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. * @param {boolean=} opt_includeInstance Whether to include the JSPB instance * for transitional soy proto support: http://goto/soy-param-migration * @return {!Object} */ proto.routeguide.RouteNote.prototype.toObject = function(opt_includeInstance) { return proto.routeguide.RouteNote.toObject(opt_includeInstance, this); }; /** * Static version of the {@see toObject} method. * @param {boolean|undefined} includeInstance Whether to include the JSPB * instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.routeguide.RouteNote} msg The msg instance to transform. * @return {!Object} */ proto.routeguide.RouteNote.toObject = function(includeInstance, msg) { var f, obj = { location: (f = msg.getLocation()) && proto.routeguide.Point.toObject(includeInstance, f), message: msg.getMessage() }; if (includeInstance) { obj.$jspbMessageInstance = msg; } return obj; }; } /** * Deserializes binary data (in protobuf wire format). * @param {jspb.ByteSource} bytes The bytes to deserialize. * @return {!proto.routeguide.RouteNote} */ proto.routeguide.RouteNote.deserializeBinary = function(bytes) { var reader = new jspb.BinaryReader(bytes); var msg = new proto.routeguide.RouteNote; return proto.routeguide.RouteNote.deserializeBinaryFromReader(msg, reader); }; /** * Deserializes binary data (in protobuf wire format) from the * given reader into the given message object. * @param {!proto.routeguide.RouteNote} msg The message object to deserialize into. * @param {!jspb.BinaryReader} reader The BinaryReader to use. * @return {!proto.routeguide.RouteNote} */ proto.routeguide.RouteNote.deserializeBinaryFromReader = function(msg, reader) { while (reader.nextField()) { if (reader.isEndGroup()) { break; } var field = reader.getFieldNumber(); switch (field) { case 1: var value = new proto.routeguide.Point; reader.readMessage(value,proto.routeguide.Point.deserializeBinaryFromReader); msg.setLocation(value); break; case 2: var value = /** @type {string} */ (reader.readString()); msg.setMessage(value); break; default: reader.skipField(); break; } } return msg; }; /** * Class method variant: serializes the given message to binary data * (in protobuf wire format), writing to the given BinaryWriter. * @param {!proto.routeguide.RouteNote} message * @param {!jspb.BinaryWriter} writer */ proto.routeguide.RouteNote.serializeBinaryToWriter = function(message, writer) { message.serializeBinaryToWriter(writer); }; /** * Serializes the message to binary data (in protobuf wire format). * @return {!Uint8Array} */ proto.routeguide.RouteNote.prototype.serializeBinary = function() { var writer = new jspb.BinaryWriter(); this.serializeBinaryToWriter(writer); return writer.getResultBuffer(); }; /** * Serializes the message to binary data (in protobuf wire format), * writing to the given BinaryWriter. * @param {!jspb.BinaryWriter} writer */ proto.routeguide.RouteNote.prototype.serializeBinaryToWriter = function (writer) { var f = undefined; f = this.getLocation(); if (f != null) { writer.writeMessage( 1, f, proto.routeguide.Point.serializeBinaryToWriter ); } f = this.getMessage(); if (f.length > 0) { writer.writeString( 2, f ); } }; /** * Creates a deep clone of this proto. No data is shared with the original. * @return {!proto.routeguide.RouteNote} The clone. */ proto.routeguide.RouteNote.prototype.cloneMessage = function() { return /** @type {!proto.routeguide.RouteNote} */ (jspb.Message.cloneMessage(this)); }; /** * optional Point location = 1; * @return {proto.routeguide.Point} */ proto.routeguide.RouteNote.prototype.getLocation = function() { return /** @type{proto.routeguide.Point} */ ( jspb.Message.getWrapperField(this, proto.routeguide.Point, 1)); }; /** @param {proto.routeguide.Point|undefined} value */ proto.routeguide.RouteNote.prototype.setLocation = function(value) { jspb.Message.setWrapperField(this, 1, value); }; proto.routeguide.RouteNote.prototype.clearLocation = function() { this.setLocation(undefined); }; /** * optional string message = 2; * @return {string} */ proto.routeguide.RouteNote.prototype.getMessage = function() { return /** @type {string} */ (jspb.Message.getFieldProto3(this, 2, "")); }; /** @param {string} value */ proto.routeguide.RouteNote.prototype.setMessage = function(value) { jspb.Message.setField(this, 2, value); }; /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a * server response, or constructed directly in Javascript. The array is used * in place and becomes part of the constructed object. It is not cloned. * If no data is provided, the constructed object will be empty, but still * valid. * @extends {jspb.Message} * @constructor */ proto.routeguide.RouteSummary = function(opt_data) { jspb.Message.initialize(this, opt_data, 0, -1, null, null); }; goog.inherits(proto.routeguide.RouteSummary, jspb.Message); if (goog.DEBUG && !COMPILED) { proto.routeguide.RouteSummary.displayName = 'proto.routeguide.RouteSummary'; } if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto suitable for use in Soy templates. * Field names that are reserved in JavaScript and will be renamed to pb_name. * To access a reserved field use, foo.pb_, eg, foo.pb_default. * For the list of reserved names please see: * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. * @param {boolean=} opt_includeInstance Whether to include the JSPB instance * for transitional soy proto support: http://goto/soy-param-migration * @return {!Object} */ proto.routeguide.RouteSummary.prototype.toObject = function(opt_includeInstance) { return proto.routeguide.RouteSummary.toObject(opt_includeInstance, this); }; /** * Static version of the {@see toObject} method. * @param {boolean|undefined} includeInstance Whether to include the JSPB * instance for transitional soy proto support: * http://goto/soy-param-migration * @param {!proto.routeguide.RouteSummary} msg The msg instance to transform. * @return {!Object} */ proto.routeguide.RouteSummary.toObject = function(includeInstance, msg) { var f, obj = { pointCount: msg.getPointCount(), featureCount: msg.getFeatureCount(), distance: msg.getDistance(), elapsedTime: msg.getElapsedTime() }; if (includeInstance) { obj.$jspbMessageInstance = msg; } return obj; }; } /** * Deserializes binary data (in protobuf wire format). * @param {jspb.ByteSource} bytes The bytes to deserialize. * @return {!proto.routeguide.RouteSummary} */ proto.routeguide.RouteSummary.deserializeBinary = function(bytes) { var reader = new jspb.BinaryReader(bytes); var msg = new proto.routeguide.RouteSummary; return proto.routeguide.RouteSummary.deserializeBinaryFromReader(msg, reader); }; /** * Deserializes binary data (in protobuf wire format) from the * given reader into the given message object. * @param {!proto.routeguide.RouteSummary} msg The message object to deserialize into. * @param {!jspb.BinaryReader} reader The BinaryReader to use. * @return {!proto.routeguide.RouteSummary} */ proto.routeguide.RouteSummary.deserializeBinaryFromReader = function(msg, reader) { while (reader.nextField()) { if (reader.isEndGroup()) { break; } var field = reader.getFieldNumber(); switch (field) { case 1: var value = /** @type {number} */ (reader.readInt32()); msg.setPointCount(value); break; case 2: var value = /** @type {number} */ (reader.readInt32()); msg.setFeatureCount(value); break; case 3: var value = /** @type {number} */ (reader.readInt32()); msg.setDistance(value); break; case 4: var value = /** @type {number} */ (reader.readInt32()); msg.setElapsedTime(value); break; default: reader.skipField(); break; } } return msg; }; /** * Class method variant: serializes the given message to binary data * (in protobuf wire format), writing to the given BinaryWriter. * @param {!proto.routeguide.RouteSummary} message * @param {!jspb.BinaryWriter} writer */ proto.routeguide.RouteSummary.serializeBinaryToWriter = function(message, writer) { message.serializeBinaryToWriter(writer); }; /** * Serializes the message to binary data (in protobuf wire format). * @return {!Uint8Array} */ proto.routeguide.RouteSummary.prototype.serializeBinary = function() { var writer = new jspb.BinaryWriter(); this.serializeBinaryToWriter(writer); return writer.getResultBuffer(); }; /** * Serializes the message to binary data (in protobuf wire format), * writing to the given BinaryWriter. * @param {!jspb.BinaryWriter} writer */ proto.routeguide.RouteSummary.prototype.serializeBinaryToWriter = function (writer) { var f = undefined; f = this.getPointCount(); if (f !== 0) { writer.writeInt32( 1, f ); } f = this.getFeatureCount(); if (f !== 0) { writer.writeInt32( 2, f ); } f = this.getDistance(); if (f !== 0) { writer.writeInt32( 3, f ); } f = this.getElapsedTime(); if (f !== 0) { writer.writeInt32( 4, f ); } }; /** * Creates a deep clone of this proto. No data is shared with the original. * @return {!proto.routeguide.RouteSummary} The clone. */ proto.routeguide.RouteSummary.prototype.cloneMessage = function() { return /** @type {!proto.routeguide.RouteSummary} */ (jspb.Message.cloneMessage(this)); }; /** * optional int32 point_count = 1; * @return {number} */ proto.routeguide.RouteSummary.prototype.getPointCount = function() { return /** @type {number} */ (jspb.Message.getFieldProto3(this, 1, 0)); }; /** @param {number} value */ proto.routeguide.RouteSummary.prototype.setPointCount = function(value) { jspb.Message.setField(this, 1, value); }; /** * optional int32 feature_count = 2; * @return {number} */ proto.routeguide.RouteSummary.prototype.getFeatureCount = function() { return /** @type {number} */ (jspb.Message.getFieldProto3(this, 2, 0)); }; /** @param {number} value */ proto.routeguide.RouteSummary.prototype.setFeatureCount = function(value) { jspb.Message.setField(this, 2, value); }; /** * optional int32 distance = 3; * @return {number} */ proto.routeguide.RouteSummary.prototype.getDistance = function() { return /** @type {number} */ (jspb.Message.getFieldProto3(this, 3, 0)); }; /** @param {number} value */ proto.routeguide.RouteSummary.prototype.setDistance = function(value) { jspb.Message.setField(this, 3, value); }; /** * optional int32 elapsed_time = 4; * @return {number} */ proto.routeguide.RouteSummary.prototype.getElapsedTime = function() { return /** @type {number} */ (jspb.Message.getFieldProto3(this, 4, 0)); }; /** @param {number} value */ proto.routeguide.RouteSummary.prototype.setElapsedTime = function(value) { jspb.Message.setField(this, 4, value); }; goog.object.extend(exports, proto.routeguide); grpc-1.30.2/examples/node/static_codegen/route_guide/route_guide_server.js000066400000000000000000000172441370425124100270270ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ var messages = require('./route_guide_pb'); var services = require('./route_guide_grpc_pb'); var fs = require('fs'); var parseArgs = require('minimist'); var path = require('path'); var _ = require('lodash'); var grpc = require('grpc'); var COORD_FACTOR = 1e7; /** * For simplicity, a point is a record type that looks like * {latitude: number, longitude: number}, and a feature is a record type that * looks like {name: string, location: point}. feature objects with name==='' * are points with no feature. */ /** * List of feature objects at points that have been requested so far. */ var feature_list = []; /** * Get a feature object at the given point, or creates one if it does not exist. * @param {point} point The point to check * @return {feature} The feature object at the point. Note that an empty name * indicates no feature */ function checkFeature(point) { var feature; // Check if there is already a feature object for the given point for (var i = 0; i < feature_list.length; i++) { feature = feature_list[i]; if (feature.getLocation().getLatitude() === point.getLatitude() && feature.getLocation().getLongitude() === point.getLongitude()) { return feature; } } var name = ''; feature = new messages.Feature(); feature.setName(name); feature.setLocation(point); return feature; } /** * getFeature request handler. Gets a request with a point, and responds with a * feature object indicating whether there is a feature at that point. * @param {EventEmitter} call Call object for the handler to process * @param {function(Error, feature)} callback Response callback */ function getFeature(call, callback) { callback(null, checkFeature(call.request)); } /** * listFeatures request handler. Gets a request with two points, and responds * with a stream of all features in the bounding box defined by those points. * @param {Writable} call Writable stream for responses with an additional * request property for the request value. */ function listFeatures(call) { var lo = call.request.getLo(); var hi = call.request.getHi(); var left = _.min([lo.getLongitude(), hi.getLongitude()]); var right = _.max([lo.getLongitude(), hi.getLongitude()]); var top = _.max([lo.getLatitude(), hi.getLatitude()]); var bottom = _.min([lo.getLatitude(), hi.getLatitude()]); // For each feature, check if it is in the given bounding box _.each(feature_list, function(feature) { if (feature.getName() === '') { return; } if (feature.getLocation().getLongitude() >= left && feature.getLocation().getLongitude() <= right && feature.getLocation().getLatitude() >= bottom && feature.getLocation().getLatitude() <= top) { call.write(feature); } }); call.end(); } /** * Calculate the distance between two points using the "haversine" formula. * The formula is based on http://mathforum.org/library/drmath/view/51879.html. * @param start The starting point * @param end The end point * @return The distance between the points in meters */ function getDistance(start, end) { function toRadians(num) { return num * Math.PI / 180; } var R = 6371000; // earth radius in metres var lat1 = toRadians(start.getLatitude() / COORD_FACTOR); var lat2 = toRadians(end.getLatitude() / COORD_FACTOR); var lon1 = toRadians(start.getLongitude() / COORD_FACTOR); var lon2 = toRadians(end.getLongitude() / COORD_FACTOR); var deltalat = lat2-lat1; var deltalon = lon2-lon1; var a = Math.sin(deltalat/2) * Math.sin(deltalat/2) + Math.cos(lat1) * Math.cos(lat2) * Math.sin(deltalon/2) * Math.sin(deltalon/2); var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); return R * c; } /** * recordRoute handler. Gets a stream of points, and responds with statistics * about the "trip": number of points, number of known features visited, total * distance traveled, and total time spent. * @param {Readable} call The request point stream. * @param {function(Error, routeSummary)} callback The callback to pass the * response to */ function recordRoute(call, callback) { var point_count = 0; var feature_count = 0; var distance = 0; var previous = null; // Start a timer var start_time = process.hrtime(); call.on('data', function(point) { point_count += 1; if (checkFeature(point).name !== '') { feature_count += 1; } /* For each point after the first, add the incremental distance from the * previous point to the total distance value */ if (previous != null) { distance += getDistance(previous, point); } previous = point; }); call.on('end', function() { var summary = new messages.RouteSummary(); summary.setPointCount(point_count); summary.setFeatureCount(feature_count); // Cast the distance to an integer summary.setDistance(distance|0); // End the timer summary.setElapsedTime(process.hrtime(start_time)[0]); callback(null, summary); }); } var route_notes = {}; /** * Turn the point into a dictionary key. * @param {point} point The point to use * @return {string} The key for an object */ function pointKey(point) { return point.getLatitude() + ' ' + point.getLongitude(); } /** * routeChat handler. Receives a stream of message/location pairs, and responds * with a stream of all previous messages at each of those locations. * @param {Duplex} call The stream for incoming and outgoing messages */ function routeChat(call) { call.on('data', function(note) { var key = pointKey(note.getLocation()); /* For each note sent, respond with all previous notes that correspond to * the same point */ if (route_notes.hasOwnProperty(key)) { _.each(route_notes[key], function(note) { call.write(note); }); } else { route_notes[key] = []; } // Then add the new note to the list route_notes[key].push(note); }); call.on('end', function() { call.end(); }); } /** * Get a new server with the handler functions in this file bound to the methods * it serves. * @return {Server} The new server object */ function getServer() { var server = new grpc.Server(); server.addService(services.RouteGuideService, { getFeature: getFeature, listFeatures: listFeatures, recordRoute: recordRoute, routeChat: routeChat }); return server; } if (require.main === module) { // If this is run as a script, start a server on an unused port var routeServer = getServer(); routeServer.bind('0.0.0.0:50051', grpc.ServerCredentials.createInsecure()); var argv = parseArgs(process.argv, { string: 'db_path' }); fs.readFile(path.resolve(argv.db_path), function(err, data) { if (err) throw err; // Transform the loaded features to Feature objects feature_list = _.map(JSON.parse(data), function(value) { var feature = new messages.Feature(); feature.setName(value.name); var location = new messages.Point(); location.setLatitude(value.location.latitude); location.setLongitude(value.location.longitude); feature.setLocation(location); return feature; }); routeServer.start(); }); } exports.getServer = getServer; grpc-1.30.2/examples/objective-c/000077500000000000000000000000001370425124100165375ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/BUILD000066400000000000000000000067771370425124100173420ustar00rootroot00000000000000# Copyright 2019 gRPC 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 # # 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. licenses(["notice"]) # 3-clause BSD package(default_visibility = ["//visibility:public"]) load("@com_github_grpc_grpc//bazel:objc_grpc_library.bzl", "objc_grpc_library") load("@build_bazel_rules_apple//apple:ios.bzl", "ios_application") load("@build_bazel_rules_apple//apple:macos.bzl", "macos_application") objc_grpc_library( name = "HelloWorld_grpc_proto", srcs = ["//examples:protos/helloworld.proto"], tags = ["manual"], deps = ["//examples:helloworld_proto"], ) # This one works with import "external/com_github_grpc_grpc/examples/protos/Helloworld.pbrpc.h" objc_grpc_library( name = "HelloWorld_grpc_proto_external", srcs = ["//external/com_github_grpc_grpc/examples:protos/helloworld.proto"], tags = ["manual"], deps = ["@com_github_grpc_grpc//examples:helloworld_proto"], ) objc_library( name = "HelloWorld-lib", srcs = glob(["helloworld/**/*.m"]), hdrs = glob(["helloworld/**/*.h"]), data = glob([ "helloworld/HelloWorld/Base.lproj/**", "helloworld/HelloWorld/Images.xcassets/**", ]), includes = ["helloworld/HelloWorld"], tags = ["manual"], deps = [":HelloWorld_grpc_proto"], ) ios_application( name = "HelloWorld", bundle_id = "Google.HelloWorld", families = [ "iphone", "ipad", ], infoplists = ["helloworld/HelloWorld/Info.plist"], minimum_os_version = "8.0", tags = ["manual"], deps = [":HelloWorld-lib"], ) objc_library( name = "HelloWorldMacos-lib", srcs = glob(["helloworld_macos/**/*.m"]), hdrs = glob(["helloworld_macos/**/*.h"]), data = glob([ "helloworld_macos/HelloWorld/Base.lproj/**", "helloworld_macos/HelloWorld/Images.xcassets/**", ]), includes = ["helloworld_macos/HelloWorld"], tags = ["manual"], deps = [":HelloWorld_grpc_proto"], ) macos_application( name = "HelloWorldMacos", bundle_id = "io.grpc.HelloWorld", entitlements = "helloworld_macos/HelloWorld/Helloworld.entitlements", infoplists = ["helloworld_macos/HelloWorld/Info.plist"], minimum_os_version = "10.13", tags = ["manual"], deps = [":HelloWorldMacos-lib"], ) objc_grpc_library( name = "RouteGuide", srcs = ["//examples:protos/route_guide.proto"], tags = ["manual"], deps = ["//examples:route_guide_proto"], ) objc_library( name = "RouteGuideClient-lib", srcs = glob(["route_guide/**/*.m"]), hdrs = glob(["route_guide/**/*.h"]), data = glob([ "route_guide/Misc/Base.lproj/**", "route_guide/Misc/Images.xcassets/**", "route_guide/route_guide_db.json", ]), includes = ["route_guide/Misc"], tags = ["manual"], deps = [":RouteGuide"], ) ios_application( name = "RouteGuideClient", bundle_id = "gRPC.RouteGuideClient", families = [ "iphone", "ipad", ], infoplists = ["route_guide/Misc/Info.plist"], minimum_os_version = "8.0", tags = ["manual"], deps = [":RouteGuideClient-lib"], ) grpc-1.30.2/examples/objective-c/auth_sample/000077500000000000000000000000001370425124100210415ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/auth_sample/AuthSample.xcodeproj/000077500000000000000000000000001370425124100251005ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/auth_sample/AuthSample.xcodeproj/project.pbxproj000066400000000000000000000365521370425124100301670ustar00rootroot00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 63E1E9821B28CB2100EF0978 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 63E1E9811B28CB2100EF0978 /* main.m */; }; 63E1E9851B28CB2100EF0978 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 63E1E9841B28CB2100EF0978 /* AppDelegate.m */; }; 63E1E9881B28CB2100EF0978 /* SelectUserViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 63E1E9871B28CB2100EF0978 /* SelectUserViewController.m */; }; 63E1E98B1B28CB2100EF0978 /* MakeRPCViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 63E1E98A1B28CB2100EF0978 /* MakeRPCViewController.m */; }; 63E1E98E1B28CB2100EF0978 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 63E1E98C1B28CB2100EF0978 /* Main.storyboard */; }; 63E1E9901B28CB2100EF0978 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 63E1E98F1B28CB2100EF0978 /* Images.xcassets */; }; 63F5DE481B28F5C100CDD07E /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 63F5DE471B28F5C100CDD07E /* GoogleService-Info.plist */; }; 832213142AB24DB816D02635 /* libPods-AuthSample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F217A6ECA7F5BD1D5FB5071B /* libPods-AuthSample.a */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 63E1E97C1B28CB2100EF0978 /* AuthSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AuthSample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 63E1E9801B28CB2100EF0978 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 63E1E9811B28CB2100EF0978 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 63E1E9831B28CB2100EF0978 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 63E1E9841B28CB2100EF0978 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 63E1E9861B28CB2100EF0978 /* SelectUserViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelectUserViewController.h; sourceTree = ""; }; 63E1E9871B28CB2100EF0978 /* SelectUserViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SelectUserViewController.m; sourceTree = ""; }; 63E1E9891B28CB2100EF0978 /* MakeRPCViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MakeRPCViewController.h; sourceTree = ""; }; 63E1E98A1B28CB2100EF0978 /* MakeRPCViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MakeRPCViewController.m; sourceTree = ""; }; 63E1E98D1B28CB2100EF0978 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 63E1E98F1B28CB2100EF0978 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 63F5DE471B28F5C100CDD07E /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; A387D6CECBCF2EAF2983033A /* Pods-AuthSample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AuthSample.debug.xcconfig"; path = "Pods/Target Support Files/Pods-AuthSample/Pods-AuthSample.debug.xcconfig"; sourceTree = ""; }; B444176735DA81FBE4B8B80C /* Pods-AuthSample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AuthSample.release.xcconfig"; path = "Pods/Target Support Files/Pods-AuthSample/Pods-AuthSample.release.xcconfig"; sourceTree = ""; }; F217A6ECA7F5BD1D5FB5071B /* libPods-AuthSample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-AuthSample.a"; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 63E1E9791B28CB2000EF0978 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 832213142AB24DB816D02635 /* libPods-AuthSample.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 021FA0E0B3F5D3D477DDAC10 /* Pods */ = { isa = PBXGroup; children = ( A387D6CECBCF2EAF2983033A /* Pods-AuthSample.debug.xcconfig */, B444176735DA81FBE4B8B80C /* Pods-AuthSample.release.xcconfig */, ); name = Pods; sourceTree = ""; }; 4F443572636F3D60F26E870D /* Frameworks */ = { isa = PBXGroup; children = ( F217A6ECA7F5BD1D5FB5071B /* libPods-AuthSample.a */, ); name = Frameworks; sourceTree = ""; }; 63E1E9731B28CB2000EF0978 = { isa = PBXGroup; children = ( 63E1E97E1B28CB2100EF0978 /* AuthSample */, 63E1E97D1B28CB2100EF0978 /* Products */, 021FA0E0B3F5D3D477DDAC10 /* Pods */, 4F443572636F3D60F26E870D /* Frameworks */, ); sourceTree = ""; }; 63E1E97D1B28CB2100EF0978 /* Products */ = { isa = PBXGroup; children = ( 63E1E97C1B28CB2100EF0978 /* AuthSample.app */, ); name = Products; sourceTree = ""; }; 63E1E97E1B28CB2100EF0978 /* AuthSample */ = { isa = PBXGroup; children = ( 63E1E9861B28CB2100EF0978 /* SelectUserViewController.h */, 63E1E9871B28CB2100EF0978 /* SelectUserViewController.m */, 63E1E9891B28CB2100EF0978 /* MakeRPCViewController.h */, 63E1E98A1B28CB2100EF0978 /* MakeRPCViewController.m */, 63E1E97F1B28CB2100EF0978 /* Supporting Files */, ); name = AuthSample; sourceTree = SOURCE_ROOT; }; 63E1E97F1B28CB2100EF0978 /* Supporting Files */ = { isa = PBXGroup; children = ( 63E1E98C1B28CB2100EF0978 /* Main.storyboard */, 63F5DE471B28F5C100CDD07E /* GoogleService-Info.plist */, 63E1E98F1B28CB2100EF0978 /* Images.xcassets */, 63E1E9801B28CB2100EF0978 /* Info.plist */, 63E1E9831B28CB2100EF0978 /* AppDelegate.h */, 63E1E9841B28CB2100EF0978 /* AppDelegate.m */, 63E1E9811B28CB2100EF0978 /* main.m */, ); name = "Supporting Files"; path = Misc; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 63E1E97B1B28CB2000EF0978 /* AuthSample */ = { isa = PBXNativeTarget; buildConfigurationList = 63E1E9A21B28CB2100EF0978 /* Build configuration list for PBXNativeTarget "AuthSample" */; buildPhases = ( DAABBA7B5788A39108D7CA83 /* [CP] Check Pods Manifest.lock */, 63E1E9781B28CB2000EF0978 /* Sources */, 63E1E9791B28CB2000EF0978 /* Frameworks */, 63E1E97A1B28CB2000EF0978 /* Resources */, AEFCCC69DD59CE8F6EB769D7 /* [CP] Copy Pods Resources */, D24F6598302C412D4B863D6F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); dependencies = ( ); name = AuthSample; productName = AuthSample; productReference = 63E1E97C1B28CB2100EF0978 /* AuthSample.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 63E1E9741B28CB2000EF0978 /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 0630; ORGANIZATIONNAME = gRPC; TargetAttributes = { 63E1E97B1B28CB2000EF0978 = { CreatedOnToolsVersion = 6.3.1; }; }; }; buildConfigurationList = 63E1E9771B28CB2000EF0978 /* Build configuration list for PBXProject "AuthSample" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = 63E1E9731B28CB2000EF0978; productRefGroup = 63E1E97D1B28CB2100EF0978 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 63E1E97B1B28CB2000EF0978 /* AuthSample */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 63E1E97A1B28CB2000EF0978 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 63E1E98E1B28CB2100EF0978 /* Main.storyboard in Resources */, 63E1E9901B28CB2100EF0978 /* Images.xcassets in Resources */, 63F5DE481B28F5C100CDD07E /* GoogleService-Info.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ AEFCCC69DD59CE8F6EB769D7 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "[CP] Copy Pods Resources"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-AuthSample/Pods-AuthSample-resources.sh\"\n"; showEnvVarsInLog = 0; }; D24F6598302C412D4B863D6F /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-AuthSample/Pods-AuthSample-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; DAABBA7B5788A39108D7CA83 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 63E1E9781B28CB2000EF0978 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 63E1E98B1B28CB2100EF0978 /* MakeRPCViewController.m in Sources */, 63E1E9851B28CB2100EF0978 /* AppDelegate.m in Sources */, 63E1E9881B28CB2100EF0978 /* SelectUserViewController.m in Sources */, 63E1E9821B28CB2100EF0978 /* main.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 63E1E98C1B28CB2100EF0978 /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( 63E1E98D1B28CB2100EF0978 /* Base */, ); name = Main.storyboard; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ 63E1E9A01B28CB2100EF0978 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.3; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; 63E1E9A11B28CB2100EF0978 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.3; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; name = Release; }; 63E1E9A31B28CB2100EF0978 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = A387D6CECBCF2EAF2983033A /* Pods-AuthSample.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = Misc/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 63E1E9A41B28CB2100EF0978 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = B444176735DA81FBE4B8B80C /* Pods-AuthSample.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = Misc/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 63E1E9771B28CB2000EF0978 /* Build configuration list for PBXProject "AuthSample" */ = { isa = XCConfigurationList; buildConfigurations = ( 63E1E9A01B28CB2100EF0978 /* Debug */, 63E1E9A11B28CB2100EF0978 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 63E1E9A21B28CB2100EF0978 /* Build configuration list for PBXNativeTarget "AuthSample" */ = { isa = XCConfigurationList; buildConfigurations = ( 63E1E9A31B28CB2100EF0978 /* Debug */, 63E1E9A41B28CB2100EF0978 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 63E1E9741B28CB2000EF0978 /* Project object */; } grpc-1.30.2/examples/objective-c/auth_sample/AuthSample.xcodeproj/project.xcworkspace/000077500000000000000000000000001370425124100310765ustar00rootroot00000000000000contents.xcworkspacedata000066400000000000000000000002331370425124100357570ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/auth_sample/AuthSample.xcodeproj/project.xcworkspace grpc-1.30.2/examples/objective-c/auth_sample/AuthSample.xcodeproj/xcshareddata/000077500000000000000000000000001370425124100275335ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/auth_sample/AuthSample.xcodeproj/xcshareddata/xcschemes/000077500000000000000000000000001370425124100315155ustar00rootroot00000000000000AuthSample.xcscheme000066400000000000000000000064131370425124100352260ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/auth_sample/AuthSample.xcodeproj/xcshareddata/xcschemes grpc-1.30.2/examples/objective-c/auth_sample/AuthTestService.podspec000066400000000000000000000043571370425124100255130ustar00rootroot00000000000000Pod::Spec.new do |s| s.name = "AuthTestService" s.version = "0.0.1" s.license = "Apache License, Version 2.0" s.authors = { 'gRPC contributors' => 'grpc-io@googlegroups.com' } s.homepage = "https://grpc.io/" s.summary = "AuthTestService example" s.source = { :git => 'https://github.com/grpc/grpc.git' } s.ios.deployment_target = "7.1" s.osx.deployment_target = "10.9" # Base directory where the .proto files are. src = "../../protos" # Run protoc with the Objective-C and gRPC plugins to generate protocol messages and gRPC clients. s.dependency "!ProtoCompiler-gRPCPlugin", "~> 1.0" # Pods directory corresponding to this app's Podfile, relative to the location of this podspec. pods_root = 'Pods' # Path where Cocoapods downloads protoc and the gRPC plugin. protoc_dir = "#{pods_root}/!ProtoCompiler" protoc = "#{protoc_dir}/protoc" plugin = "#{pods_root}/!ProtoCompiler-gRPCPlugin/grpc_objective_c_plugin" # Directory where the generated files will be placed. dir = "#{pods_root}/#{s.name}" s.prepare_command = <<-CMD mkdir -p #{dir} #{protoc} \ --plugin=protoc-gen-grpc=#{plugin} \ --objc_out=#{dir} \ --grpc_out=#{dir} \ -I #{src} \ -I #{protoc_dir} \ #{src}/auth_sample.proto CMD # Files generated by protoc s.subspec "Messages" do |ms| ms.source_files = "#{dir}/*.pbobjc.{h,m}", "#{dir}/**/*.pbobjc.{h,m}" ms.header_mappings_dir = dir ms.requires_arc = false # The generated files depend on the protobuf runtime. ms.dependency "Protobuf" end # Files generated by the gRPC plugin s.subspec "Services" do |ss| ss.source_files = "#{dir}/*.pbrpc.{h,m}", "#{dir}/**/*.pbrpc.{h,m}" ss.header_mappings_dir = dir ss.requires_arc = true # The generated files depend on the gRPC runtime, and on the files generated by protoc. ss.dependency "gRPC-ProtoRPC" ss.dependency "#{s.name}/Messages" end s.pod_target_xcconfig = { # This is needed by all pods that depend on Protobuf: 'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1', # This is needed by all pods that depend on gRPC-RxLibrary: 'CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES' => 'YES', } end grpc-1.30.2/examples/objective-c/auth_sample/MakeRPCViewController.h000066400000000000000000000014131370425124100253320ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #import extern NSString * const kTestScope; @interface MakeRPCViewController : UIViewController @property(weak, nonatomic) IBOutlet UILabel *mainLabel; @end grpc-1.30.2/examples/objective-c/auth_sample/MakeRPCViewController.m000066400000000000000000000062241370425124100253440ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #import "MakeRPCViewController.h" #import #import #import NSString * const kTestScope = @"https://www.googleapis.com/auth/xapi.zoo"; static NSString * const kTestHostAddress = @"grpc-test.sandbox.googleapis.com"; // Category for RPC errors to create the descriptions as we want them to appear on our view. @interface NSError (AuthSample) - (NSString *)UIDescription; @end @implementation NSError (AuthSample) - (NSString *)UIDescription { if (self.code == GRPCErrorCodeUnauthenticated) { // Authentication error. OAuth2 specifies we'll receive a challenge header. // |userInfo[kGRPCHeadersKey]| is the dictionary of response headers. NSString *challengeHeader = self.userInfo[kGRPCHeadersKey][@"www-authenticate"] ?: @""; return [@"Invalid credentials. Server challenge:\n" stringByAppendingString:challengeHeader]; } else { // Any other error. return [NSString stringWithFormat:@"Unexpected RPC error %li: %@", (long)self.code, self.localizedDescription]; } } @end @interface MakeRPCViewController () @end @implementation MakeRPCViewController - (dispatch_queue_t)dispatchQueue { return dispatch_get_main_queue(); } - (void)viewWillAppear:(BOOL)animated { // Create a service client and a proto request as usual. AUTHTestService *client = [[AUTHTestService alloc] initWithHost:kTestHostAddress]; AUTHRequest *request = [AUTHRequest message]; request.fillUsername = YES; request.fillOauthScope = YES; // Set the request header with call options GRPCMutableCallOptions *options = [[GRPCMutableCallOptions alloc] init]; options.oauth2AccessToken = GIDSignIn.sharedInstance.currentUser.authentication.accessToken; GRPCUnaryProtoCall *call = [client unaryCallWithMessage:request responseHandler:self callOptions:options]; [call start]; self.mainLabel.text = @"Waiting for RPC to complete..."; } - (void)didReceiveProtoMessage:(GPBMessage *)message { AUTHResponse *response = (AUTHResponse *)message; if (response) { // This test server responds with the email and scope of the access token it receives. self.mainLabel.text = [NSString stringWithFormat:@"Used scope: %@ on behalf of user %@", response.oauthScope, response.username]; } } - (void)didCloseWithTrailingMetadata:(NSDictionary *)trailingMetadata error:(NSError *)error { if (error) { self.mainLabel.text = error.UIDescription; } } @end grpc-1.30.2/examples/objective-c/auth_sample/Misc/000077500000000000000000000000001370425124100217345ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/auth_sample/Misc/AppDelegate.h000066400000000000000000000013471370425124100242650ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #import @interface AppDelegate : UIResponder @property (strong, nonatomic) UIWindow *window; @end grpc-1.30.2/examples/objective-c/auth_sample/Misc/AppDelegate.m000066400000000000000000000031201370425124100242610ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #import "AppDelegate.h" #import @implementation AppDelegate // As instructed in https://developers.google.com/identity/sign-in/ios/sign-in - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSError* configureError; [GGLContext.sharedInstance configureWithError: &configureError]; NSAssert(!configureError, @"Error configuring Google services: %@", configureError); return YES; } // As instructed in https://developers.google.com/identity/sign-in/ios/sign-in - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { // This will properly handle the URL that the application receives at the end of the // authentication process. return [GIDSignIn.sharedInstance handleURL:url sourceApplication:sourceApplication annotation:annotation]; } @end grpc-1.30.2/examples/objective-c/auth_sample/Misc/Base.lproj/000077500000000000000000000000001370425124100237335ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/auth_sample/Misc/Base.lproj/Main.storyboard000066400000000000000000000312321370425124100267320ustar00rootroot00000000000000 grpc-1.30.2/examples/objective-c/auth_sample/Misc/GoogleService-Info.plist000066400000000000000000000023461370425124100264440ustar00rootroot00000000000000 AD_UNIT_ID_FOR_BANNER_TEST redacted AD_UNIT_ID_FOR_INTERSTITIAL_TEST redacted CLIENT_ID 15087385131-lh9bpkiai9nls53uadju0if6k7un3uih.apps.googleusercontent.com REVERSED_CLIENT_ID com.googleusercontent.apps.15087385131-lh9bpkiai9nls53uadju0if6k7un3uih API_KEY redacted GCM_SENDER_ID redacted PLIST_VERSION 1 BUNDLE_ID io.grpc.AuthSample PROJECT_ID grpc-authsample STORAGE_BUCKET grpc-authsample.appspot.com IS_ADS_ENABLED IS_ANALYTICS_ENABLED IS_APPINVITE_ENABLED IS_GCM_ENABLED IS_SIGNIN_ENABLED GOOGLE_APP_ID 1:15087385131:ios:d547168abe3c362f DATABASE_URL https://grpc-authsample.firebaseio.com grpc-1.30.2/examples/objective-c/auth_sample/Misc/Images.xcassets/000077500000000000000000000000001370425124100247755ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/auth_sample/Misc/Images.xcassets/AppIcon.appiconset/000077500000000000000000000000001370425124100304725ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/auth_sample/Misc/Images.xcassets/AppIcon.appiconset/Contents.json000066400000000000000000000020651370425124100331650ustar00rootroot00000000000000{ "images" : [ { "idiom" : "iphone", "size" : "29x29", "scale" : "2x" }, { "idiom" : "iphone", "size" : "29x29", "scale" : "3x" }, { "idiom" : "iphone", "size" : "40x40", "scale" : "2x" }, { "idiom" : "iphone", "size" : "40x40", "scale" : "3x" }, { "idiom" : "iphone", "size" : "60x60", "scale" : "2x" }, { "idiom" : "iphone", "size" : "60x60", "scale" : "3x" }, { "idiom" : "ipad", "size" : "29x29", "scale" : "1x" }, { "idiom" : "ipad", "size" : "29x29", "scale" : "2x" }, { "idiom" : "ipad", "size" : "40x40", "scale" : "1x" }, { "idiom" : "ipad", "size" : "40x40", "scale" : "2x" }, { "idiom" : "ipad", "size" : "76x76", "scale" : "1x" }, { "idiom" : "ipad", "size" : "76x76", "scale" : "2x" } ], "info" : { "version" : 1, "author" : "xcode" } }grpc-1.30.2/examples/objective-c/auth_sample/Misc/Images.xcassets/first.imageset/000077500000000000000000000000001370425124100277215ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/auth_sample/Misc/Images.xcassets/first.imageset/Contents.json000066400000000000000000000002321370425124100324060ustar00rootroot00000000000000{ "images" : [ { "idiom" : "universal", "filename" : "first.pdf" } ], "info" : { "version" : 1, "author" : "xcode" } }grpc-1.30.2/examples/objective-c/auth_sample/Misc/Images.xcassets/first.imageset/first.pdf000066400000000000000000000046411370425124100315500ustar00rootroot00000000000000%PDF-1.3 % 4 0 obj << /Length 5 0 R /Filter /FlateDecode >> stream x+TT(Tw.6TH.V0d#SCS\mdgbajaK,L M ͌ $+" R psmJVPHR3 endstream endobj 5 0 obj 95 endobj 2 0 obj << /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R >> endobj 6 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 7 0 R >> >> endobj 8 0 obj << /Length 9 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xUoT>oR? XGůUS[IJ*$:7鶪O{7@Hkk?<kktq݋m6nƶد-mR;`zv x#=\% oYRڱ#&?>ҹЪn_;j;$}*}+(}'}/LtY"$].9⦅%{_a݊]hk5'SN{<_ t jM{-4%TńtY۟R6#v\喊x:'HO3^&0::m,L%3:qVE t]~Iv6Wٯ) |ʸ2]G4(6w‹$"AEv m[D;Vh[}چN|3HS:KtxU'D;77;_"e?Yqx endstream endobj 9 0 obj 1047 endobj 7 0 obj [ /ICCBased 8 0 R ] endobj 3 0 obj << /Type /Pages /MediaBox [0 0 30 30] /Count 1 /Kids [ 2 0 R ] >> endobj 10 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 11 0 obj (New Image) endobj 12 0 obj (Mac OS X 10.10 Quartz PDFContext) endobj 13 0 obj (Alex Raftis) endobj 14 0 obj (Opacity) endobj 15 0 obj (D:20140731232851Z00'00') endobj 1 0 obj << /Title 11 0 R /Author 13 0 R /Producer 12 0 R /Creator 14 0 R /CreationDate 15 0 R /ModDate 15 0 R >> endobj xref 0 16 0000000000 65535 f 0000001868 00000 n 0000000209 00000 n 0000001560 00000 n 0000000022 00000 n 0000000191 00000 n 0000000289 00000 n 0000001525 00000 n 0000000357 00000 n 0000001505 00000 n 0000001641 00000 n 0000001691 00000 n 0000001719 00000 n 0000001770 00000 n 0000001800 00000 n 0000001826 00000 n trailer << /Size 16 /Root 10 0 R /Info 1 0 R /ID [ ] >> startxref 1988 %%EOF grpc-1.30.2/examples/objective-c/auth_sample/Misc/Images.xcassets/second.imageset/000077500000000000000000000000001370425124100300455ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/auth_sample/Misc/Images.xcassets/second.imageset/Contents.json000066400000000000000000000002331370425124100325330ustar00rootroot00000000000000{ "images" : [ { "idiom" : "universal", "filename" : "second.pdf" } ], "info" : { "version" : 1, "author" : "xcode" } }grpc-1.30.2/examples/objective-c/auth_sample/Misc/Images.xcassets/second.imageset/second.pdf000066400000000000000000000045671370425124100320270ustar00rootroot00000000000000%PDF-1.3 % 4 0 obj << /Length 5 0 R /Filter /FlateDecode >> stream x+TT(Tw.6TH.V0d#3\D9@62rr9  iZ >8 endstream endobj 5 0 obj 53 endobj 2 0 obj << /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R >> endobj 6 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 7 0 R >> >> endobj 8 0 obj << /Length 9 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xUoT>oR? XGůUS[IJ*$:7鶪O{7@Hkk?<kktq݋m6nƶد-mR;`zv x#=\% oYRڱ#&?>ҹЪn_;j;$}*}+(}'}/LtY"$].9⦅%{_a݊]hk5'SN{<_ t jM{-4%TńtY۟R6#v\喊x:'HO3^&0::m,L%3:qVE t]~Iv6Wٯ) |ʸ2]G4(6w‹$"AEv m[D;Vh[}چN|3HS:KtxU'D;77;_"e?Yqx endstream endobj 9 0 obj 1047 endobj 7 0 obj [ /ICCBased 8 0 R ] endobj 3 0 obj << /Type /Pages /MediaBox [0 0 30 30] /Count 1 /Kids [ 2 0 R ] >> endobj 10 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 11 0 obj (New Image) endobj 12 0 obj (Mac OS X 10.10 Quartz PDFContext) endobj 13 0 obj (Alex Raftis) endobj 14 0 obj (Opacity) endobj 15 0 obj (D:20140731232851Z00'00') endobj 1 0 obj << /Title 11 0 R /Author 13 0 R /Producer 12 0 R /Creator 14 0 R /CreationDate 15 0 R /ModDate 15 0 R >> endobj xref 0 16 0000000000 65535 f 0000001826 00000 n 0000000167 00000 n 0000001518 00000 n 0000000022 00000 n 0000000149 00000 n 0000000247 00000 n 0000001483 00000 n 0000000315 00000 n 0000001463 00000 n 0000001599 00000 n 0000001649 00000 n 0000001677 00000 n 0000001728 00000 n 0000001758 00000 n 0000001784 00000 n trailer << /Size 16 /Root 10 0 R /Info 1 0 R /ID [ ] >> startxref 1946 %%EOF grpc-1.30.2/examples/objective-c/auth_sample/Misc/Info.plist000066400000000000000000000043431370425124100237100ustar00rootroot00000000000000 CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier io.grpc.$(PRODUCT_NAME:rfc1034identifier) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleURLTypes CFBundleTypeRole Editor CFBundleURLName REVERSED_CLIENT_ID CFBundleURLSchemes com.googleusercontent.apps.15087385131-lh9bpkiai9nls53uadju0if6k7un3uih CFBundleTypeRole Editor CFBundleURLName BUNDLE_ID CFBundleURLSchemes io.grpc.AuthSample CFBundleVersion 1 LSRequiresIPhoneOS UILaunchStoryboardName Main UIMainStoryboardFile Main UIRequiredDeviceCapabilities armv7 UIStatusBarTintParameters UINavigationBar Style UIBarStyleDefault Translucent UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UISupportedInterfaceOrientations~ipad UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight grpc-1.30.2/examples/objective-c/auth_sample/Misc/main.m000066400000000000000000000014451370425124100230420ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #import #import "AppDelegate.h" int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } grpc-1.30.2/examples/objective-c/auth_sample/Podfile000066400000000000000000000004561370425124100223530ustar00rootroot00000000000000source 'https://github.com/CocoaPods/Specs.git' platform :ios, '8.0' install! 'cocoapods', :deterministic_uuids => false target 'AuthSample' do # Depend on the generated AuthTestService library. pod 'AuthTestService', :path => '.' # Depend on Google's OAuth2 library pod 'Google/SignIn' end grpc-1.30.2/examples/objective-c/auth_sample/README.md000066400000000000000000000002521370425124100223170ustar00rootroot00000000000000# OAuth2 on gRPC: Objective-C This is the supporting code for the tutorial "[OAuth2 on gRPC: Objective-C](https://grpc.io/docs/tutorials/auth/oauth2-objective-c.html)." grpc-1.30.2/examples/objective-c/auth_sample/SelectUserViewController.h000066400000000000000000000017431370425124100261740ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #import #import @interface SelectUserViewController : UIViewController @property(weak, nonatomic) IBOutlet GIDSignInButton *signInButton; @property(weak, nonatomic) IBOutlet UIButton *signOutButton; @property(weak, nonatomic) IBOutlet UILabel *mainLabel; @property(weak, nonatomic) IBOutlet UILabel *subLabel; @end grpc-1.30.2/examples/objective-c/auth_sample/SelectUserViewController.m000066400000000000000000000037701370425124100262030ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #import "SelectUserViewController.h" #import "MakeRPCViewController.h" @implementation SelectUserViewController - (void)viewDidLoad { [super viewDidLoad]; self.signOutButton.layer.cornerRadius = 5; self.signOutButton.hidden = YES; // As instructed in https://developers.google.com/identity/sign-in/ios/sign-in GIDSignIn *signIn = GIDSignIn.sharedInstance; signIn.delegate = self; signIn.uiDelegate = self; // As instructed in https://developers.google.com/identity/sign-in/ios/additional-scopes if (![signIn.scopes containsObject:kTestScope]) { signIn.scopes = [signIn.scopes arrayByAddingObject:kTestScope]; } [signIn signInSilently]; } - (void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)user withError:(NSError *)error { if (error) { // The user probably cancelled the sign-in flow. return; } self.mainLabel.text = [NSString stringWithFormat:@"User: %@", user.profile.email]; NSString *scopes = [user.accessibleScopes componentsJoinedByString:@", "]; scopes = scopes.length ? scopes : @"(none)"; self.subLabel.text = [NSString stringWithFormat:@"Scopes: %@", scopes]; self.signInButton.hidden = YES; self.signOutButton.hidden = NO; } - (IBAction)didTapSignOut { [GIDSignIn.sharedInstance signOut]; self.mainLabel.text = @"Please sign in."; self.subLabel.text = @""; self.signInButton.hidden = NO; self.signOutButton.hidden = YES; } @end grpc-1.30.2/examples/objective-c/helloworld/000077500000000000000000000000001370425124100207125ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/helloworld/HelloWorld.podspec000066400000000000000000000043441370425124100243510ustar00rootroot00000000000000Pod::Spec.new do |s| s.name = "HelloWorld" s.version = "0.0.1" s.license = "Apache License, Version 2.0" s.authors = { 'gRPC contributors' => 'grpc-io@googlegroups.com' } s.homepage = "https://grpc.io/" s.summary = "HelloWorld example" s.source = { :git => 'https://github.com/grpc/grpc.git' } s.ios.deployment_target = "7.1" s.osx.deployment_target = "10.9" # Base directory where the .proto files are. src = "../../protos" # Run protoc with the Objective-C and gRPC plugins to generate protocol messages and gRPC clients. s.dependency "!ProtoCompiler-gRPCPlugin", "~> 1.0" # Pods directory corresponding to this app's Podfile, relative to the location of this podspec. pods_root = 'Pods' # Path where Cocoapods downloads protoc and the gRPC plugin. protoc_dir = "#{pods_root}/!ProtoCompiler" protoc = "#{protoc_dir}/protoc" plugin = "#{pods_root}/!ProtoCompiler-gRPCPlugin/grpc_objective_c_plugin" # Directory where the generated files will be placed. dir = "#{pods_root}/#{s.name}" s.prepare_command = <<-CMD mkdir -p #{dir} #{protoc} \ --plugin=protoc-gen-grpc=#{plugin} \ --objc_out=#{dir} \ --grpc_out=#{dir} \ -I #{src} \ -I #{protoc_dir} \ #{src}/helloworld.proto CMD # Files generated by protoc s.subspec "Messages" do |ms| ms.source_files = "#{dir}/*.pbobjc.{h,m}", "#{dir}/**/*.pbobjc.{h,m}" ms.header_mappings_dir = dir ms.requires_arc = false # The generated files depend on the protobuf runtime. ms.dependency "Protobuf" end # Files generated by the gRPC plugin s.subspec "Services" do |ss| ss.source_files = "#{dir}/*.pbrpc.{h,m}", "#{dir}/**/*.pbrpc.{h,m}" ss.header_mappings_dir = dir ss.requires_arc = true # The generated files depend on the gRPC runtime, and on the files generated by protoc. ss.dependency "gRPC-ProtoRPC" ss.dependency "#{s.name}/Messages" end s.pod_target_xcconfig = { # This is needed by all pods that depend on Protobuf: 'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1', # This is needed by all pods that depend on gRPC-RxLibrary: 'CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES' => 'YES', } end grpc-1.30.2/examples/objective-c/helloworld/HelloWorld.xcodeproj/000077500000000000000000000000001370425124100247615ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/helloworld/HelloWorld.xcodeproj/project.pbxproj000066400000000000000000000337641370425124100300520ustar00rootroot00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 5E3690661B2A23800040F884 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E3690651B2A23800040F884 /* main.m */; }; 5E3690691B2A23800040F884 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E3690681B2A23800040F884 /* AppDelegate.m */; }; 5E36906C1B2A23800040F884 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E36906B1B2A23800040F884 /* ViewController.m */; }; 5E36906F1B2A23800040F884 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5E36906D1B2A23800040F884 /* Main.storyboard */; }; 5E3690711B2A23800040F884 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5E3690701B2A23800040F884 /* Images.xcassets */; }; EF61CF6AE2536A31D47F0E63 /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B4E1F55F8A2EC95A0E7EE88 /* libPods-HelloWorld.a */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 0C432EF610DB15C0F47A66BB /* Pods-HelloWorld.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld.release.xcconfig"; path = "Pods/Target Support Files/Pods-HelloWorld/Pods-HelloWorld.release.xcconfig"; sourceTree = ""; }; 5E3690601B2A23800040F884 /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; }; 5E3690641B2A23800040F884 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 5E3690651B2A23800040F884 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 5E3690671B2A23800040F884 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 5E3690681B2A23800040F884 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 5E36906B1B2A23800040F884 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 5E36906E1B2A23800040F884 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 5E3690701B2A23800040F884 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 6B4E1F55F8A2EC95A0E7EE88 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HelloWorld.a"; sourceTree = BUILT_PRODUCTS_DIR; }; DBDE3E48389499064CD664B8 /* Pods-HelloWorld.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld.debug.xcconfig"; path = "Pods/Target Support Files/Pods-HelloWorld/Pods-HelloWorld.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 5E36905D1B2A23800040F884 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( EF61CF6AE2536A31D47F0E63 /* libPods-HelloWorld.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 5E3690571B2A23800040F884 = { isa = PBXGroup; children = ( 5E3690651B2A23800040F884 /* main.m */, 5E3690621B2A23800040F884 /* HelloWorld */, 5E3690611B2A23800040F884 /* Products */, BD9CE6458E7C4FF49A1DF69F /* Pods */, 66CEC7120220DDD2221DD075 /* Frameworks */, ); sourceTree = ""; }; 5E3690611B2A23800040F884 /* Products */ = { isa = PBXGroup; children = ( 5E3690601B2A23800040F884 /* HelloWorld.app */, ); name = Products; sourceTree = ""; }; 5E3690621B2A23800040F884 /* HelloWorld */ = { isa = PBXGroup; children = ( 5E3690631B2A23800040F884 /* Supporting Files */, ); path = HelloWorld; sourceTree = ""; }; 5E3690631B2A23800040F884 /* Supporting Files */ = { isa = PBXGroup; children = ( 5E3690701B2A23800040F884 /* Images.xcassets */, 5E36906D1B2A23800040F884 /* Main.storyboard */, 5E36906B1B2A23800040F884 /* ViewController.m */, 5E3690681B2A23800040F884 /* AppDelegate.m */, 5E3690671B2A23800040F884 /* AppDelegate.h */, 5E3690641B2A23800040F884 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; 66CEC7120220DDD2221DD075 /* Frameworks */ = { isa = PBXGroup; children = ( 6B4E1F55F8A2EC95A0E7EE88 /* libPods-HelloWorld.a */, ); name = Frameworks; sourceTree = ""; }; BD9CE6458E7C4FF49A1DF69F /* Pods */ = { isa = PBXGroup; children = ( DBDE3E48389499064CD664B8 /* Pods-HelloWorld.debug.xcconfig */, 0C432EF610DB15C0F47A66BB /* Pods-HelloWorld.release.xcconfig */, ); name = Pods; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 5E36905F1B2A23800040F884 /* HelloWorld */ = { isa = PBXNativeTarget; buildConfigurationList = 5E3690831B2A23810040F884 /* Build configuration list for PBXNativeTarget "HelloWorld" */; buildPhases = ( ACF9162361FB8F24C70657DE /* [CP] Check Pods Manifest.lock */, 5E36905C1B2A23800040F884 /* Sources */, 5E36905D1B2A23800040F884 /* Frameworks */, 5E36905E1B2A23800040F884 /* Resources */, 4C7D815378D98AB3BFC1A7D5 /* [CP] Copy Pods Resources */, BB76529986A8BFAF19A385B1 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); dependencies = ( ); name = HelloWorld; productName = HelloWorld; productReference = 5E3690601B2A23800040F884 /* HelloWorld.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 5E3690581B2A23800040F884 /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 0620; ORGANIZATIONNAME = Google; TargetAttributes = { 5E36905F1B2A23800040F884 = { CreatedOnToolsVersion = 6.2; DevelopmentTeam = EQHXZ8M8AV; ProvisioningStyle = Manual; }; }; }; buildConfigurationList = 5E36905B1B2A23800040F884 /* Build configuration list for PBXProject "HelloWorld" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = 5E3690571B2A23800040F884; productRefGroup = 5E3690611B2A23800040F884 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 5E36905F1B2A23800040F884 /* HelloWorld */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 5E36905E1B2A23800040F884 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 5E36906F1B2A23800040F884 /* Main.storyboard in Resources */, 5E3690711B2A23800040F884 /* Images.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ 4C7D815378D98AB3BFC1A7D5 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "[CP] Copy Pods Resources"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-resources.sh\"\n"; showEnvVarsInLog = 0; }; ACF9162361FB8F24C70657DE /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; BB76529986A8BFAF19A385B1 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 5E36905C1B2A23800040F884 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 5E36906C1B2A23800040F884 /* ViewController.m in Sources */, 5E3690691B2A23800040F884 /* AppDelegate.m in Sources */, 5E3690661B2A23800040F884 /* main.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 5E36906D1B2A23800040F884 /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( 5E36906E1B2A23800040F884 /* Base */, ); name = Main.storyboard; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ 5E3690811B2A23810040F884 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.2; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; 5E3690821B2A23810040F884 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.2; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; name = Release; }; 5E3690841B2A23810040F884 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = DBDE3E48389499064CD664B8 /* Pods-HelloWorld.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Manual; DEVELOPMENT_TEAM = EQHXZ8M8AV; INFOPLIST_FILE = HelloWorld/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = "Google Development"; }; name = Debug; }; 5E3690851B2A23810040F884 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 0C432EF610DB15C0F47A66BB /* Pods-HelloWorld.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Manual; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = HelloWorld/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 5E36905B1B2A23800040F884 /* Build configuration list for PBXProject "HelloWorld" */ = { isa = XCConfigurationList; buildConfigurations = ( 5E3690811B2A23810040F884 /* Debug */, 5E3690821B2A23810040F884 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 5E3690831B2A23810040F884 /* Build configuration list for PBXNativeTarget "HelloWorld" */ = { isa = XCConfigurationList; buildConfigurations = ( 5E3690841B2A23810040F884 /* Debug */, 5E3690851B2A23810040F884 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 5E3690581B2A23800040F884 /* Project object */; } grpc-1.30.2/examples/objective-c/helloworld/HelloWorld.xcodeproj/project.xcworkspace/000077500000000000000000000000001370425124100307575ustar00rootroot00000000000000contents.xcworkspacedata000066400000000000000000000002331370425124100356400ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/helloworld/HelloWorld.xcodeproj/project.xcworkspace grpc-1.30.2/examples/objective-c/helloworld/HelloWorld.xcodeproj/xcshareddata/000077500000000000000000000000001370425124100274145ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/helloworld/HelloWorld.xcodeproj/xcshareddata/xcschemes/000077500000000000000000000000001370425124100313765ustar00rootroot00000000000000HelloWorld.xcscheme000066400000000000000000000064131370425124100351170ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/helloworld/HelloWorld.xcodeproj/xcshareddata/xcschemes grpc-1.30.2/examples/objective-c/helloworld/HelloWorld/000077500000000000000000000000001370425124100227655ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/helloworld/HelloWorld/AppDelegate.h000066400000000000000000000013471370425124100253160ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #import @interface AppDelegate : UIResponder @property (strong, nonatomic) UIWindow *window; @end grpc-1.30.2/examples/objective-c/helloworld/HelloWorld/AppDelegate.m000066400000000000000000000012261370425124100253170ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #import "AppDelegate.h" @implementation AppDelegate @end grpc-1.30.2/examples/objective-c/helloworld/HelloWorld/Base.lproj/000077500000000000000000000000001370425124100247645ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/helloworld/HelloWorld/Base.lproj/Main.storyboard000066400000000000000000000030471370425124100277660ustar00rootroot00000000000000 grpc-1.30.2/examples/objective-c/helloworld/HelloWorld/Images.xcassets/000077500000000000000000000000001370425124100260265ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/helloworld/HelloWorld/Images.xcassets/AppIcon.appiconset/000077500000000000000000000000001370425124100315235ustar00rootroot00000000000000Contents.json000066400000000000000000000020651370425124100341370ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/helloworld/HelloWorld/Images.xcassets/AppIcon.appiconset{ "images" : [ { "idiom" : "iphone", "size" : "29x29", "scale" : "2x" }, { "idiom" : "iphone", "size" : "29x29", "scale" : "3x" }, { "idiom" : "iphone", "size" : "40x40", "scale" : "2x" }, { "idiom" : "iphone", "size" : "40x40", "scale" : "3x" }, { "idiom" : "iphone", "size" : "60x60", "scale" : "2x" }, { "idiom" : "iphone", "size" : "60x60", "scale" : "3x" }, { "idiom" : "ipad", "size" : "29x29", "scale" : "1x" }, { "idiom" : "ipad", "size" : "29x29", "scale" : "2x" }, { "idiom" : "ipad", "size" : "40x40", "scale" : "1x" }, { "idiom" : "ipad", "size" : "40x40", "scale" : "2x" }, { "idiom" : "ipad", "size" : "76x76", "scale" : "1x" }, { "idiom" : "ipad", "size" : "76x76", "scale" : "2x" } ], "info" : { "version" : 1, "author" : "xcode" } }grpc-1.30.2/examples/objective-c/helloworld/HelloWorld/Info.plist000066400000000000000000000027331370425124100247420ustar00rootroot00000000000000 CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier Google.$(PRODUCT_NAME:rfc1034identifier) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 LSRequiresIPhoneOS UILaunchStoryboardName Main UIMainStoryboardFile Main UIRequiredDeviceCapabilities armv7 UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UISupportedInterfaceOrientations~ipad UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight grpc-1.30.2/examples/objective-c/helloworld/HelloWorld/ViewController.m000066400000000000000000000013141370425124100261200ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #import @interface ViewController : UIViewController @end @implementation ViewController @end grpc-1.30.2/examples/objective-c/helloworld/Podfile000066400000000000000000000003471370425124100222230ustar00rootroot00000000000000source 'https://github.com/CocoaPods/Specs.git' platform :ios, '8.0' install! 'cocoapods', :deterministic_uuids => false target 'HelloWorld' do # Depend on the generated HelloWorld library. pod 'HelloWorld', :path => '.' end grpc-1.30.2/examples/objective-c/helloworld/README.md000066400000000000000000000070111370425124100221700ustar00rootroot00000000000000# gRPC in 3 minutes (Objective-C) There are currently two ways to build projects with the gRPC Objective-C library: * Cocoapods & Xcode * Bazel (experimental) ## Cocoapods ## Installation To run this example you should have [Cocoapods](https://cocoapods.org/#install) installed, as well as the relevant tools to generate the client library code (and a server in another language, for testing). You can obtain the latter by following [these setup instructions](https://github.com/grpc/homebrew-grpc). ### Hello Objective-C gRPC! Here's how to build and run the Objective-C implementation of the [Hello World](../../protos/helloworld.proto) example used in [Getting started](https://github.com/grpc/grpc/tree/master/examples). The example code for this and our other examples lives in the `examples` directory. Clone this repository at the [latest stable release tag](https://github.com/grpc/grpc/releases) to your local machine by running the following commands: ```sh $ git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc $ cd grpc $ git submodule update --init ``` Change your current directory to `examples/objective-c/helloworld` ```sh $ cd examples/objective-c/helloworld ``` #### Try it! To try the sample app, we need a gRPC server running locally. Let's compile and run, for example, the C++ server in this repository: ```shell $ pushd ../../cpp/helloworld $ make $ ./greeter_server & $ popd ``` Now have Cocoapods generate and install the client library for our .proto files: ```shell $ pod install ``` (This might have to compile OpenSSL, which takes around 15 minutes if Cocoapods doesn't have it yet on your computer's cache.) Finally, open the XCode workspace created by Cocoapods, and run the app. You can check the calling code in `main.m` and see the results in XCode's log console. The code sends a `HLWHelloRequest` containing the string "Objective-C" to a local server. The server responds with a `HLWHelloResponse`, which contains a string that is then output to the log. ## Bazel ### Installation To run the examples in Bazel, you should have [Bazel](https://docs.bazel.build/versions/master/install-os-x.html) installed. ### Hello Objective-C gRPC! Here's how to build and run the Objective-C implementation of the [Hello World](helloworld) example. The code for the Hello World example and others live in the `examples` directory. Clone this repository to your local machine by running the following commands: ```shell $ git clone --recursive https://github.com/grpc/grpc ``` Next, change your directory to `examples/objective-c` ```shell $ cd grpc/examples/objective-c ``` Now build the Hello World project: ```shell $ bazel build :HelloWorld ``` #### Try it! To run the Hello World sample properly, we need a local server. Let's compile and run the corresponding C++ server: ```shell $ bazel run //examples:greeter_server ``` To run the sample, you need to know the available simulator runtimes in your machine. You could either list the available runtimes yourself by running: ```shell $ xcrun simctl list ``` Or just try running the app and it will let you know what is available in the error messages: ```shell $ bazel run :HelloWorld ``` Note that running this command will build the project even if it is not built beforehand. Finally, launch the app with one of the available runtimes: ```shell $ bazel run :HelloWorld --ios_simulator_version='' --ios_sumlator_device='' ``` ## Tutorial You can find a more detailed tutorial in [gRPC Basics: Objective-C](https://grpc.io/docs/tutorials/basic/objective-c.html). grpc-1.30.2/examples/objective-c/helloworld/main.m000066400000000000000000000037661370425124100220300ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #import #import "AppDelegate.h" #import #import #import #if COCOAPODS #import #else #import "examples/protos/Helloworld.pbrpc.h" #endif static NSString * const kHostAddress = @"localhost:50051"; @interface HLWResponseHandler : NSObject @end // A response handler object dispatching messages to main queue @implementation HLWResponseHandler - (dispatch_queue_t)dispatchQueue { return dispatch_get_main_queue(); } - (void)didReceiveProtoMessage:(GPBMessage *)message { NSLog(@"%@", message); } @end int main(int argc, char * argv[]) { @autoreleasepool { HLWGreeter *client = [[HLWGreeter alloc] initWithHost:kHostAddress]; HLWHelloRequest *request = [HLWHelloRequest message]; request.name = @"Objective-C"; GRPCMutableCallOptions *options = [[GRPCMutableCallOptions alloc] init]; // this example does not use TLS (secure channel); use insecure channel instead options.transport = GRPCDefaultTransportImplList.core_insecure; options.userAgentPrefix = @"HelloWorld/1.0"; [[client sayHelloWithMessage:request responseHandler:[[HLWResponseHandler alloc] init] callOptions:options] start]; return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } grpc-1.30.2/examples/objective-c/helloworld_macos/000077500000000000000000000000001370425124100220745ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/helloworld_macos/HelloWorld.podspec000066400000000000000000000043441370425124100255330ustar00rootroot00000000000000Pod::Spec.new do |s| s.name = "HelloWorld" s.version = "0.0.1" s.license = "Apache License, Version 2.0" s.authors = { 'gRPC contributors' => 'grpc-io@googlegroups.com' } s.homepage = "https://grpc.io/" s.summary = "HelloWorld example" s.source = { :git => 'https://github.com/grpc/grpc.git' } s.ios.deployment_target = "7.1" s.osx.deployment_target = "10.9" # Base directory where the .proto files are. src = "../../protos" # Run protoc with the Objective-C and gRPC plugins to generate protocol messages and gRPC clients. s.dependency "!ProtoCompiler-gRPCPlugin", "~> 1.0" # Pods directory corresponding to this app's Podfile, relative to the location of this podspec. pods_root = 'Pods' # Path where Cocoapods downloads protoc and the gRPC plugin. protoc_dir = "#{pods_root}/!ProtoCompiler" protoc = "#{protoc_dir}/protoc" plugin = "#{pods_root}/!ProtoCompiler-gRPCPlugin/grpc_objective_c_plugin" # Directory where the generated files will be placed. dir = "#{pods_root}/#{s.name}" s.prepare_command = <<-CMD mkdir -p #{dir} #{protoc} \ --plugin=protoc-gen-grpc=#{plugin} \ --objc_out=#{dir} \ --grpc_out=#{dir} \ -I #{src} \ -I #{protoc_dir} \ #{src}/helloworld.proto CMD # Files generated by protoc s.subspec "Messages" do |ms| ms.source_files = "#{dir}/*.pbobjc.{h,m}", "#{dir}/**/*.pbobjc.{h,m}" ms.header_mappings_dir = dir ms.requires_arc = false # The generated files depend on the protobuf runtime. ms.dependency "Protobuf" end # Files generated by the gRPC plugin s.subspec "Services" do |ss| ss.source_files = "#{dir}/*.pbrpc.{h,m}", "#{dir}/**/*.pbrpc.{h,m}" ss.header_mappings_dir = dir ss.requires_arc = true # The generated files depend on the gRPC runtime, and on the files generated by protoc. ss.dependency "gRPC-ProtoRPC" ss.dependency "#{s.name}/Messages" end s.pod_target_xcconfig = { # This is needed by all pods that depend on Protobuf: 'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1', # This is needed by all pods that depend on gRPC-RxLibrary: 'CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES' => 'YES', } end grpc-1.30.2/examples/objective-c/helloworld_macos/HelloWorld.xcodeproj/000077500000000000000000000000001370425124100261435ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/helloworld_macos/HelloWorld.xcodeproj/project.pbxproj000066400000000000000000000372271370425124100312320ustar00rootroot00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 50; objects = { /* Begin PBXBuildFile section */ 5EF711A4215174880077496F /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EF711A3215174880077496F /* AppDelegate.m */; }; 5EF711A7215174880077496F /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EF711A6215174880077496F /* ViewController.m */; }; 5EF711A9215174890077496F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5EF711A8215174890077496F /* Assets.xcassets */; }; 5EF711AC215174890077496F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5EF711AA215174890077496F /* Main.storyboard */; }; 5EF711AF215174890077496F /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EF711AE215174890077496F /* main.m */; }; 827B966E84F6A63FD0F3F6BC /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 369D887F6054EBA486218C69 /* libPods-HelloWorld.a */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 2AAF8E8BA7DBFD2D3886AA25 /* Pods-HelloWorld.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld.release.xcconfig"; path = "Pods/Target Support Files/Pods-HelloWorld/Pods-HelloWorld.release.xcconfig"; sourceTree = ""; }; 369D887F6054EBA486218C69 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HelloWorld.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 5EF7119F215174870077496F /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; }; 5EF711A2215174880077496F /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 5EF711A3215174880077496F /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 5EF711A5215174880077496F /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 5EF711A6215174880077496F /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 5EF711A8215174890077496F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 5EF711AB215174890077496F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 5EF711AD215174890077496F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 5EF711AE215174890077496F /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 5EF711B0215174890077496F /* HelloWorld.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = HelloWorld.entitlements; sourceTree = ""; }; CA4699782F6344C8E67C9FEE /* Pods-HelloWorld.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld.debug.xcconfig"; path = "Pods/Target Support Files/Pods-HelloWorld/Pods-HelloWorld.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 5EF7119C215174870077496F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 827B966E84F6A63FD0F3F6BC /* libPods-HelloWorld.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 5EF71196215174870077496F = { isa = PBXGroup; children = ( 5EF711AE215174890077496F /* main.m */, 5EF711A1215174870077496F /* HelloWorld */, 5EF711A0215174870077496F /* Products */, 8D3EFBB796129582177142C4 /* Pods */, A986548CB5622AF6CC3ECCCE /* Frameworks */, ); sourceTree = ""; }; 5EF711A0215174870077496F /* Products */ = { isa = PBXGroup; children = ( 5EF7119F215174870077496F /* HelloWorld.app */, ); name = Products; sourceTree = ""; }; 5EF711A1215174870077496F /* HelloWorld */ = { isa = PBXGroup; children = ( 5EF711A2215174880077496F /* AppDelegate.h */, 5EF711A3215174880077496F /* AppDelegate.m */, 5EF711A5215174880077496F /* ViewController.h */, 5EF711A6215174880077496F /* ViewController.m */, 5EF711A8215174890077496F /* Assets.xcassets */, 5EF711AA215174890077496F /* Main.storyboard */, 5EF711AD215174890077496F /* Info.plist */, 5EF711B0215174890077496F /* HelloWorld.entitlements */, ); path = HelloWorld; sourceTree = ""; }; 8D3EFBB796129582177142C4 /* Pods */ = { isa = PBXGroup; children = ( CA4699782F6344C8E67C9FEE /* Pods-HelloWorld.debug.xcconfig */, 2AAF8E8BA7DBFD2D3886AA25 /* Pods-HelloWorld.release.xcconfig */, ); name = Pods; sourceTree = ""; }; A986548CB5622AF6CC3ECCCE /* Frameworks */ = { isa = PBXGroup; children = ( 369D887F6054EBA486218C69 /* libPods-HelloWorld.a */, ); name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 5EF7119E215174870077496F /* HelloWorld */ = { isa = PBXNativeTarget; buildConfigurationList = 5EF711B3215174890077496F /* Build configuration list for PBXNativeTarget "HelloWorld" */; buildPhases = ( 3694AEA482289A5BDD5EA5A4 /* [CP] Check Pods Manifest.lock */, 5EF7119B215174870077496F /* Sources */, 5EF7119C215174870077496F /* Frameworks */, 5EF7119D215174870077496F /* Resources */, DF5241368CCEAA9DC73E7EA8 /* [CP] Copy Pods Resources */, ); buildRules = ( ); dependencies = ( ); name = HelloWorld; productName = HelloWorld; productReference = 5EF7119F215174870077496F /* HelloWorld.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 5EF71197215174870077496F /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 0930; ORGANIZATIONNAME = gRPC; TargetAttributes = { 5EF7119E215174870077496F = { CreatedOnToolsVersion = 9.3; SystemCapabilities = { com.apple.Sandbox = { enabled = 0; }; }; }; }; }; buildConfigurationList = 5EF7119A215174870077496F /* Build configuration list for PBXProject "HelloWorld" */; compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = 5EF71196215174870077496F; productRefGroup = 5EF711A0215174870077496F /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 5EF7119E215174870077496F /* HelloWorld */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 5EF7119D215174870077496F /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 5EF711A9215174890077496F /* Assets.xcassets in Resources */, 5EF711AC215174890077496F /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ 3694AEA482289A5BDD5EA5A4 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( "${PODS_PODFILE_DIR_PATH}/Podfile.lock", "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( "$(DERIVED_FILE_DIR)/Pods-HelloWorld-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; DF5241368CCEAA9DC73E7EA8 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( "${SRCROOT}/Pods/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-resources.sh", "${PODS_CONFIGURATION_BUILD_DIR}/gRPC/gRPCCertificates.bundle", ); name = "[CP] Copy Pods Resources"; outputPaths = ( "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/gRPCCertificates.bundle", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-resources.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 5EF7119B215174870077496F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 5EF711A7215174880077496F /* ViewController.m in Sources */, 5EF711AF215174890077496F /* main.m in Sources */, 5EF711A4215174880077496F /* AppDelegate.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 5EF711AA215174890077496F /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( 5EF711AB215174890077496F /* Base */, ); name = Main.storyboard; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ 5EF711B1215174890077496F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "-"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.13; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; }; name = Debug; }; 5EF711B2215174890077496F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "-"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.13; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; }; name = Release; }; 5EF711B4215174890077496F /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = CA4699782F6344C8E67C9FEE /* Pods-HelloWorld.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; INFOPLIST_FILE = HelloWorld/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); PRODUCT_BUNDLE_IDENTIFIER = io.grpc.HelloWorld; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 5EF711B5215174890077496F /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 2AAF8E8BA7DBFD2D3886AA25 /* Pods-HelloWorld.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; INFOPLIST_FILE = HelloWorld/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); PRODUCT_BUNDLE_IDENTIFIER = io.grpc.HelloWorld; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 5EF7119A215174870077496F /* Build configuration list for PBXProject "HelloWorld" */ = { isa = XCConfigurationList; buildConfigurations = ( 5EF711B1215174890077496F /* Debug */, 5EF711B2215174890077496F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 5EF711B3215174890077496F /* Build configuration list for PBXNativeTarget "HelloWorld" */ = { isa = XCConfigurationList; buildConfigurations = ( 5EF711B4215174890077496F /* Debug */, 5EF711B5215174890077496F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 5EF71197215174870077496F /* Project object */; } grpc-1.30.2/examples/objective-c/helloworld_macos/HelloWorld/000077500000000000000000000000001370425124100241475ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/helloworld_macos/HelloWorld/AppDelegate.h000066400000000000000000000012671370425124100265010ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #import @interface AppDelegate : NSObject @end grpc-1.30.2/examples/objective-c/helloworld_macos/HelloWorld/AppDelegate.m000066400000000000000000000016641370425124100265070ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #import "AppDelegate.h" @interface AppDelegate () @end @implementation AppDelegate - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { // Insert code here to initialize your application } - (void)applicationWillTerminate:(NSNotification *)aNotification { // Insert code here to tear down your application } @end grpc-1.30.2/examples/objective-c/helloworld_macos/HelloWorld/Assets.xcassets/000077500000000000000000000000001370425124100272455ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/helloworld_macos/HelloWorld/Assets.xcassets/AppIcon.appiconset/000077500000000000000000000000001370425124100327425ustar00rootroot00000000000000Contents.json000066400000000000000000000016071370425124100353570ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/helloworld_macos/HelloWorld/Assets.xcassets/AppIcon.appiconset{ "images" : [ { "idiom" : "mac", "size" : "16x16", "scale" : "1x" }, { "idiom" : "mac", "size" : "16x16", "scale" : "2x" }, { "idiom" : "mac", "size" : "32x32", "scale" : "1x" }, { "idiom" : "mac", "size" : "32x32", "scale" : "2x" }, { "idiom" : "mac", "size" : "128x128", "scale" : "1x" }, { "idiom" : "mac", "size" : "128x128", "scale" : "2x" }, { "idiom" : "mac", "size" : "256x256", "scale" : "1x" }, { "idiom" : "mac", "size" : "256x256", "scale" : "2x" }, { "idiom" : "mac", "size" : "512x512", "scale" : "1x" }, { "idiom" : "mac", "size" : "512x512", "scale" : "2x" } ], "info" : { "version" : 1, "author" : "xcode" } }grpc-1.30.2/examples/objective-c/helloworld_macos/HelloWorld/Assets.xcassets/Contents.json000066400000000000000000000000761370425124100317400ustar00rootroot00000000000000{ "info" : { "version" : 1, "author" : "xcode" } }grpc-1.30.2/examples/objective-c/helloworld_macos/HelloWorld/Base.lproj/000077500000000000000000000000001370425124100261465ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/helloworld_macos/HelloWorld/Base.lproj/Main.storyboard000066400000000000000000001664401370425124100311570ustar00rootroot00000000000000 Default Left to Right Right to Left Default Left to Right Right to Left grpc-1.30.2/examples/objective-c/helloworld_macos/HelloWorld/HelloWorld.entitlements000066400000000000000000000002651370425124100306620ustar00rootroot00000000000000 grpc-1.30.2/examples/objective-c/helloworld_macos/HelloWorld/Info.plist000066400000000000000000000020021370425124100261110ustar00rootroot00000000000000 CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIconFile CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleVersion 1 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) NSHumanReadableCopyright Copyright © 2018 gRPC. All rights reserved. NSMainStoryboardFile Main NSPrincipalClass NSApplication grpc-1.30.2/examples/objective-c/helloworld_macos/HelloWorld/ViewController.h000066400000000000000000000012521370425124100272760ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #import @interface ViewController : NSViewController @end grpc-1.30.2/examples/objective-c/helloworld_macos/HelloWorld/ViewController.m000066400000000000000000000016311370425124100273040ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #import "ViewController.h" @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. } - (void)setRepresentedObject:(id)representedObject { [super setRepresentedObject:representedObject]; // Update the view, if already loaded. } @end grpc-1.30.2/examples/objective-c/helloworld_macos/Podfile000066400000000000000000000003521370425124100234010ustar00rootroot00000000000000source 'https://github.com/CocoaPods/Specs.git' platform :macos, '10.9' install! 'cocoapods', :deterministic_uuids => false target 'HelloWorld' do # Depend on the generated HelloWorld library. pod 'HelloWorld', :path => '.' end grpc-1.30.2/examples/objective-c/helloworld_macos/README.md000066400000000000000000000004531370425124100233550ustar00rootroot00000000000000# gRPC Objective-C Mac OS Hello World Example A hello world example app on Mac OS. Note that Mac OS is not a first class supported platform of gRPC Objective-C library. This example is only for reference. Refer to [Hello World Example](../helloworld) for instructions on installation and running. grpc-1.30.2/examples/objective-c/helloworld_macos/main.m000066400000000000000000000040171370425124100232000ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #import #import #import #import #if COCOAPODS #import #else #import "examples/protos/Helloworld.pbrpc.h" #endif static NSString * const kHostAddress = @"localhost:50051"; @interface HLWResponseHandler : NSObject @end // A response handler object dispatching messages to main queue @implementation HLWResponseHandler - (dispatch_queue_t)dispatchQueue { return dispatch_get_main_queue(); } - (void)didReceiveProtoMessage:(GPBMessage *)message { NSLog(@"%@", message); } @end int main(int argc, const char * argv[]) { @autoreleasepool { HLWGreeter *client = [[HLWGreeter alloc] initWithHost:kHostAddress]; HLWHelloRequest *request = [HLWHelloRequest message]; request.name = @"Objective-C"; GRPCMutableCallOptions *options = [[GRPCMutableCallOptions alloc] init]; // this example does not use TLS (secure channel); use insecure channel instead options.transport = GRPCDefaultTransportImplList.core_insecure; options.userAgentPrefix = @"HelloWorld/1.0"; GRPCUnaryProtoCall *call = [client sayHelloWithMessage:request responseHandler:[[HLWResponseHandler alloc] init] callOptions:options]; [call start]; } return NSApplicationMain(argc, argv); } grpc-1.30.2/examples/objective-c/route_guide/000077500000000000000000000000001370425124100210525ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/route_guide/Misc/000077500000000000000000000000001370425124100217455ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/route_guide/Misc/AppDelegate.h000066400000000000000000000013471370425124100242760ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #import @interface AppDelegate : UIResponder @property (strong, nonatomic) UIWindow *window; @end grpc-1.30.2/examples/objective-c/route_guide/Misc/AppDelegate.m000066400000000000000000000012261370425124100242770ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #import "AppDelegate.h" @implementation AppDelegate @end grpc-1.30.2/examples/objective-c/route_guide/Misc/Base.lproj/000077500000000000000000000000001370425124100237445ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/route_guide/Misc/Base.lproj/Main.storyboard000066400000000000000000000406141370425124100267470ustar00rootroot00000000000000 grpc-1.30.2/examples/objective-c/route_guide/Misc/Images.xcassets/000077500000000000000000000000001370425124100250065ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/route_guide/Misc/Images.xcassets/AppIcon.appiconset/000077500000000000000000000000001370425124100305035ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/route_guide/Misc/Images.xcassets/AppIcon.appiconset/Contents.json000066400000000000000000000020651370425124100331760ustar00rootroot00000000000000{ "images" : [ { "idiom" : "iphone", "size" : "29x29", "scale" : "2x" }, { "idiom" : "iphone", "size" : "29x29", "scale" : "3x" }, { "idiom" : "iphone", "size" : "40x40", "scale" : "2x" }, { "idiom" : "iphone", "size" : "40x40", "scale" : "3x" }, { "idiom" : "iphone", "size" : "60x60", "scale" : "2x" }, { "idiom" : "iphone", "size" : "60x60", "scale" : "3x" }, { "idiom" : "ipad", "size" : "29x29", "scale" : "1x" }, { "idiom" : "ipad", "size" : "29x29", "scale" : "2x" }, { "idiom" : "ipad", "size" : "40x40", "scale" : "1x" }, { "idiom" : "ipad", "size" : "40x40", "scale" : "2x" }, { "idiom" : "ipad", "size" : "76x76", "scale" : "1x" }, { "idiom" : "ipad", "size" : "76x76", "scale" : "2x" } ], "info" : { "version" : 1, "author" : "xcode" } }grpc-1.30.2/examples/objective-c/route_guide/Misc/Images.xcassets/first.imageset/000077500000000000000000000000001370425124100277325ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/route_guide/Misc/Images.xcassets/first.imageset/Contents.json000066400000000000000000000002321370425124100324170ustar00rootroot00000000000000{ "images" : [ { "idiom" : "universal", "filename" : "first.pdf" } ], "info" : { "version" : 1, "author" : "xcode" } }grpc-1.30.2/examples/objective-c/route_guide/Misc/Images.xcassets/first.imageset/first.pdf000066400000000000000000000046411370425124100315610ustar00rootroot00000000000000%PDF-1.3 % 4 0 obj << /Length 5 0 R /Filter /FlateDecode >> stream x+TT(Tw.6TH.V0d#SCS\mdgbajaK,L M ͌ $+" R psmJVPHR3 endstream endobj 5 0 obj 95 endobj 2 0 obj << /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R >> endobj 6 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 7 0 R >> >> endobj 8 0 obj << /Length 9 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xUoT>oR? XGůUS[IJ*$:7鶪O{7@Hkk?<kktq݋m6nƶد-mR;`zv x#=\% oYRڱ#&?>ҹЪn_;j;$}*}+(}'}/LtY"$].9⦅%{_a݊]hk5'SN{<_ t jM{-4%TńtY۟R6#v\喊x:'HO3^&0::m,L%3:qVE t]~Iv6Wٯ) |ʸ2]G4(6w‹$"AEv m[D;Vh[}چN|3HS:KtxU'D;77;_"e?Yqx endstream endobj 9 0 obj 1047 endobj 7 0 obj [ /ICCBased 8 0 R ] endobj 3 0 obj << /Type /Pages /MediaBox [0 0 30 30] /Count 1 /Kids [ 2 0 R ] >> endobj 10 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 11 0 obj (New Image) endobj 12 0 obj (Mac OS X 10.10 Quartz PDFContext) endobj 13 0 obj (Alex Raftis) endobj 14 0 obj (Opacity) endobj 15 0 obj (D:20140731232851Z00'00') endobj 1 0 obj << /Title 11 0 R /Author 13 0 R /Producer 12 0 R /Creator 14 0 R /CreationDate 15 0 R /ModDate 15 0 R >> endobj xref 0 16 0000000000 65535 f 0000001868 00000 n 0000000209 00000 n 0000001560 00000 n 0000000022 00000 n 0000000191 00000 n 0000000289 00000 n 0000001525 00000 n 0000000357 00000 n 0000001505 00000 n 0000001641 00000 n 0000001691 00000 n 0000001719 00000 n 0000001770 00000 n 0000001800 00000 n 0000001826 00000 n trailer << /Size 16 /Root 10 0 R /Info 1 0 R /ID [ ] >> startxref 1988 %%EOF grpc-1.30.2/examples/objective-c/route_guide/Misc/Images.xcassets/second.imageset/000077500000000000000000000000001370425124100300565ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/route_guide/Misc/Images.xcassets/second.imageset/Contents.json000066400000000000000000000002331370425124100325440ustar00rootroot00000000000000{ "images" : [ { "idiom" : "universal", "filename" : "second.pdf" } ], "info" : { "version" : 1, "author" : "xcode" } }grpc-1.30.2/examples/objective-c/route_guide/Misc/Images.xcassets/second.imageset/second.pdf000066400000000000000000000045671370425124100320400ustar00rootroot00000000000000%PDF-1.3 % 4 0 obj << /Length 5 0 R /Filter /FlateDecode >> stream x+TT(Tw.6TH.V0d#3\D9@62rr9  iZ >8 endstream endobj 5 0 obj 53 endobj 2 0 obj << /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R >> endobj 6 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 7 0 R >> >> endobj 8 0 obj << /Length 9 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xUoT>oR? XGůUS[IJ*$:7鶪O{7@Hkk?<kktq݋m6nƶد-mR;`zv x#=\% oYRڱ#&?>ҹЪn_;j;$}*}+(}'}/LtY"$].9⦅%{_a݊]hk5'SN{<_ t jM{-4%TńtY۟R6#v\喊x:'HO3^&0::m,L%3:qVE t]~Iv6Wٯ) |ʸ2]G4(6w‹$"AEv m[D;Vh[}چN|3HS:KtxU'D;77;_"e?Yqx endstream endobj 9 0 obj 1047 endobj 7 0 obj [ /ICCBased 8 0 R ] endobj 3 0 obj << /Type /Pages /MediaBox [0 0 30 30] /Count 1 /Kids [ 2 0 R ] >> endobj 10 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 11 0 obj (New Image) endobj 12 0 obj (Mac OS X 10.10 Quartz PDFContext) endobj 13 0 obj (Alex Raftis) endobj 14 0 obj (Opacity) endobj 15 0 obj (D:20140731232851Z00'00') endobj 1 0 obj << /Title 11 0 R /Author 13 0 R /Producer 12 0 R /Creator 14 0 R /CreationDate 15 0 R /ModDate 15 0 R >> endobj xref 0 16 0000000000 65535 f 0000001826 00000 n 0000000167 00000 n 0000001518 00000 n 0000000022 00000 n 0000000149 00000 n 0000000247 00000 n 0000001483 00000 n 0000000315 00000 n 0000001463 00000 n 0000001599 00000 n 0000001649 00000 n 0000001677 00000 n 0000001728 00000 n 0000001758 00000 n 0000001784 00000 n trailer << /Size 16 /Root 10 0 R /Info 1 0 R /ID [ ] >> startxref 1946 %%EOF grpc-1.30.2/examples/objective-c/route_guide/Misc/Info.plist000066400000000000000000000032401370425124100237140ustar00rootroot00000000000000 CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier gRPC.$(PRODUCT_NAME:rfc1034identifier) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 LSRequiresIPhoneOS UILaunchStoryboardName Main UIMainStoryboardFile Main UIRequiredDeviceCapabilities armv7 UIStatusBarTintParameters UINavigationBar Style UIBarStyleDefault Translucent UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UISupportedInterfaceOrientations~ipad UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight grpc-1.30.2/examples/objective-c/route_guide/Misc/main.m000066400000000000000000000014431370425124100230510ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #import #import "AppDelegate.h" int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } grpc-1.30.2/examples/objective-c/route_guide/Podfile000066400000000000000000000003551370425124100223620ustar00rootroot00000000000000source 'https://github.com/CocoaPods/Specs.git' platform :ios, '8.0' install! 'cocoapods', :deterministic_uuids => false target 'RouteGuideClient' do # Depend on the generated RouteGuide library. pod 'RouteGuide', :path => '.' end grpc-1.30.2/examples/objective-c/route_guide/README.md000066400000000000000000000002371370425124100223330ustar00rootroot00000000000000# gRPC Basics: Objective-C This is the supporting code for the tutorial "[gRPC Basics: Objective-C](https://grpc.io/docs/tutorials/basic/objective-c.html)." grpc-1.30.2/examples/objective-c/route_guide/RouteGuide.podspec000066400000000000000000000043451370425124100245130ustar00rootroot00000000000000Pod::Spec.new do |s| s.name = "RouteGuide" s.version = "0.0.1" s.license = "Apache License, Version 2.0" s.authors = { 'gRPC contributors' => 'grpc-io@googlegroups.com' } s.homepage = "https://grpc.io/" s.summary = "RouteGuide example" s.source = { :git => 'https://github.com/grpc/grpc.git' } s.ios.deployment_target = "7.1" s.osx.deployment_target = "10.9" # Base directory where the .proto files are. src = "../../protos" # Run protoc with the Objective-C and gRPC plugins to generate protocol messages and gRPC clients. s.dependency "!ProtoCompiler-gRPCPlugin", "~> 1.0" # Pods directory corresponding to this app's Podfile, relative to the location of this podspec. pods_root = 'Pods' # Path where Cocoapods downloads protoc and the gRPC plugin. protoc_dir = "#{pods_root}/!ProtoCompiler" protoc = "#{protoc_dir}/protoc" plugin = "#{pods_root}/!ProtoCompiler-gRPCPlugin/grpc_objective_c_plugin" # Directory where the generated files will be placed. dir = "#{pods_root}/#{s.name}" s.prepare_command = <<-CMD mkdir -p #{dir} #{protoc} \ --plugin=protoc-gen-grpc=#{plugin} \ --objc_out=#{dir} \ --grpc_out=#{dir} \ -I #{src} \ -I #{protoc_dir} \ #{src}/route_guide.proto CMD # Files generated by protoc s.subspec "Messages" do |ms| ms.source_files = "#{dir}/*.pbobjc.{h,m}", "#{dir}/**/*.pbobjc.{h,m}" ms.header_mappings_dir = dir ms.requires_arc = false # The generated files depend on the protobuf runtime. ms.dependency "Protobuf" end # Files generated by the gRPC plugin s.subspec "Services" do |ss| ss.source_files = "#{dir}/*.pbrpc.{h,m}", "#{dir}/**/*.pbrpc.{h,m}" ss.header_mappings_dir = dir ss.requires_arc = true # The generated files depend on the gRPC runtime, and on the files generated by protoc. ss.dependency "gRPC-ProtoRPC" ss.dependency "#{s.name}/Messages" end s.pod_target_xcconfig = { # This is needed by all pods that depend on Protobuf: 'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1', # This is needed by all pods that depend on gRPC-RxLibrary: 'CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES' => 'YES', } end grpc-1.30.2/examples/objective-c/route_guide/RouteGuideClient.xcodeproj/000077500000000000000000000000001370425124100262615ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/route_guide/RouteGuideClient.xcodeproj/project.pbxproj000066400000000000000000000353531370425124100313460ustar00rootroot00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 124E20A2FC8EAE54460D4ED2 /* libPods-RouteGuideClient.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 71CEE03D66D40FC37264D6E4 /* libPods-RouteGuideClient.a */; }; 632527831B1D0396003073D9 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 632527821B1D0396003073D9 /* main.m */; }; 632527861B1D0396003073D9 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 632527851B1D0396003073D9 /* AppDelegate.m */; }; 6325278F1B1D0396003073D9 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6325278D1B1D0396003073D9 /* Main.storyboard */; }; 632527911B1D0396003073D9 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 632527901B1D0396003073D9 /* Images.xcassets */; }; 6367B55B1B223AFA008861F5 /* route_guide_db.json in Resources */ = {isa = PBXBuildFile; fileRef = 6367B55A1B223AFA008861F5 /* route_guide_db.json */; }; 63A6015C1B1DAB5000FA5B86 /* ViewControllers.m in Sources */ = {isa = PBXBuildFile; fileRef = 63A6015B1B1DAB5000FA5B86 /* ViewControllers.m */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 6325277D1B1D0396003073D9 /* RouteGuideClient.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RouteGuideClient.app; sourceTree = BUILT_PRODUCTS_DIR; }; 632527811B1D0396003073D9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 632527821B1D0396003073D9 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 632527841B1D0396003073D9 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 632527851B1D0396003073D9 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 6325278E1B1D0396003073D9 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 632527901B1D0396003073D9 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 6367B55A1B223AFA008861F5 /* route_guide_db.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = route_guide_db.json; sourceTree = ""; }; 63A6015B1B1DAB5000FA5B86 /* ViewControllers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewControllers.m; sourceTree = ""; }; 71CEE03D66D40FC37264D6E4 /* libPods-RouteGuideClient.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RouteGuideClient.a"; sourceTree = BUILT_PRODUCTS_DIR; }; ADA4C647BAE906F79AD9A45E /* Pods-RouteGuideClient.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RouteGuideClient.debug.xcconfig"; path = "Pods/Target Support Files/Pods-RouteGuideClient/Pods-RouteGuideClient.debug.xcconfig"; sourceTree = ""; }; C83C5A54D1A4EA07569F1AED /* Pods-RouteGuideClient.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RouteGuideClient.release.xcconfig"; path = "Pods/Target Support Files/Pods-RouteGuideClient/Pods-RouteGuideClient.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 6325277A1B1D0395003073D9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 124E20A2FC8EAE54460D4ED2 /* libPods-RouteGuideClient.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 56849C29DC376BF4B902CD77 /* Pods */ = { isa = PBXGroup; children = ( ADA4C647BAE906F79AD9A45E /* Pods-RouteGuideClient.debug.xcconfig */, C83C5A54D1A4EA07569F1AED /* Pods-RouteGuideClient.release.xcconfig */, ); name = Pods; sourceTree = ""; }; 631C63891B1DBC41001295D5 /* Misc */ = { isa = PBXGroup; children = ( 632527841B1D0396003073D9 /* AppDelegate.h */, 632527851B1D0396003073D9 /* AppDelegate.m */, 632527901B1D0396003073D9 /* Images.xcassets */, 632527801B1D0396003073D9 /* Supporting Files */, ); path = Misc; sourceTree = ""; }; 632527741B1D0395003073D9 = { isa = PBXGroup; children = ( 6325277F1B1D0396003073D9 /* RouteGuideClient */, 6325277E1B1D0396003073D9 /* Products */, 56849C29DC376BF4B902CD77 /* Pods */, 7482B8A18481F7B13ADE4530 /* Frameworks */, ); sourceTree = ""; }; 6325277E1B1D0396003073D9 /* Products */ = { isa = PBXGroup; children = ( 6325277D1B1D0396003073D9 /* RouteGuideClient.app */, ); name = Products; sourceTree = ""; }; 6325277F1B1D0396003073D9 /* RouteGuideClient */ = { isa = PBXGroup; children = ( 63A6015B1B1DAB5000FA5B86 /* ViewControllers.m */, 6367B55A1B223AFA008861F5 /* route_guide_db.json */, 6325278D1B1D0396003073D9 /* Main.storyboard */, 631C63891B1DBC41001295D5 /* Misc */, ); name = RouteGuideClient; sourceTree = SOURCE_ROOT; }; 632527801B1D0396003073D9 /* Supporting Files */ = { isa = PBXGroup; children = ( 632527811B1D0396003073D9 /* Info.plist */, 632527821B1D0396003073D9 /* main.m */, ); name = "Supporting Files"; sourceTree = ""; }; 7482B8A18481F7B13ADE4530 /* Frameworks */ = { isa = PBXGroup; children = ( 71CEE03D66D40FC37264D6E4 /* libPods-RouteGuideClient.a */, ); name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 6325277C1B1D0395003073D9 /* RouteGuideClient */ = { isa = PBXNativeTarget; buildConfigurationList = 632527A31B1D0396003073D9 /* Build configuration list for PBXNativeTarget "RouteGuideClient" */; buildPhases = ( C6FC30AD2376EC04317237C5 /* [CP] Check Pods Manifest.lock */, 632527791B1D0395003073D9 /* Sources */, 6325277A1B1D0395003073D9 /* Frameworks */, 6325277B1B1D0395003073D9 /* Resources */, FFE0BCF30339E7A50A989EAB /* [CP] Copy Pods Resources */, B5388EC5A25E89021740B916 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); dependencies = ( ); name = RouteGuideClient; productName = RouteGuideClient; productReference = 6325277D1B1D0396003073D9 /* RouteGuideClient.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 632527751B1D0395003073D9 /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 0630; ORGANIZATIONNAME = gRPC; TargetAttributes = { 6325277C1B1D0395003073D9 = { CreatedOnToolsVersion = 6.3.1; }; }; }; buildConfigurationList = 632527781B1D0395003073D9 /* Build configuration list for PBXProject "RouteGuideClient" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = 632527741B1D0395003073D9; productRefGroup = 6325277E1B1D0396003073D9 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 6325277C1B1D0395003073D9 /* RouteGuideClient */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 6325277B1B1D0395003073D9 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 6325278F1B1D0396003073D9 /* Main.storyboard in Resources */, 632527911B1D0396003073D9 /* Images.xcassets in Resources */, 6367B55B1B223AFA008861F5 /* route_guide_db.json in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ B5388EC5A25E89021740B916 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-RouteGuideClient/Pods-RouteGuideClient-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; C6FC30AD2376EC04317237C5 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; FFE0BCF30339E7A50A989EAB /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "[CP] Copy Pods Resources"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-RouteGuideClient/Pods-RouteGuideClient-resources.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 632527791B1D0395003073D9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 632527861B1D0396003073D9 /* AppDelegate.m in Sources */, 632527831B1D0396003073D9 /* main.m in Sources */, 63A6015C1B1DAB5000FA5B86 /* ViewControllers.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 6325278D1B1D0396003073D9 /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( 6325278E1B1D0396003073D9 /* Base */, ); name = Main.storyboard; path = Misc; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ 632527A11B1D0396003073D9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.3; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; 632527A21B1D0396003073D9 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.3; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; name = Release; }; 632527A41B1D0396003073D9 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = ADA4C647BAE906F79AD9A45E /* Pods-RouteGuideClient.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = Misc/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 632527A51B1D0396003073D9 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = C83C5A54D1A4EA07569F1AED /* Pods-RouteGuideClient.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = Misc/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 632527781B1D0395003073D9 /* Build configuration list for PBXProject "RouteGuideClient" */ = { isa = XCConfigurationList; buildConfigurations = ( 632527A11B1D0396003073D9 /* Debug */, 632527A21B1D0396003073D9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 632527A31B1D0396003073D9 /* Build configuration list for PBXNativeTarget "RouteGuideClient" */ = { isa = XCConfigurationList; buildConfigurations = ( 632527A41B1D0396003073D9 /* Debug */, 632527A51B1D0396003073D9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 632527751B1D0395003073D9 /* Project object */; } grpc-1.30.2/examples/objective-c/route_guide/RouteGuideClient.xcodeproj/project.xcworkspace/000077500000000000000000000000001370425124100322575ustar00rootroot00000000000000contents.xcworkspacedata000066400000000000000000000002411370425124100371370ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/route_guide/RouteGuideClient.xcodeproj/project.xcworkspace grpc-1.30.2/examples/objective-c/route_guide/RouteGuideClient.xcodeproj/xcshareddata/000077500000000000000000000000001370425124100307145ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/route_guide/RouteGuideClient.xcodeproj/xcshareddata/xcschemes/000077500000000000000000000000001370425124100326765ustar00rootroot00000000000000RouteGuideClient.xcscheme000066400000000000000000000065231370425124100375610ustar00rootroot00000000000000grpc-1.30.2/examples/objective-c/route_guide/RouteGuideClient.xcodeproj/xcshareddata/xcschemes grpc-1.30.2/examples/objective-c/route_guide/ViewControllers.m000066400000000000000000000306261370425124100244000ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #import #if COCOAPODS #import #else #import "examples/protos/RouteGuide.pbrpc.h" #endif #import static NSString *const kHostAddress = @"localhost:50051"; /** Category to override RTGPoint's description. */ @interface RTGPoint (Description) - (NSString *)description; @end @implementation RTGPoint (Description) - (NSString *)description { NSString *verticalDirection = self.latitude >= 0 ? @"N" : @"S"; NSString *horizontalDirection = self.longitude >= 0 ? @"E" : @"W"; return [NSString stringWithFormat:@"%.02f%@ %.02f%@", abs(self.latitude) / 1E7f, verticalDirection, abs(self.longitude) / 1E7f, horizontalDirection]; } @end /** Category to give RTGRouteNote a convenience constructor. */ @interface RTGRouteNote (Constructors) + (instancetype)noteWithMessage:(NSString *)message latitude:(float)latitude longitude:(float)longitude; @end @implementation RTGRouteNote (Constructors) + (instancetype)noteWithMessage:(NSString *)message latitude:(float)latitude longitude:(float)longitude { RTGRouteNote *note = [self message]; note.message = message; note.location.latitude = (int32_t)latitude * 1E7; note.location.longitude = (int32_t)longitude * 1E7; return note; } @end #pragma mark Demo: Get Feature /** * Run the getFeature demo. Calls getFeature with a point known to have a feature and a point known * not to have a feature. */ @interface GetFeatureViewController : UIViewController @property(weak, nonatomic) IBOutlet UILabel *outputLabel; @end @implementation GetFeatureViewController { RTGRouteGuide *_service; } - (void)execRequest { void (^handler)(RTGFeature *response, NSError *error) = ^(RTGFeature *response, NSError *error) { // TODO(makdharma): Remove boilerplate by consolidating into one log function. if (response.name.length) { NSString *str = [NSString stringWithFormat:@"%@\nFound feature called %@ at %@.", self.outputLabel.text, response.location, response.name]; self.outputLabel.text = str; NSLog(@"Found feature called %@ at %@.", response.name, response.location); } else if (response) { NSString *str = [NSString stringWithFormat:@"%@\nFound no features at %@", self.outputLabel.text, response.location]; self.outputLabel.text = str; NSLog(@"Found no features at %@", response.location); } else { NSString *str = [NSString stringWithFormat:@"%@\nRPC error: %@", self.outputLabel.text, error]; self.outputLabel.text = str; NSLog(@"RPC error: %@", error); } }; RTGPoint *point = [RTGPoint message]; point.latitude = 409146138; point.longitude = -746188906; GRPCUnaryProtoCall *call = [_service getFeatureWithMessage:point responseHandler:[[GRPCUnaryResponseHandler alloc] initWithResponseHandler:handler responseDispatchQueue:nil] callOptions:nil]; [call start]; call = [_service getFeatureWithMessage:[RTGPoint message] responseHandler:[[GRPCUnaryResponseHandler alloc] initWithResponseHandler:handler responseDispatchQueue:nil] callOptions:nil]; [call start]; } - (void)viewDidLoad { [super viewDidLoad]; GRPCMutableCallOptions *options = [[GRPCMutableCallOptions alloc] init]; options.transport = GRPCDefaultTransportImplList.core_insecure; _service = [[RTGRouteGuide alloc] initWithHost:kHostAddress callOptions:options]; } - (void)viewDidAppear:(BOOL)animated { self.outputLabel.text = @"RPC log:"; self.outputLabel.numberOfLines = 0; self.outputLabel.font = [UIFont fontWithName:@"Helvetica Neue" size:8.0]; [self execRequest]; } @end #pragma mark Demo: List Features /** * Run the listFeatures demo. Calls listFeatures with a rectangle containing all of the features in * the pre-generated database. Prints each response as it comes in. */ @interface ListFeaturesViewController : UIViewController @property(weak, nonatomic) IBOutlet UILabel *outputLabel; @end @implementation ListFeaturesViewController { RTGRouteGuide *_service; } - (dispatch_queue_t)dispatchQueue { return dispatch_get_main_queue(); } - (void)execRequest { RTGRectangle *rectangle = [RTGRectangle message]; rectangle.lo.latitude = 405E6; rectangle.lo.longitude = -750E6; rectangle.hi.latitude = 410E6; rectangle.hi.longitude = -745E6; NSLog(@"Looking for features between %@ and %@", rectangle.lo, rectangle.hi); GRPCUnaryProtoCall *call = [_service listFeaturesWithMessage:rectangle responseHandler:self callOptions:nil]; [call start]; } - (void)didReceiveProtoMessage:(GPBMessage *)message { RTGFeature *response = (RTGFeature *)message; if (response) { NSString *str = [NSString stringWithFormat:@"%@\nFound feature at %@ called %@.", self.outputLabel.text, response.location, response.name]; self.outputLabel.text = str; NSLog(@"Found feature at %@ called %@.", response.location, response.name); } } - (void)didCloseWithTrailingMetadata:(NSDictionary *)trailingMetadata error:(NSError *)error { if (error) { NSString *str = [NSString stringWithFormat:@"%@\nRPC error: %@", self.outputLabel.text, error]; self.outputLabel.text = str; NSLog(@"RPC error: %@", error); } } - (void)viewDidLoad { [super viewDidLoad]; GRPCMutableCallOptions *options = [[GRPCMutableCallOptions alloc] init]; options.transport = GRPCDefaultTransportImplList.core_insecure; _service = [[RTGRouteGuide alloc] initWithHost:kHostAddress callOptions:options]; } - (void)viewDidAppear:(BOOL)animated { self.outputLabel.text = @"RPC log:"; self.outputLabel.numberOfLines = 0; self.outputLabel.font = [UIFont fontWithName:@"Helvetica Neue" size:8.0]; [self execRequest]; } @end #pragma mark Demo: Record Route /** * Run the recordRoute demo. Sends several randomly chosen points from the pre-generated feature * database with a variable delay in between. Prints the statistics when they are sent from the * server. */ @interface RecordRouteViewController : UIViewController @property(weak, nonatomic) IBOutlet UILabel *outputLabel; @end @implementation RecordRouteViewController { RTGRouteGuide *_service; } - (void)execRequest { NSString *dataBasePath = [NSBundle.mainBundle pathForResource:@"route_guide_db" ofType:@"json"]; NSData *dataBaseContent = [NSData dataWithContentsOfFile:dataBasePath]; NSError *error; NSArray *features = [NSJSONSerialization JSONObjectWithData:dataBaseContent options:0 error:&error]; if (error) { NSLog(@"Error reading database."); NSString *str = @"Error reading database."; self.outputLabel.text = str; return; } void (^handler)(RTGRouteSummary *response, NSError *error) = ^(RTGRouteSummary *response, NSError *error) { if (response) { NSString *str = [NSString stringWithFormat:@"%@\nFinished trip with %i points\nPassed %i features\n" "Travelled %i meters\nIt took %i seconds", self.outputLabel.text, response.pointCount, response.featureCount, response.distance, response.elapsedTime]; self.outputLabel.text = str; NSLog(@"Finished trip with %i points", response.pointCount); NSLog(@"Passed %i features", response.featureCount); NSLog(@"Travelled %i meters", response.distance); NSLog(@"It took %i seconds", response.elapsedTime); } else { NSString *str = [NSString stringWithFormat:@"%@\nRPC error: %@", self.outputLabel.text, error]; self.outputLabel.text = str; NSLog(@"RPC error: %@", error); } }; // We can use unary response handler here because, despite the requests being a stream, the // response of the RPC is unary. GRPCStreamingProtoCall *call = [_service recordRouteWithResponseHandler:[[GRPCUnaryResponseHandler alloc] initWithResponseHandler:handler responseDispatchQueue:nil] callOptions:nil]; [call start]; for (id feature in features) { RTGPoint *location = [RTGPoint message]; location.longitude = [((NSNumber *)feature[@"location"][@"longitude"]) intValue]; location.latitude = [((NSNumber *)feature[@"location"][@"latitude"]) intValue]; NSString *str = [NSString stringWithFormat:@"%@\nVisiting point %@", self.outputLabel.text, location]; self.outputLabel.text = str; NSLog(@"Visiting point %@", location); [call writeMessage:location]; } [call finish]; } - (void)viewDidLoad { [super viewDidLoad]; GRPCMutableCallOptions *options = [[GRPCMutableCallOptions alloc] init]; options.transport = GRPCDefaultTransportImplList.core_insecure; _service = [[RTGRouteGuide alloc] initWithHost:kHostAddress callOptions:options]; } - (void)viewDidAppear:(BOOL)animated { self.outputLabel.text = @"RPC log:"; self.outputLabel.numberOfLines = 0; self.outputLabel.font = [UIFont fontWithName:@"Helvetica Neue" size:8.0]; [self execRequest]; } @end #pragma mark Demo: Route Chat /** * Run the routeChat demo. Send some chat messages, and print any chat messages that are sent from * the server. */ @interface RouteChatViewController : UIViewController @property(weak, nonatomic) IBOutlet UILabel *outputLabel; @end @implementation RouteChatViewController { RTGRouteGuide *_service; } - (dispatch_queue_t)dispatchQueue { return dispatch_get_main_queue(); } - (void)execRequest { NSArray *notes = @[ [RTGRouteNote noteWithMessage:@"First message" latitude:0 longitude:0], [RTGRouteNote noteWithMessage:@"Second message" latitude:0 longitude:1], [RTGRouteNote noteWithMessage:@"Third message" latitude:1 longitude:0], [RTGRouteNote noteWithMessage:@"Fourth message" latitude:0 longitude:0] ]; GRPCStreamingProtoCall *call = [_service routeChatWithResponseHandler:self callOptions:nil]; [call start]; for (RTGRouteNote *note in notes) { [call writeMessage:note]; } [call finish]; } - (void)didReceiveProtoMessage:(GPBMessage *)message { RTGRouteNote *note = (RTGRouteNote *)message; if (note) { NSString *str = [NSString stringWithFormat:@"%@\nGot message %@ at %@", self.outputLabel.text, note.message, note.location]; self.outputLabel.text = str; NSLog(@"Got message %@ at %@", note.message, note.location); } } - (void)didCloseWithTrailingMetadata:(NSDictionary *)trailingMetadata error:(NSError *)error { if (!error) { NSLog(@"Chat ended."); } else { NSString *str = [NSString stringWithFormat:@"%@\nRPC error: %@", self.outputLabel.text, error]; self.outputLabel.text = str; NSLog(@"RPC error: %@", error); } } - (void)viewDidLoad { [super viewDidLoad]; GRPCMutableCallOptions *options = [[GRPCMutableCallOptions alloc] init]; options.transport = GRPCDefaultTransportImplList.core_insecure; _service = [[RTGRouteGuide alloc] initWithHost:kHostAddress callOptions:options]; } - (void)viewDidAppear:(BOOL)animated { // TODO(makarandd): Set these properties through UI builder self.outputLabel.text = @"RPC log:"; self.outputLabel.numberOfLines = 0; self.outputLabel.font = [UIFont fontWithName:@"Helvetica Neue" size:8.0]; [self execRequest]; } @end grpc-1.30.2/examples/objective-c/route_guide/route_guide_db.json000066400000000000000000000052451370425124100247330ustar00rootroot00000000000000[{ "location": { "latitude": 407838351, "longitude": -746143763 }, "name": "Patriots Path, Mendham, NJ 07945, USA" }, { "location": { "latitude": 408122808, "longitude": -743999179 }, "name": "101 New Jersey 10, Whippany, NJ 07981, USA" }, { "location": { "latitude": 413628156, "longitude": -749015468 }, "name": "U.S. 6, Shohola, PA 18458, USA" }, { "location": { "latitude": 419999544, "longitude": -740371136 }, "name": "5 Conners Road, Kingston, NY 12401, USA" }, { "location": { "latitude": 414008389, "longitude": -743951297 }, "name": "Mid Hudson Psychiatric Center, New Hampton, NY 10958, USA" }, { "location": { "latitude": 419611318, "longitude": -746524769 }, "name": "287 Flugertown Road, Livingston Manor, NY 12758, USA" }, { "location": { "latitude": 406109563, "longitude": -742186778 }, "name": "4001 Tremley Point Road, Linden, NJ 07036, USA" }, { "location": { "latitude": 416802456, "longitude": -742370183 }, "name": "352 South Mountain Road, Wallkill, NY 12589, USA" }, { "location": { "latitude": 412950425, "longitude": -741077389 }, "name": "Bailey Turn Road, Harriman, NY 10926, USA" }, { "location": { "latitude": 412144655, "longitude": -743949739 }, "name": "193-199 Wawayanda Road, Hewitt, NJ 07421, USA" }, { "location": { "latitude": 404306372, "longitude": -741079661 }, "name": "" }, { "location": { "latitude": 403966326, "longitude": -748519297 }, "name": "" }, { "location": { "latitude": 405002031, "longitude": -748407866 }, "name": "" }, { "location": { "latitude": 409532885, "longitude": -742200683 }, "name": "" }, { "location": { "latitude": 416851321, "longitude": -742674555 }, "name": "" }, { "location": { "latitude": 406411633, "longitude": -741722051 }, "name": "3387 Richmond Terrace, Staten Island, NY 10303, USA" }, { "location": { "latitude": 413069058, "longitude": -744597778 }, "name": "261 Van Sickle Road, Goshen, NY 10924, USA" }, { "location": { "latitude": 418465462, "longitude": -746859398 }, "name": "" }, { "location": { "latitude": 411733222, "longitude": -744228360 }, "name": "" }, { "location": { "latitude": 410248224, "longitude": -747127767 }, "name": "3 Hasta Way, Newton, NJ 07860, USA" }] grpc-1.30.2/examples/php/000077500000000000000000000000001370425124100151345ustar00rootroot00000000000000grpc-1.30.2/examples/php/.gitignore000066400000000000000000000000261370425124100171220ustar00rootroot00000000000000composer.lock vendor/ grpc-1.30.2/examples/php/README.md000066400000000000000000000020231370425124100164100ustar00rootroot00000000000000# gRPC PHP Quick Start Example ## Prerequisites This requires `php` >= 5.5, `pecl`, `composer` ## Install - Install the `grpc` extension ```sh $ [sudo] pecl install grpc ``` - Install the `protoc` compiler plugin `grpc_php_plugin` ```sh $ git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc $ cd grpc $ make grpc_php_plugin ``` - Install the `grpc/grpc` composer package ``` $ cd examples/php $ composer install ``` ## Try it! - Run the server Please follow the instruction in [Node][] to run the server ``` $ cd examples/node $ npm install $ cd dynamic_codegen or cd static_codegen $ node greeter_server.js ``` - Generate proto files and run the client ``` $ cd examples/php $ ./greeter_proto_gen.sh $ ./run_greeter_client.sh ``` ## In-depth Tutorial You can find a more detailed tutorial in [gRPC Basics: PHP][] [Node]:https://github.com/grpc/grpc/tree/master/examples/node [gRPC Basics: PHP]:https://grpc.io/docs/tutorials/basic/php.html grpc-1.30.2/examples/php/composer.json000066400000000000000000000005341370425124100176600ustar00rootroot00000000000000{ "name": "grpc/grpc-demo", "description": "gRPC example for PHP", "require": { "grpc/grpc": "^v1.3.0", "google/protobuf": "^v3.3.0" }, "autoload": { "psr-4": { "Routeguide\\": "route_guide/Routeguide/", "GPBMetadata\\": ["GPBMetadata/","route_guide/GPBMetadata/"], "Helloworld\\": "Helloworld/" } } } grpc-1.30.2/examples/php/echo/000077500000000000000000000000001370425124100160525ustar00rootroot00000000000000grpc-1.30.2/examples/php/echo/README.md000066400000000000000000000031621370425124100173330ustar00rootroot00000000000000 # gRPC PHP End-to-End Examples This page shows a number of ways to create a PHP gRPC client and connect with a gRPC backend service. ## Run the Server For all the following examples, we use a simple gRPC server, written in Node. ```sh $ git clone https://github.com/grpc/grpc-web $ cd grpc-web $ docker-compose build common node-server $ docker run -d -p 9090:9090 --name node-server grpcweb/node-server ``` ## Install the gRPC PECL extension All the following commands are assumed to be run from this current directory. ```sh $ cd grpc/examples/php/echo ``` In order to build a PHP gRPC client, we need to install the `grpc` extension first. ```sh $ docker build -t grpc-php/base -f ./base.Dockerfile . ``` ## CLI Let's first build a simple CLI gRPC client: ```sh $ docker build -t grpc-php/echo-client -f ./cli.Dockerfile . $ docker run -it --rm --link node-server:node-server grpc-php/echo-client $ php client.php ``` ## Apache Now let's see how the gRPC PHP client can run with Apache: ```sh $ docker build -t grpc-php/apache -f ./apache.Dockerfile . $ docker run -it --rm --link node-server:node-server -p 80:80 grpc-php/apache ``` Open the browser to `http://localhost`. ## Nginx + FPM We can also try running PHP-FPM and put Nginx in front of it. The PHP-FPM part: ```sh $ docker build -t grpc-php/fpm -f ./fpm.Dockerfile . $ docker run -it --rm --link node-server:node-server -p 9000:9000 \ --name fpm grpc-php/fpm ``` The Nginx part: ```sh $ docker run -it --rm -v $(pwd)/nginx.conf:/etc/nginx/conf.d/default.conf:ro \ --link fpm:fpm -p 80:80 nginx:1.17.4 ``` Open the browser to `http://localhost`. grpc-1.30.2/examples/php/echo/apache.Dockerfile000066400000000000000000000024661370425124100212740ustar00rootroot00000000000000# Copyright 2019 gRPC 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 # # 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. FROM composer:1.8.6 as composer FROM grpc-php/base as grpc-base FROM php:7.2-apache-stretch RUN apt-get -qq update && apt-get -qq install -y git COPY --from=composer /usr/bin/composer /usr/bin/composer COPY --from=grpc-base /usr/local/bin/protoc /usr/local/bin/protoc COPY --from=grpc-base /github/grpc/bins/opt/grpc_php_plugin \ /usr/local/bin/protoc-gen-grpc COPY --from=grpc-base \ /usr/local/lib/php/extensions/no-debug-non-zts-20170718/grpc.so \ /usr/local/lib/php/extensions/no-debug-non-zts-20170718/grpc.so RUN docker-php-ext-enable grpc WORKDIR /var/www/html COPY client.php ./index.php COPY composer.json . COPY echo.proto . RUN chmod 644 index.php RUN protoc -I=. echo.proto --php_out=. --grpc_out=. RUN composer install grpc-1.30.2/examples/php/echo/base.Dockerfile000066400000000000000000000022341370425124100207560ustar00rootroot00000000000000# Copyright 2019 gRPC 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 # # 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. FROM php:7.2-stretch RUN apt-get -qq update && apt-get -qq install -y \ autoconf automake curl git libtool \ pkg-config unzip zlib1g-dev ARG MAKEFLAGS=-j8 WORKDIR /tmp RUN curl -sSL https://github.com/protocolbuffers/protobuf/releases/download/v3.8.0/\ protoc-3.8.0-linux-x86_64.zip -o /tmp/protoc.zip && \ unzip -qq protoc.zip && \ cp /tmp/bin/protoc /usr/local/bin/protoc WORKDIR /github/grpc RUN git clone https://github.com/grpc/grpc . && \ git submodule update --init && \ cd third_party/protobuf && git submodule update --init RUN make grpc_php_plugin RUN pecl install grpc grpc-1.30.2/examples/php/echo/cli.Dockerfile000066400000000000000000000024611370425124100206150ustar00rootroot00000000000000# Copyright 2019 gRPC 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 # # 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. FROM composer:1.8.6 as composer FROM grpc-php/base as grpc-base FROM php:7.2-stretch RUN apt-get -qq update && apt-get -qq install -y git COPY --from=composer /usr/bin/composer /usr/bin/composer COPY --from=grpc-base /usr/local/bin/protoc /usr/local/bin/protoc COPY --from=grpc-base /github/grpc/bins/opt/grpc_php_plugin \ /usr/local/bin/protoc-gen-grpc COPY --from=grpc-base \ /usr/local/lib/php/extensions/no-debug-non-zts-20170718/grpc.so \ /usr/local/lib/php/extensions/no-debug-non-zts-20170718/grpc.so RUN docker-php-ext-enable grpc WORKDIR /github/grpc-php/examples/echo COPY client.php . COPY composer.json . COPY echo.proto . RUN protoc -I=. echo.proto --php_out=. --grpc_out=. RUN composer install CMD ["/bin/bash"] grpc-1.30.2/examples/php/echo/client.php000066400000000000000000000024761370425124100200520ustar00rootroot00000000000000 Grpc\ChannelCredentials::createInsecure(), ]); // unary call $request = new Grpc\Gateway\Testing\EchoRequest(); $request->setMessage("Hello World!"); list($response, $status) = $client->Echo($request)->wait(); echo $response->getMessage()."\n"; // server streaming call $stream_request = new Grpc\Gateway\Testing\ServerStreamingEchoRequest(); $stream_request->setMessage("stream message"); $stream_request->setMessageCount(5); $responses = $client->ServerStreamingEcho($stream_request)->responses(); foreach ($responses as $response) { echo $response->getMessage()."\n"; } grpc-1.30.2/examples/php/echo/composer.json000066400000000000000000000002601370425124100205720ustar00rootroot00000000000000{ "name": "grpc-php/echo-example", "require": { "grpc/grpc": "^v1.22.0", "google/protobuf": "^3.7.0" }, "autoload": { "psr-4": { "": "./" } } } grpc-1.30.2/examples/php/echo/echo.proto000066400000000000000000000066501370425124100200640ustar00rootroot00000000000000// Copyright 2019 gRPC 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 // // 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. syntax = "proto3"; package grpc.gateway.testing; message Empty {} message EchoRequest { string message = 1; } message EchoResponse { string message = 1; int32 message_count = 2; } // Request type for server side streaming echo. message ServerStreamingEchoRequest { // Message string for server streaming request. string message = 1; // The total number of messages to be generated before the server // closes the stream; default is 10. int32 message_count = 2; // The interval (ms) between two server messages. The server implementation // may enforce some minimum interval (e.g. 100ms) to avoid message overflow. int32 message_interval = 3; } // Response type for server streaming response. message ServerStreamingEchoResponse { // Response message. string message = 1; } // Request type for client side streaming echo. message ClientStreamingEchoRequest { // A special value "" indicates that there's no further messages. string message = 1; } // Response type for client side streaming echo. message ClientStreamingEchoResponse { // Total number of client messages that have been received. int32 message_count = 1; } // A simple echo service. service EchoService { // One request followed by one response // The server returns the client message as-is. rpc Echo(EchoRequest) returns (EchoResponse); // Sends back abort status. rpc EchoAbort(EchoRequest) returns (EchoResponse) {} // One empty request, ZERO processing, followed by one empty response // (minimum effort to do message serialization). rpc NoOp(Empty) returns (Empty); // One request followed by a sequence of responses (streamed download). // The server will return the same client message repeatedly. rpc ServerStreamingEcho(ServerStreamingEchoRequest) returns (stream ServerStreamingEchoResponse); // One request followed by a sequence of responses (streamed download). // The server abort directly. rpc ServerStreamingEchoAbort(ServerStreamingEchoRequest) returns (stream ServerStreamingEchoResponse) {} // A sequence of requests followed by one response (streamed upload). // The server returns the total number of messages as the result. rpc ClientStreamingEcho(stream ClientStreamingEchoRequest) returns (ClientStreamingEchoResponse); // A sequence of requests with each message echoed by the server immediately. // The server returns the same client messages in order. // E.g. this is how the speech API works. rpc FullDuplexEcho(stream EchoRequest) returns (stream EchoResponse); // A sequence of requests followed by a sequence of responses. // The server buffers all the client messages and then returns the same // client messages one by one after the client half-closes the stream. // This is how an image recognition API may work. rpc HalfDuplexEcho(stream EchoRequest) returns (stream EchoResponse); } grpc-1.30.2/examples/php/echo/fpm.Dockerfile000066400000000000000000000024631370425124100206320ustar00rootroot00000000000000# Copyright 2019 gRPC 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 # # 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. FROM composer:1.8.6 as composer FROM grpc-php/base as grpc-base FROM php:7.2-fpm-stretch RUN apt-get -qq update && apt-get -qq install -y git COPY --from=composer /usr/bin/composer /usr/bin/composer COPY --from=grpc-base /usr/local/bin/protoc /usr/local/bin/protoc COPY --from=grpc-base /github/grpc/bins/opt/grpc_php_plugin \ /usr/local/bin/protoc-gen-grpc COPY --from=grpc-base \ /usr/local/lib/php/extensions/no-debug-non-zts-20170718/grpc.so \ /usr/local/lib/php/extensions/no-debug-non-zts-20170718/grpc.so RUN docker-php-ext-enable grpc WORKDIR /var/www/html COPY client.php ./index.php COPY composer.json . COPY echo.proto . RUN chmod 644 index.php RUN protoc -I=. echo.proto --php_out=. --grpc_out=. RUN composer install grpc-1.30.2/examples/php/echo/nginx.conf000066400000000000000000000010051370425124100200400ustar00rootroot00000000000000server { listen 80; server_name localhost; root /var/www/html; index index.php; location / { try_files $uri $uri/ /index.php?$args; } location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_pass fpm:9000; fastcgi_index index.php; } } grpc-1.30.2/examples/php/greeter_client.php000066400000000000000000000027251370425124100206460ustar00rootroot00000000000000 Grpc\ChannelCredentials::createInsecure(), ]); $request = new Helloworld\HelloRequest(); $request->setName($name); list($response, $status) = $client->SayHello($request)->wait(); if ($status->code !== Grpc\STATUS_OK) { echo "ERROR: " . $status->code . ", " . $status->details . PHP_EOL; exit(1); } echo $response->getMessage() . PHP_EOL; } $name = !empty($argv[1]) ? $argv[1] : 'world'; $hostname = !empty($argv[2]) ? $argv[2] : 'localhost:50051'; greet($hostname, $name); grpc-1.30.2/examples/php/greeter_proto_gen.sh000077500000000000000000000013301370425124100212010ustar00rootroot00000000000000#!/bin/bash # Copyright 2017 gRPC 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 # # 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. protoc --proto_path=../protos --php_out=. --grpc_out=. --plugin=protoc-gen-grpc=../../bins/opt/grpc_php_plugin ../protos/helloworld.proto grpc-1.30.2/examples/php/route_guide/000077500000000000000000000000001370425124100174475ustar00rootroot00000000000000grpc-1.30.2/examples/php/route_guide/README.md000066400000000000000000000003241370425124100207250ustar00rootroot00000000000000# gRPC Basics: PHP sample code The files in this folder are the samples used in [gRPC Basics: PHP][], a detailed tutorial for using gRPC in PHP. [gRPC Basics: PHP]:https://grpc.io/docs/tutorials/basic/php.html grpc-1.30.2/examples/php/route_guide/route_guide_client.php000066400000000000000000000141151370425124100240330ustar00rootroot00000000000000 Grpc\ChannelCredentials::createInsecure(), ]); function printFeature($feature) { $name = $feature->getName(); if (!$name) { $name_str = 'no feature'; } else { $name_str = "feature called $name"; } echo sprintf( "Found %s \n at %f, %f\n", $name_str, $feature->getLocation()->getLatitude() / COORD_FACTOR, $feature->getLocation()->getLongitude() / COORD_FACTOR ); } /** * Run the getFeature demo. Calls getFeature with a point known to have a * feature and a point known not to have a feature. */ function runGetFeature() { echo "Running GetFeature...\n"; global $client; $point = new Routeguide\Point(); $points = array( array(409146138, -746188906), array(0, 0), ); foreach ($points as $p) { $point->setLatitude($p[0]); $point->setLongitude($p[1]); // make a unary grpc call list($feature, $status) = $client->GetFeature($point)->wait(); printFeature($feature); } } /** * Run the listFeatures demo. Calls listFeatures with a rectangle * containing all of the features in the pre-generated * database. Prints each response as it comes in. */ function runListFeatures() { echo "Running ListFeatures...\n"; global $client; $lo_point = new Routeguide\Point(); $hi_point = new Routeguide\Point(); $lo_point->setLatitude(400000000); $lo_point->setLongitude(-750000000); $hi_point->setLatitude(420000000); $hi_point->setLongitude(-730000000); $rectangle = new Routeguide\Rectangle(); $rectangle->setLo($lo_point); $rectangle->setHi($hi_point); // start the server streaming call $call = $client->ListFeatures($rectangle); // an iterator over the server streaming responses $features = $call->responses(); foreach ($features as $feature) { printFeature($feature); } } /** * Run the recordRoute demo. Sends several randomly chosen points from the * pre-generated feature database with a variable delay in between. Prints * the statistics when they are sent from the server. */ function runRecordRoute() { echo "Running RecordRoute...\n"; global $client, $argv; // start the client streaming call $call = $client->RecordRoute(); $db = json_decode(file_get_contents($argv[1]), true); $num_points_in_db = count($db); $num_points = 10; for ($i = 0; $i < $num_points; ++$i) { $point = new Routeguide\Point(); $index = rand(0, $num_points_in_db - 1); $lat = $db[$index]['location']['latitude']; $long = $db[$index]['location']['longitude']; $feature_name = $db[$index]['name']; $point->setLatitude($lat); $point->setLongitude($long); echo sprintf( "Visiting point %f, %f,\n with feature name: %s\n", $lat / COORD_FACTOR, $long / COORD_FACTOR, $feature_name ? $feature_name : '' ); usleep(rand(300000, 800000)); $call->write($point); } list($route_summary, $status) = $call->wait(); echo sprintf( "Finished trip with %d points\nPassed %d features\n". "Travelled %d meters\nIt took %d seconds\n", $route_summary->getPointCount(), $route_summary->getFeatureCount(), $route_summary->getDistance(), $route_summary->getElapsedTime() ); } /** * Run the routeChat demo. Send some chat messages, and print any chat * messages that are sent from the server. */ function runRouteChat() { echo "Running RouteChat...\n"; global $client; // start the bidirectional streaming call $call = $client->RouteChat(); $notes = array( array(1, 1, 'first message'), array(1, 2, 'second message'), array(2, 1, 'third message'), array(1, 1, 'fourth message'), array(1, 1, 'fifth message'), ); foreach ($notes as $n) { $point = new Routeguide\Point(); $point->setLatitude($lat = $n[0]); $point->setLongitude($long = $n[1]); $route_note = new Routeguide\RouteNote(); $route_note->setLocation($point); $route_note->setMessage($message = $n[2]); echo sprintf( "Sending message: '%s' at (%d, %d)\n", $message, $lat, $long ); // send a bunch of messages to the server $call->write($route_note); } $call->writesDone(); // read from the server until there's no more while ($route_note_reply = $call->read()) { echo sprintf( "Previous left message at (%d, %d): '%s'\n", $route_note_reply->getLocation()->getLatitude(), $route_note_reply->getLocation()->getLongitude(), $route_note_reply->getMessage() ); } } /** * Run all of the demos in order. */ function main() { runGetFeature(); runListFeatures(); runRecordRoute(); runRouteChat(); } if (empty($argv[1])) { echo 'Usage: php -d extension=grpc.so route_guide_client.php '. "\n"; exit(1); } main(); grpc-1.30.2/examples/php/route_guide/route_guide_proto_gen.sh000077500000000000000000000013541370425124100244000ustar00rootroot00000000000000#!/bin/bash # Copyright 2015 gRPC 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 # # 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. protoc --proto_path=./../../protos --php_out=./ --grpc_out=./ --plugin=protoc-gen-grpc=./../../../bins/opt/grpc_php_plugin ./../../protos/route_guide.proto grpc-1.30.2/examples/php/route_guide/run_route_guide_client.sh000077500000000000000000000013621370425124100245450ustar00rootroot00000000000000#!/bin/bash # Copyright 2015 gRPC 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 # # 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. set -e cd $(dirname $0) php -d extension=grpc.so -d max_execution_time=300 \ route_guide_client.php \ ../../node/static_codegen/route_guide/route_guide_db.json grpc-1.30.2/examples/php/run_greeter_client.sh000077500000000000000000000012631370425124100213540ustar00rootroot00000000000000#!/bin/bash # Copyright 2015 gRPC 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 # # 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. set -e cd $(dirname $0) php -d extension=grpc.so -d max_execution_time=300 \ greeter_client.php $1 grpc-1.30.2/examples/protos/000077500000000000000000000000001370425124100156735ustar00rootroot00000000000000grpc-1.30.2/examples/protos/README.md000066400000000000000000000002631370425124100171530ustar00rootroot00000000000000# Example protos ## Contents - [helloworld.proto] - The simple example used in the overview. - [route_guide.proto] - An example service described in detail in the tutorial. grpc-1.30.2/examples/protos/auth_sample.proto000066400000000000000000000022571370425124100212700ustar00rootroot00000000000000// Copyright 2015 gRPC 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 // // 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. syntax = "proto3"; package grpc.testing; option objc_class_prefix = "AUTH"; // Unary request. message Request { // Whether Response should include username. bool fill_username = 4; // Whether Response should include OAuth scope. bool fill_oauth_scope = 5; } // Unary response, as configured by the request. message Response { // The user the request came from, for verifying authentication was // successful. string username = 2; // OAuth scope. string oauth_scope = 3; } service TestService { // One request followed by one response. rpc UnaryCall(Request) returns (Response); } grpc-1.30.2/examples/protos/hellostreamingworld.proto000066400000000000000000000021301370425124100230410ustar00rootroot00000000000000// Copyright 2015 gRPC 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 // // 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. syntax = "proto3"; option java_package = "ex.grpc"; option objc_class_prefix = "HSW"; package hellostreamingworld; // The greeting service definition. service MultiGreeter { // Sends multiple greetings rpc sayHello (HelloRequest) returns (stream HelloReply) {} } // The request message containing the user's name and how many greetings // they want. message HelloRequest { string name = 1; string num_greetings = 2; } // A response message containing a greeting message HelloReply { string message = 1; } grpc-1.30.2/examples/protos/helloworld.proto000066400000000000000000000021471370425124100211370ustar00rootroot00000000000000// Copyright 2015 gRPC 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 // // 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. syntax = "proto3"; option java_multiple_files = true; option java_package = "io.grpc.examples.helloworld"; option java_outer_classname = "HelloWorldProto"; option objc_class_prefix = "HLW"; package helloworld; // The greeting service definition. service Greeter { // Sends a greeting rpc SayHello (HelloRequest) returns (HelloReply) {} } // The request message containing the user's name. message HelloRequest { string name = 1; } // The response message containing the greetings message HelloReply { string message = 1; } grpc-1.30.2/examples/protos/keyvaluestore.proto000066400000000000000000000017441370425124100216700ustar00rootroot00000000000000// Copyright 2018 gRPC 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 // // 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. syntax = "proto3"; package keyvaluestore; // A simple key-value storage service service KeyValueStore { // Provides a value for each key request rpc GetValues (stream Request) returns (stream Response) {} } // The request message containing the key message Request { string key = 1; } // The response message containing the value associated with the key message Response { string value = 1; } grpc-1.30.2/examples/protos/route_guide.proto000066400000000000000000000066411370425124100213020ustar00rootroot00000000000000// Copyright 2015 gRPC 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 // // 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. syntax = "proto3"; option java_multiple_files = true; option java_package = "io.grpc.examples.routeguide"; option java_outer_classname = "RouteGuideProto"; option objc_class_prefix = "RTG"; package routeguide; // Interface exported by the server. service RouteGuide { // A simple RPC. // // Obtains the feature at a given position. // // A feature with an empty name is returned if there's no feature at the given // position. rpc GetFeature(Point) returns (Feature) {} // A server-to-client streaming RPC. // // Obtains the Features available within the given Rectangle. Results are // streamed rather than returned at once (e.g. in a response message with a // repeated field), as the rectangle may cover a large area and contain a // huge number of features. rpc ListFeatures(Rectangle) returns (stream Feature) {} // A client-to-server streaming RPC. // // Accepts a stream of Points on a route being traversed, returning a // RouteSummary when traversal is completed. rpc RecordRoute(stream Point) returns (RouteSummary) {} // A Bidirectional streaming RPC. // // Accepts a stream of RouteNotes sent while a route is being traversed, // while receiving other RouteNotes (e.g. from other users). rpc RouteChat(stream RouteNote) returns (stream RouteNote) {} } // Points are represented as latitude-longitude pairs in the E7 representation // (degrees multiplied by 10**7 and rounded to the nearest integer). // Latitudes should be in the range +/- 90 degrees and longitude should be in // the range +/- 180 degrees (inclusive). message Point { int32 latitude = 1; int32 longitude = 2; } // A latitude-longitude rectangle, represented as two diagonally opposite // points "lo" and "hi". message Rectangle { // One corner of the rectangle. Point lo = 1; // The other corner of the rectangle. Point hi = 2; } // A feature names something at a given point. // // If a feature could not be named, the name is empty. message Feature { // The name of the feature. string name = 1; // The point where the feature is detected. Point location = 2; } // A RouteNote is a message sent while at a given point. message RouteNote { // The location from which the message is sent. Point location = 1; // The message to be sent. string message = 2; } // A RouteSummary is received in response to a RecordRoute rpc. // // It contains the number of individual points received, the number of // detected features, and the total distance covered as the cumulative sum of // the distance between each point. message RouteSummary { // The number of points received. int32 point_count = 1; // The number of known features passed while traversing the route. int32 feature_count = 2; // The distance covered in metres. int32 distance = 3; // The duration of the traversal in seconds. int32 elapsed_time = 4; } grpc-1.30.2/examples/python/000077500000000000000000000000001370425124100156665ustar00rootroot00000000000000grpc-1.30.2/examples/python/README.md000066400000000000000000000001441370425124100171440ustar00rootroot00000000000000[This code's documentation lives on the grpc.io site.](https://grpc.io/docs/quickstart/python.html) grpc-1.30.2/examples/python/auth/000077500000000000000000000000001370425124100166275ustar00rootroot00000000000000grpc-1.30.2/examples/python/auth/BUILD.bazel000066400000000000000000000034551370425124100205140ustar00rootroot00000000000000# Copyright 2019 The gRPC 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 # # 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. filegroup( name = "_credentials_files", testonly = 1, srcs = [ "credentials/localhost.crt", "credentials/localhost.key", "credentials/root.crt", ], ) py_library( name = "_credentials", testonly = 1, srcs = ["_credentials.py"], data = [":_credentials_files"], ) py_binary( name = "customized_auth_client", testonly = 1, srcs = ["customized_auth_client.py"], python_version = "PY3", deps = [ ":_credentials", "//examples:helloworld_py_pb2", "//examples:helloworld_py_pb2_grpc", "//src/python/grpcio/grpc:grpcio", ], ) py_binary( name = "customized_auth_server", testonly = 1, srcs = ["customized_auth_server.py"], python_version = "PY3", deps = [ ":_credentials", "//examples:helloworld_py_pb2", "//examples:helloworld_py_pb2_grpc", "//src/python/grpcio/grpc:grpcio", ], ) py_test( name = "_auth_example_test", srcs = ["test/_auth_example_test.py"], python_version = "PY3", deps = [ ":_credentials", ":customized_auth_client", ":customized_auth_server", "//examples:helloworld_py_pb2", "//src/python/grpcio/grpc:grpcio", ], ) grpc-1.30.2/examples/python/auth/README.md000066400000000000000000000071301370425124100201070ustar00rootroot00000000000000# Authentication Extension Example in gRPC Python ## Check Our Guide First For most common usage of authentication in gRPC Python, please see our [Authentication](https://grpc.io/docs/guides/auth/) guide's Python section. The Guide includes following scenarios: 1. Server SSL credential setup 2. Client SSL credential setup 3. Authenticate with Google using a JWT 4. Authenticate with Google using an Oauth2 token Also, the guide talks about gRPC specific credential types. ### Channel credentials Channel credentials are attached to a `Channel` object, the most common use case are SSL credentials. ### Call credentials Call credentials are attached to a `Call` object (corresponding to an RPC). Under the hood, the call credentials is a function that takes in information of the RPC and modify metadata through callback. ## About This Example This example focuses on extending gRPC authentication mechanism: 1) Customize authentication plugin; 2) Composite client side credentials; 3) Validation through interceptor on server side. ## AuthMetadataPlugin: Manipulate metadata for each call Unlike TLS/SSL based authentication, the authentication extension in gRPC Python lives at a much higher level of networking. It relies on the transmission of metadata (HTTP Header) between client and server, instead of alternating the transport protocol. gRPC Python provides a way to intercept an RPC and append authentication related metadata through [`AuthMetadataPlugin`](https://grpc.github.io/grpc/python/grpc.html#grpc.AuthMetadataPlugin). Those in need of a custom authentication method may simply provide a concrete implementation of the following interface: ```Python class AuthMetadataPlugin: """A specification for custom authentication.""" def __call__(self, context, callback): """Implements authentication by passing metadata to a callback. Implementations of this method must not block. Args: context: An AuthMetadataContext providing information on the RPC that the plugin is being called to authenticate. callback: An AuthMetadataPluginCallback to be invoked either synchronously or asynchronously. """ ``` Then pass the instance of the concrete implementation to `grpc.metadata_call_credentials` function to be converted into a `CallCredentials` object. Please NOTE that it is possible to pass a Python function object directly, but we recommend to inherit from the base class to ensure implementation correctness. ```Python def metadata_call_credentials(metadata_plugin, name=None): """Construct CallCredentials from an AuthMetadataPlugin. Args: metadata_plugin: An AuthMetadataPlugin to use for authentication. name: An optional name for the plugin. Returns: A CallCredentials. """ ``` The `CallCredentials` object can be passed directly into an RPC like: ```Python call_credentials = grpc.metadata_call_credentials(my_foo_plugin) stub.FooRpc(request, credentials=call_credentials) ``` Or you can use `ChannelCredentials` and `CallCredentials` at the same time by combining them: ```Python channel_credentials = ... call_credentials = ... composite_credentials = grpc.composite_channel_credentials( channel_credential, call_credentials) channel = grpc.secure_channel(server_address, composite_credentials) ``` It is also possible to apply multiple `CallCredentials` to a single RPC: ```Python call_credentials_foo = ... call_credentials_bar = ... call_credentials = grpc.composite_call_credentials( call_credentials_foo, call_credentials_bar) stub.FooRpc(request, credentials=call_credentials) ``` grpc-1.30.2/examples/python/auth/_credentials.py000066400000000000000000000022241370425124100216350ustar00rootroot00000000000000# Copyright 2019 The gRPC 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 # # 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. """Loading SSL credentials for gRPC Python authentication example.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function import os def _load_credential_from_file(filepath): real_path = os.path.join(os.path.dirname(__file__), filepath) with open(real_path, 'rb') as f: return f.read() SERVER_CERTIFICATE = _load_credential_from_file('credentials/localhost.crt') SERVER_CERTIFICATE_KEY = _load_credential_from_file('credentials/localhost.key') ROOT_CERTIFICATE = _load_credential_from_file('credentials/root.crt') grpc-1.30.2/examples/python/auth/credentials/000077500000000000000000000000001370425124100211245ustar00rootroot00000000000000grpc-1.30.2/examples/python/auth/credentials/localhost.crt000066400000000000000000000021531370425124100236270ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIDFjCCAf4CCQCzrLIhrWa55zANBgkqhkiG9w0BAQsFADBCMQswCQYDVQQGEwJV UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEPMA0GA1UECgwGR29vZ2xlMQ0wCwYDVQQL DARnUlBDMCAXDTE5MDYyNDIyMjIzM1oYDzIxMTkwNTMxMjIyMjMzWjBWMQswCQYD VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEPMA0GA1UECgwGR29vZ2xlMQ0w CwYDVQQLDARnUlBDMRIwEAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEB AQUAA4IBDwAwggEKAoIBAQCtCW0TjugnIUu8BEVIYvdMP+/2GENQDjZhZ8eKR5C6 toDGbgjsDtt/GxISAg4cg70fIvy0XolnGPZodvfHDM4lJ7yHBOdZD8TXQoE6okR7 HZuLUJ20M0pXgWqtRewKRUjuYsSDXBnzLiZw1dcv9nGpo+Bqa8NonpiGRRpEkshF D6T9KU9Ts/x+wMQBIra2Gj0UMh79jPhUuxcYAQA0JQGivnOtdwuPiumpnUT8j8h6 tWg5l01EsCZWJecCF85KnGpJEVYPyPqBqGsy0nGS9plGotOWF87+jyUQt+KD63xA aBmTro86mKDDKEK4JvzjVeMGz2UbVcLPiiZnErTFaiXJAgMBAAEwDQYJKoZIhvcN AQELBQADggEBAKsDgOPCWp5WCy17vJbRlgfgk05sVNIHZtzrmdswjBmvSg8MUpep XqcPNUpsljAXsf9UM5IFEMRdilUsFGWvHjBEtNAW8WUK9UV18WRuU//0w1Mp5HAN xUEKb4BoyZr65vlCnTR+AR5c9FfPvLibhr5qHs2RA8Y3GyLOcGqBWed87jhdQLCc P1bxB+96le5JeXq0tw215lxonI2/3ZYVK4/ok9gwXrQoWm8YieJqitk/ZQ4S17/4 pynHtDfdxLn23EXeGx+UTxJGfpRmhEZdJ+MN7QGYoomzx5qS5XoYKxRNrDlirJpr OqXIn8E1it+6d5gOZfuHawcNGhRLplE/pfA= -----END CERTIFICATE----- grpc-1.30.2/examples/python/auth/credentials/localhost.key000066400000000000000000000032131370425124100236250ustar00rootroot00000000000000-----BEGIN RSA PRIVATE KEY----- MIIEogIBAAKCAQEArQltE47oJyFLvARFSGL3TD/v9hhDUA42YWfHikeQuraAxm4I 7A7bfxsSEgIOHIO9HyL8tF6JZxj2aHb3xwzOJSe8hwTnWQ/E10KBOqJEex2bi1Cd tDNKV4FqrUXsCkVI7mLEg1wZ8y4mcNXXL/ZxqaPgamvDaJ6YhkUaRJLIRQ+k/SlP U7P8fsDEASK2tho9FDIe/Yz4VLsXGAEANCUBor5zrXcLj4rpqZ1E/I/IerVoOZdN RLAmViXnAhfOSpxqSRFWD8j6gahrMtJxkvaZRqLTlhfO/o8lELfig+t8QGgZk66P OpigwyhCuCb841XjBs9lG1XCz4omZxK0xWolyQIDAQABAoIBADeq/Kh6JT3RfGf0 h8WN8TlaqHxnueAbcmtL0+oss+cdp7gu1jf7X6o4r0uT1a5ew40s2Fe+wj2kzkE1 ZOlouTlC22gkr7j7Vbxa7PBMG/Pvxoa/XL0IczZLsGImSJXVTG1E4SvRiZeulTdf 1GbdxhtpWV1jZe5Wd4Na3+SHxF5S7m3PrHiZlYdz1ND+8XZs1NlL9+ej72qSFul9 t/QjMWJ9pky/Wad5abnRLRyOsg+BsgnXbkUy2rD89ZxFMLda9pzXo3TPyAlBHonr mkEsE4eRMWMpjBM79JbeyDdHn/cs/LjAZrzeDf7ugXr2CHQpKaM5O0PsNHezJII9 L5kCfzECgYEA4M/rz1UP1/BJoSqigUlSs0tPAg8a5UlkVsh6Osuq72IPNo8qg/Fw oV/IiIS+q+obRcFj1Od3PGdTpCJwW5dzd2fXBQGmGdj0HucnCrs13RtBh91JiF5i y/YYI9KfgOG2ZT9gG68T0gTs6jRrS3Qd83npqjrkJqMOd7s00MK9tUcCgYEAxQq7 T541oCYHSBRIIb0IrR25krZy9caxzCqPDwOcuuhaCqCiaq+ATvOWlSfgecm4eH0K PCH0xlWxG0auPEwm4pA8+/WR/XJwscPZMuoht1EoKy1his4eKx/s7hHNeO6KOF0V Y/zqIiuZnEwUoKbn7EqqNFSTT65PJKyGsICJFG8CgYAfaw9yl1myfQNdQb8aQGwN YJ33FLNWje427qeeZe5KrDKiFloDvI9YDjHRWnPnRL1w/zj7fSm9yFb5HlMDieP6 MQnsyjEzdY2QcA+VwVoiv3dmDHgFVeOKy6bOAtaFxYWfGr9MvygO9t9BT/gawGyb JVORlc9i0vDnrMMR1dV7awKBgBpTWLtGc/u1mPt0Wj7HtsUKV6TWY32a0l5owTxM S0BdksogtBJ06DukJ9Y9wawD23WdnyRxlPZ6tHLkeprrwbY7dypioOKvy4a0l+xJ g7+uRCOgqIuXBkjUtx8HmeAyXp0xMo5tWArAsIFFWOwt4IadYygitJvMuh44PraO NcJZAoGADEiV0dheXUCVr8DrtSom8DQMj92/G/FIYjXL8OUhh0+F+YlYP0+F8PEU yYIWEqL/S5tVKYshimUXQa537JcRKsTVJBG/ZKD2kuqgOc72zQy3oplimXeJDCXY h2eAQ0u8GN6tN9C4t8Kp4a3y6FGsxgu+UTxdnL3YQ+yHAVhtCzo= -----END RSA PRIVATE KEY----- grpc-1.30.2/examples/python/auth/credentials/root.crt000066400000000000000000000023041370425124100226200ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIDWTCCAkGgAwIBAgIJAPOConZMwykwMA0GCSqGSIb3DQEBCwUAMEIxCzAJBgNV BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMQ8wDQYDVQQKDAZHb29nbGUxDTAL BgNVBAsMBGdSUEMwIBcNMTkwNjI0MjIyMDA3WhgPMjExOTA1MzEyMjIwMDdaMEIx CzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMQ8wDQYDVQQKDAZHb29n bGUxDTALBgNVBAsMBGdSUEMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB AQCwqei3TfyLidnQNDJ2lierMYo229K92DuORni7nSjJQ59Jc3dNMsmqGQJjCD8o 6mTlKM/oCbs27Wpx+OxcOLvT95j2kiDGca1fCvaMdguIod09SWiyMpv/hp0trLv7 NJIKHznath6rHYX2Ii3fZ1yCPzyQbEPSAA+GNpoNm1v1ZWmWKke9v7vLlS3inNlW Mt9jepK7DrtbNZnVDjeItnppBSbVYRMxIyNHkepFbqXx5TpkCvl4M4XQZw9bfSxQ i3WZ3q+T1Tw//OUdPNc+OfMhu0MA0QoMwikskP0NaIC3dbJZ5Ogx0RcnaB4E+9C6 O/znUEh3WuKVl5HXBF+UwWoFAgMBAAGjUDBOMB0GA1UdDgQWBBRm3JIgzgK4G97J fbMGatWMZc7V3jAfBgNVHSMEGDAWgBRm3JIgzgK4G97JfbMGatWMZc7V3jAMBgNV HRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCNiV8x41if094ry2srS0YucpiN 3rTPk08FOLsENTMYai524TGXJti1P6ofGr5KXCL0uxTByHE3fEiMMud2TIY5iHQo Y4mzDTTcb+Q7yKHwYZMlcp6nO8W+NeY5t+S0JPHhb8deKWepcN2UpXBUYQLw7AiE l96T9Gi+vC9h/XE5IVwHFQXTxf5UYzXtW1nfapvrOONg/ms41dgmrRKIi+knWfiJ FdHpHX2sfDAoJtnpEISX+nxRGNVTLY64utXWm4yxaZJshvy2s8zWJgRg7rtwAhTT Np9E9MnihXLEmDI4Co9XlLPJyZFmqImsbmVuKFeQOCiLAoPJaMI2lbi7fiTo -----END CERTIFICATE----- grpc-1.30.2/examples/python/auth/customized_auth_client.py000066400000000000000000000065741370425124100237620ustar00rootroot00000000000000# Copyright 2019 The gRPC 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 # # 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. """Client of the Python example of customizing authentication mechanism.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function import argparse import contextlib import logging import grpc from examples import helloworld_pb2 from examples import helloworld_pb2_grpc from examples.python.auth import _credentials _LOGGER = logging.getLogger(__name__) _LOGGER.setLevel(logging.INFO) _SERVER_ADDR_TEMPLATE = 'localhost:%d' _SIGNATURE_HEADER_KEY = 'x-signature' class AuthGateway(grpc.AuthMetadataPlugin): def __call__(self, context, callback): """Implements authentication by passing metadata to a callback. Implementations of this method must not block. Args: context: An AuthMetadataContext providing information on the RPC that the plugin is being called to authenticate. callback: An AuthMetadataPluginCallback to be invoked either synchronously or asynchronously. """ # Example AuthMetadataContext object: # AuthMetadataContext( # service_url=u'https://localhost:50051/helloworld.Greeter', # method_name=u'SayHello') signature = context.method_name[::-1] callback(((_SIGNATURE_HEADER_KEY, signature),), None) @contextlib.contextmanager def create_client_channel(addr): # Call credential object will be invoked for every single RPC call_credentials = grpc.metadata_call_credentials(AuthGateway(), name='auth gateway') # Channel credential will be valid for the entire channel channel_credential = grpc.ssl_channel_credentials( _credentials.ROOT_CERTIFICATE) # Combining channel credentials and call credentials together composite_credentials = grpc.composite_channel_credentials( channel_credential, call_credentials, ) channel = grpc.secure_channel(addr, composite_credentials) yield channel def send_rpc(channel): stub = helloworld_pb2_grpc.GreeterStub(channel) request = helloworld_pb2.HelloRequest(name='you') try: response = stub.SayHello(request) except grpc.RpcError as rpc_error: _LOGGER.error('Received error: %s', rpc_error) return rpc_error else: _LOGGER.info('Received message: %s', response) return response def main(): parser = argparse.ArgumentParser() parser.add_argument('--port', nargs='?', type=int, default=50051, help='the address of server') args = parser.parse_args() with create_client_channel(_SERVER_ADDR_TEMPLATE % args.port) as channel: send_rpc(channel) if __name__ == '__main__': logging.basicConfig(level=logging.INFO) main() grpc-1.30.2/examples/python/auth/customized_auth_server.py000066400000000000000000000064761370425124100240130ustar00rootroot00000000000000# Copyright 2019 The gRPC 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 # # 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. """Server of the Python example of customizing authentication mechanism.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function import argparse import contextlib import logging from concurrent import futures import grpc from examples import helloworld_pb2 from examples import helloworld_pb2_grpc from examples.python.auth import _credentials _LOGGER = logging.getLogger(__name__) _LOGGER.setLevel(logging.INFO) _LISTEN_ADDRESS_TEMPLATE = 'localhost:%d' _SIGNATURE_HEADER_KEY = 'x-signature' class SignatureValidationInterceptor(grpc.ServerInterceptor): def __init__(self): def abort(ignored_request, context): context.abort(grpc.StatusCode.UNAUTHENTICATED, 'Invalid signature') self._abortion = grpc.unary_unary_rpc_method_handler(abort) def intercept_service(self, continuation, handler_call_details): # Example HandlerCallDetails object: # _HandlerCallDetails( # method=u'/helloworld.Greeter/SayHello', # invocation_metadata=...) method_name = handler_call_details.method.split('/')[-1] expected_metadata = (_SIGNATURE_HEADER_KEY, method_name[::-1]) if expected_metadata in handler_call_details.invocation_metadata: return continuation(handler_call_details) else: return self._abortion class SimpleGreeter(helloworld_pb2_grpc.GreeterServicer): def SayHello(self, request, unused_context): return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name) @contextlib.contextmanager def run_server(port): # Bind interceptor to server server = grpc.server(futures.ThreadPoolExecutor(), interceptors=(SignatureValidationInterceptor(),)) helloworld_pb2_grpc.add_GreeterServicer_to_server(SimpleGreeter(), server) # Loading credentials server_credentials = grpc.ssl_server_credentials((( _credentials.SERVER_CERTIFICATE_KEY, _credentials.SERVER_CERTIFICATE, ),)) # Pass down credentials port = server.add_secure_port(_LISTEN_ADDRESS_TEMPLATE % port, server_credentials) server.start() try: yield server, port finally: server.stop(0) def main(): parser = argparse.ArgumentParser() parser.add_argument('--port', nargs='?', type=int, default=50051, help='the listening port') args = parser.parse_args() with run_server(args.port) as (server, port): logging.info('Server is listening at port :%d', port) server.wait_for_termination() if __name__ == '__main__': logging.basicConfig(level=logging.INFO) main() grpc-1.30.2/examples/python/auth/test/000077500000000000000000000000001370425124100176065ustar00rootroot00000000000000grpc-1.30.2/examples/python/auth/test/_auth_example_test.py000066400000000000000000000042661370425124100240420ustar00rootroot00000000000000# Copyright 2019 The gRPC 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 # # 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. """Test for gRPC Python authentication example.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function import unittest import grpc from examples.python.auth import _credentials from examples.python.auth import customized_auth_client from examples.python.auth import customized_auth_server _SERVER_ADDR_TEMPLATE = 'localhost:%d' class AuthExampleTest(unittest.TestCase): def test_successful_call(self): with customized_auth_server.run_server(0) as (_, port): with customized_auth_client.create_client_channel( _SERVER_ADDR_TEMPLATE % port) as channel: customized_auth_client.send_rpc(channel) # No unhandled exception raised, test passed! def test_no_channel_credential(self): with customized_auth_server.run_server(0) as (_, port): with grpc.insecure_channel(_SERVER_ADDR_TEMPLATE % port) as channel: resp = customized_auth_client.send_rpc(channel) self.assertEqual(resp.code(), grpc.StatusCode.UNAVAILABLE) def test_no_call_credential(self): with customized_auth_server.run_server(0) as (_, port): channel_credential = grpc.ssl_channel_credentials( _credentials.ROOT_CERTIFICATE) with grpc.secure_channel(_SERVER_ADDR_TEMPLATE % port, channel_credential) as channel: resp = customized_auth_client.send_rpc(channel) self.assertEqual(resp.code(), grpc.StatusCode.UNAUTHENTICATED) if __name__ == '__main__': unittest.main(verbosity=2) grpc-1.30.2/examples/python/cancellation/000077500000000000000000000000001370425124100203225ustar00rootroot00000000000000grpc-1.30.2/examples/python/cancellation/BUILD.bazel000066400000000000000000000040251370425124100222010ustar00rootroot00000000000000# gRPC Bazel BUILD file. # # Copyright 2019 The gRPC 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 # # 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. load("@grpc_python_dependencies//:requirements.bzl", "requirement") load("@rules_proto//proto:defs.bzl", "proto_library") load("//bazel:python_rules.bzl", "py_grpc_library", "py_proto_library") package(default_testonly = 1) proto_library( name = "hash_name_proto", srcs = ["hash_name.proto"], ) py_proto_library( name = "hash_name_py_pb2", deps = [":hash_name_proto"], ) py_grpc_library( name = "hash_name_py_pb2_grpc", srcs = [":hash_name_proto"], deps = [":hash_name_py_pb2"], ) py_binary( name = "client", srcs = ["client.py"], python_version = "PY3", srcs_version = "PY2AND3", deps = [ ":hash_name_py_pb2", ":hash_name_py_pb2_grpc", "//src/python/grpcio/grpc:grpcio", "@six", ], ) py_library( name = "search", srcs = ["search.py"], srcs_version = "PY2AND3", deps = [ ":hash_name_py_pb2", ], ) py_binary( name = "server", srcs = ["server.py"], python_version = "PY3", srcs_version = "PY2AND3", deps = [ "//src/python/grpcio/grpc:grpcio", ":hash_name_py_pb2", ":search", ] + select({ "//conditions:default": ["@futures//:futures"], "//:python3": [], }), ) py_test( name = "test/_cancellation_example_test", size = "small", srcs = ["test/_cancellation_example_test.py"], data = [ ":client", ":server", ], python_version = "PY3", ) grpc-1.30.2/examples/python/cancellation/README.md000066400000000000000000000114111370425124100215770ustar00rootroot00000000000000### Cancellation In the example, we implement a silly algorithm. We search for bytestrings whose hashes are similar to a given search string. For example, say we're looking for the string "doctor". Our algorithm may return `JrqhZVkTDoctYrUlXDbL6pfYQHU=` or `RC9/7mlM3ldy4TdoctOc6WzYbO4=`. This is a brute force algorithm, so the server performing the search must be conscious of the resources it allows to each client and each client must be conscientious of the resources it demands of the server. In particular, we ensure that client processes cancel the stream explicitly before terminating and we ensure that server processes cancel RPCs that have gone on longer than a certain number of iterations. #### Cancellation on the Client Side A client may cancel an RPC for several reasons. Perhaps the data it requested has been made irrelevant. Perhaps you, as the client, want to be a good citizen of the server and are conserving compute resources. ##### Cancelling a Server-Side Unary RPC from the Client The default RPC methods on a stub will simply return the result of an RPC. ```python >>> stub = hash_name_pb2_grpc.HashFinderStub(channel) >>> stub.Find(hash_name_pb2.HashNameRequest(desired_name=name)) ``` But you may use the `future()` method to receive an instance of `grpc.Future`. This interface allows you to wait on a response with a timeout, add a callback to be executed when the RPC completes, or to cancel the RPC before it has completed. In the example, we use this interface to cancel our in-progress RPC when the user interrupts the process with ctrl-c. ```python stub = hash_name_pb2_grpc.HashFinderStub(channel) future = stub.Find.future(hash_name_pb2.HashNameRequest(desired_name=name)) def cancel_request(unused_signum, unused_frame): future.cancel() sys.exit(0) signal.signal(signal.SIGINT, cancel_request) result = future.result() print(result) ``` We also call `sys.exit(0)` to terminate the process. If we do not do this, then `future.result()` with throw an `RpcError`. Alternatively, you may catch this exception. ##### Cancelling a Server-Side Streaming RPC from the Client Cancelling a Server-side streaming RPC is even simpler from the perspective of the gRPC API. The default stub method is already an instance of `grpc.Future`, so the methods outlined above still apply. It is also a generator, so we may iterate over it to yield the results of our RPC. ```python stub = hash_name_pb2_grpc.HashFinderStub(channel) result_generator = stub.FindRange(hash_name_pb2.HashNameRequest(desired_name=name)) def cancel_request(unused_signum, unused_frame): result_generator.cancel() sys.exit(0) signal.signal(signal.SIGINT, cancel_request) for result in result_generator: print(result) ``` We also call `sys.exit(0)` here to terminate the process. Alternatively, you may catch the `RpcError` raised by the for loop upon cancellation. #### Cancellation on the Server Side A server is responsible for cancellation in two ways. It must respond in some way when a client initiates a cancellation, otherwise long-running computations could continue indefinitely. It may also decide to cancel the RPC for its own reasons. In our example, the server can be configured to cancel an RPC after a certain number of hashes has been computed in order to conserve compute resources. ##### Responding to Cancellations from a Servicer Thread It's important to remember that a gRPC Python server is backed by a thread pool with a fixed size. When an RPC is cancelled, the library does *not* terminate your servicer thread. It is your responsibility as the application author to ensure that your servicer thread terminates soon after the RPC has been cancelled. In this example, we use the `ServicerContext.add_callback` method to set a `threading.Event` object when the RPC is terminated. We pass this `Event` object down through our hashing algorithm and ensure to check that the RPC is still ongoing before each iteration. ```python stop_event = threading.Event() def on_rpc_done(): # Regain servicer thread. stop_event.set() context.add_callback(on_rpc_done) secret = _find_secret(stop_event) ``` ##### Initiating a Cancellation on the Server Side Initiating a cancellation from the server side is simpler. Just call `ServicerContext.cancel()`. In our example, we ensure that no single client is monopolizing the server by cancelling after a configurable number of hashes have been checked. ```python try: for candidate in secret_generator: yield candidate except ResourceLimitExceededError: print("Cancelling RPC due to exhausted resources.") context.cancel() ``` In this type of situation, you may also consider returning a more specific error using the [`grpcio-status`](https://pypi.org/project/grpcio-status/) package. grpc-1.30.2/examples/python/cancellation/client.py000066400000000000000000000066501370425124100221610ustar00rootroot00000000000000# Copyright 2019 the gRPC 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 # # 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. """An example of cancelling requests in gRPC.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function import argparse import logging import signal import sys import grpc from examples.python.cancellation import hash_name_pb2 from examples.python.cancellation import hash_name_pb2_grpc _DESCRIPTION = "A client for finding hashes similar to names." _LOGGER = logging.getLogger(__name__) def run_unary_client(server_target, name, ideal_distance): with grpc.insecure_channel(server_target) as channel: stub = hash_name_pb2_grpc.HashFinderStub(channel) future = stub.Find.future(hash_name_pb2.HashNameRequest( desired_name=name, ideal_hamming_distance=ideal_distance), wait_for_ready=True) def cancel_request(unused_signum, unused_frame): future.cancel() sys.exit(0) signal.signal(signal.SIGINT, cancel_request) result = future.result() print(result) def run_streaming_client(server_target, name, ideal_distance, interesting_distance): with grpc.insecure_channel(server_target) as channel: stub = hash_name_pb2_grpc.HashFinderStub(channel) result_generator = stub.FindRange(hash_name_pb2.HashNameRequest( desired_name=name, ideal_hamming_distance=ideal_distance, interesting_hamming_distance=interesting_distance), wait_for_ready=True) def cancel_request(unused_signum, unused_frame): result_generator.cancel() sys.exit(0) signal.signal(signal.SIGINT, cancel_request) for result in result_generator: print(result) def main(): parser = argparse.ArgumentParser(description=_DESCRIPTION) parser.add_argument("name", type=str, help='The desired name.') parser.add_argument("--ideal-distance", default=0, nargs='?', type=int, help="The desired Hamming distance.") parser.add_argument('--server', default='localhost:50051', type=str, nargs='?', help='The host-port pair at which to reach the server.') parser.add_argument( '--show-inferior', default=None, type=int, nargs='?', help='Also show candidates with a Hamming distance less than this value.' ) args = parser.parse_args() if args.show_inferior is not None: run_streaming_client(args.server, args.name, args.ideal_distance, args.show_inferior) else: run_unary_client(args.server, args.name, args.ideal_distance) if __name__ == "__main__": logging.basicConfig() main() grpc-1.30.2/examples/python/cancellation/hash_name.proto000066400000000000000000000037131370425124100233360ustar00rootroot00000000000000// Copyright 2019 the gRPC 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 // // 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. syntax = "proto3"; package hash_name; // A request for a single secret whose hash is similar to a desired name. message HashNameRequest { // The string that is desired in the secret's hash. string desired_name = 1; // The ideal Hamming distance between desired_name and the secret that will // be searched for. int32 ideal_hamming_distance = 2; // A Hamming distance greater than the ideal Hamming distance. Search results // with a Hamming distance less than this value but greater than the ideal // distance will be returned back to the client but will not terminate the // search. int32 interesting_hamming_distance = 3; } message HashNameResponse { // The search result. string secret = 1; // The hash of the search result. A substring of this is of // ideal_hamming_distance Hamming distance or less from desired_name. string hashed_name = 2; // The Hamming distance between hashed_name and desired_name. int32 hamming_distance = 3; } service HashFinder { // Search for a single string whose hash is similar to the specified // desired_name. interesting_hamming_distance is ignored. rpc Find (HashNameRequest) returns (HashNameResponse) {} // Search for a string whose hash is similar to the specified desired_name, // but also stream back less-than-ideal candidates. rpc FindRange (HashNameRequest) returns (stream HashNameResponse) {} } grpc-1.30.2/examples/python/cancellation/search.py000066400000000000000000000120661370425124100221460ustar00rootroot00000000000000# Copyright 2019 the gRPC 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 # # 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. """A search algorithm over the space of all bytestrings.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function import base64 import hashlib import itertools import logging import struct from examples.python.cancellation import hash_name_pb2 _LOGGER = logging.getLogger(__name__) _BYTE_MAX = 255 def _get_hamming_distance(a, b): """Calculates hamming distance between strings of equal length.""" distance = 0 for char_a, char_b in zip(a, b): if char_a != char_b: distance += 1 return distance def _get_substring_hamming_distance(candidate, target): """Calculates the minimum hamming distance between between the target and any substring of the candidate. Args: candidate: The string whose substrings will be tested. target: The target string. Returns: The minimum Hamming distance between candidate and target. """ min_distance = None if len(target) > len(candidate): raise ValueError("Candidate must be at least as long as target.") for i in range(len(candidate) - len(target) + 1): distance = _get_hamming_distance(candidate[i:i + len(target)].lower(), target.lower()) if min_distance is None or distance < min_distance: min_distance = distance return min_distance def _get_hash(secret): hasher = hashlib.sha1() hasher.update(secret) return base64.b64encode(hasher.digest()).decode('ascii') class ResourceLimitExceededError(Exception): """Signifies the request has exceeded configured limits.""" def _bytestrings_of_length(length): """Generates a stream containing all bytestrings of a given length. Args: length: A positive integer length. Yields: All bytestrings of length `length`. """ for digits in itertools.product(range(_BYTE_MAX), repeat=length): yield b''.join(struct.pack('B', i) for i in digits) def _all_bytestrings(): """Generates a stream containing all possible bytestrings. This generator does not terminate. Yields: All bytestrings in ascending order of length. """ for bytestring in itertools.chain.from_iterable( _bytestrings_of_length(length) for length in itertools.count()): yield bytestring def search(target, ideal_distance, stop_event, maximum_hashes, interesting_hamming_distance=None): """Find candidate strings. Search through the space of all bytestrings, in order of increasing length, indefinitely, until a hash with a Hamming distance of `maximum_distance` or less has been found. Args: target: The search string. ideal_distance: The desired Hamming distance. stop_event: An event indicating whether the RPC should terminate. maximum_hashes: The maximum number of hashes to check before stopping. interesting_hamming_distance: If specified, strings with a Hamming distance from the target below this value will be yielded. Yields: Instances of HashNameResponse. The final entry in the stream will be of `maximum_distance` Hamming distance or less from the target string, while all others will be of less than `interesting_hamming_distance`. Raises: ResourceLimitExceededError: If the computation exceeds `maximum_hashes` iterations. """ hashes_computed = 0 for secret in _all_bytestrings(): if stop_event.is_set(): raise StopIteration() # pylint: disable=stop-iteration-return candidate_hash = _get_hash(secret) distance = _get_substring_hamming_distance(candidate_hash, target) if interesting_hamming_distance is not None and distance <= interesting_hamming_distance: # Surface interesting candidates, but don't stop. yield hash_name_pb2.HashNameResponse( secret=base64.b64encode(secret), hashed_name=candidate_hash, hamming_distance=distance) elif distance <= ideal_distance: # Yield ideal candidate and end the stream. yield hash_name_pb2.HashNameResponse( secret=base64.b64encode(secret), hashed_name=candidate_hash, hamming_distance=distance) raise StopIteration() # pylint: disable=stop-iteration-return hashes_computed += 1 if hashes_computed == maximum_hashes: raise ResourceLimitExceededError() grpc-1.30.2/examples/python/cancellation/server.py000066400000000000000000000101321370425124100221770ustar00rootroot00000000000000# Copyright 2019 the gRPC 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 # # 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. """An example of cancelling requests in gRPC.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function from concurrent import futures import argparse import logging import threading import grpc import search from examples.python.cancellation import hash_name_pb2 from examples.python.cancellation import hash_name_pb2_grpc _LOGGER = logging.getLogger(__name__) _SERVER_HOST = 'localhost' _DESCRIPTION = "A server for finding hashes similar to names." class HashFinder(hash_name_pb2_grpc.HashFinderServicer): def __init__(self, maximum_hashes): super(HashFinder, self).__init__() self._maximum_hashes = maximum_hashes def Find(self, request, context): stop_event = threading.Event() def on_rpc_done(): _LOGGER.debug("Attempting to regain servicer thread.") stop_event.set() context.add_callback(on_rpc_done) candidates = [] try: candidates = list( search.search(request.desired_name, request.ideal_hamming_distance, stop_event, self._maximum_hashes)) except search.ResourceLimitExceededError: _LOGGER.info("Cancelling RPC due to exhausted resources.") context.cancel() _LOGGER.debug("Servicer thread returning.") if not candidates: return hash_name_pb2.HashNameResponse() return candidates[-1] def FindRange(self, request, context): stop_event = threading.Event() def on_rpc_done(): _LOGGER.debug("Attempting to regain servicer thread.") stop_event.set() context.add_callback(on_rpc_done) secret_generator = search.search( request.desired_name, request.ideal_hamming_distance, stop_event, self._maximum_hashes, interesting_hamming_distance=request.interesting_hamming_distance) try: for candidate in secret_generator: yield candidate except search.ResourceLimitExceededError: _LOGGER.info("Cancelling RPC due to exhausted resources.") context.cancel() _LOGGER.debug("Regained servicer thread.") def _running_server(port, maximum_hashes): # We use only a single servicer thread here to demonstrate that, if managed # carefully, cancelled RPCs can need not continue occupying servicers # threads. server = grpc.server(futures.ThreadPoolExecutor(max_workers=1), maximum_concurrent_rpcs=1) hash_name_pb2_grpc.add_HashFinderServicer_to_server( HashFinder(maximum_hashes), server) address = '{}:{}'.format(_SERVER_HOST, port) actual_port = server.add_insecure_port(address) server.start() print("Server listening at '{}'".format(address)) return server def main(): parser = argparse.ArgumentParser(description=_DESCRIPTION) parser.add_argument('--port', type=int, default=50051, nargs='?', help='The port on which the server will listen.') parser.add_argument( '--maximum-hashes', type=int, default=1000000, nargs='?', help='The maximum number of hashes to search before cancelling.') args = parser.parse_args() server = _running_server(args.port, args.maximum_hashes) server.wait_for_termination() if __name__ == "__main__": logging.basicConfig() main() grpc-1.30.2/examples/python/cancellation/test/000077500000000000000000000000001370425124100213015ustar00rootroot00000000000000grpc-1.30.2/examples/python/cancellation/test/_cancellation_example_test.py000066400000000000000000000062001370425124100272160ustar00rootroot00000000000000# Copyright 2019 the gRPC 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 # # 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. """Test for cancellation example.""" import contextlib import os import signal import socket import subprocess import unittest _BINARY_DIR = os.path.realpath( os.path.join(os.path.dirname(os.path.abspath(__file__)), '..')) _SERVER_PATH = os.path.join(_BINARY_DIR, 'server') _CLIENT_PATH = os.path.join(_BINARY_DIR, 'client') @contextlib.contextmanager def _get_port(): sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) if sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT) == 0: raise RuntimeError("Failed to set SO_REUSEPORT.") sock.bind(('', 0)) try: yield sock.getsockname()[1] finally: sock.close() def _start_client(server_port, desired_string, ideal_distance, interesting_distance=None): interesting_distance_args = () if interesting_distance is None else ( '--show-inferior', interesting_distance) return subprocess.Popen((_CLIENT_PATH, desired_string, '--server', 'localhost:{}'.format(server_port), '--ideal-distance', str(ideal_distance)) + interesting_distance_args) class CancellationExampleTest(unittest.TestCase): def test_successful_run(self): with _get_port() as test_port: server_process = subprocess.Popen( (_SERVER_PATH, '--port', str(test_port))) try: client_process = _start_client(test_port, 'aa', 0) client_return_code = client_process.wait() self.assertEqual(0, client_return_code) self.assertIsNone(server_process.poll()) finally: server_process.kill() server_process.wait() def test_graceful_sigint(self): with _get_port() as test_port: server_process = subprocess.Popen( (_SERVER_PATH, '--port', str(test_port))) try: client_process1 = _start_client(test_port, 'aaaaaaaaaa', 0) client_process1.send_signal(signal.SIGINT) client_process1.wait() client_process2 = _start_client(test_port, 'aa', 0) client_return_code = client_process2.wait() self.assertEqual(0, client_return_code) self.assertIsNone(server_process.poll()) finally: server_process.kill() server_process.wait() if __name__ == '__main__': unittest.main(verbosity=2) grpc-1.30.2/examples/python/compression/000077500000000000000000000000001370425124100202275ustar00rootroot00000000000000grpc-1.30.2/examples/python/compression/BUILD.bazel000066400000000000000000000025131370425124100221060ustar00rootroot00000000000000# Copyright 2019 The gRPC 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 # # 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. py_binary( name = "server", srcs = ["server.py"], python_version = "PY3", srcs_version = "PY2AND3", deps = [ "//examples:helloworld_py_pb2", "//examples:helloworld_py_pb2_grpc", "//src/python/grpcio/grpc:grpcio", ], ) py_binary( name = "client", srcs = ["client.py"], python_version = "PY3", srcs_version = "PY2AND3", deps = [ "//examples:helloworld_py_pb2", "//examples:helloworld_py_pb2_grpc", "//src/python/grpcio/grpc:grpcio", ], ) py_test( name = "test/compression_example_test", size = "small", srcs = ["test/compression_example_test.py"], data = [ ":client", ":server", ], python_version = "PY3", srcs_version = "PY2AND3", ) grpc-1.30.2/examples/python/compression/README.md000066400000000000000000000033661370425124100215160ustar00rootroot00000000000000## Compression with gRPC Python gRPC offers lossless compression options in order to decrease the number of bits transferred over the wire. Three levels of compression are available: - `grpc.Compression.NoCompression` - No compression is applied to the payload. (default) - `grpc.Compression.Deflate` - The "Deflate" algorithm is applied to the payload. - `grpc.Compression.Gzip` - The Gzip algorithm is applied to the payload. The default option on both clients and servers is `grpc.Compression.NoCompression`. See [the gRPC Compression Spec](https://github.com/grpc/grpc/blob/master/doc/compression.md) for more information. ### Client Side Compression Compression may be set at two levels on the client side. #### At the channel level ```python with grpc.insecure_channel('foo.bar:1234', compression=grpc.Compression.Gzip) as channel: use_channel(channel) ``` #### At the call level Setting the compression method at the call level will override any settings on the channel level. ```python stub = helloworld_pb2_grpc.GreeterStub(channel) response = stub.SayHello(helloworld_pb2.HelloRequest(name='you'), compression=grpc.Compression.Deflate) ``` ### Server Side Compression Additionally, compression may be set at two levels on the server side. #### On the entire server ```python server = grpc.server(futures.ThreadPoolExecutor(), compression=grpc.Compression.Gzip) ``` #### For an individual RPC ```python def SayHello(self, request, context): context.set_response_compression(grpc.Compression.NoCompression) return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name) ``` Setting the compression method for an individual RPC will override any setting supplied at server creation time. grpc-1.30.2/examples/python/compression/client.py000066400000000000000000000051711370425124100220630ustar00rootroot00000000000000# Copyright 2019 the gRPC 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 # # 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. """An example of compression on the client side with gRPC.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function import argparse import logging import grpc from examples import helloworld_pb2 from examples import helloworld_pb2_grpc _DESCRIPTION = 'A client capable of compression.' _COMPRESSION_OPTIONS = { "none": grpc.Compression.NoCompression, "deflate": grpc.Compression.Deflate, "gzip": grpc.Compression.Gzip, } _LOGGER = logging.getLogger(__name__) def run_client(channel_compression, call_compression, target): with grpc.insecure_channel(target, compression=channel_compression) as channel: stub = helloworld_pb2_grpc.GreeterStub(channel) response = stub.SayHello(helloworld_pb2.HelloRequest(name='you'), compression=call_compression, wait_for_ready=True) print("Response: {}".format(response)) def main(): parser = argparse.ArgumentParser(description=_DESCRIPTION) parser.add_argument('--channel_compression', default='none', nargs='?', choices=_COMPRESSION_OPTIONS.keys(), help='The compression method to use for the channel.') parser.add_argument( '--call_compression', default='none', nargs='?', choices=_COMPRESSION_OPTIONS.keys(), help='The compression method to use for an individual call.') parser.add_argument('--server', default='localhost:50051', type=str, nargs='?', help='The host-port pair at which to reach the server.') args = parser.parse_args() channel_compression = _COMPRESSION_OPTIONS[args.channel_compression] call_compression = _COMPRESSION_OPTIONS[args.call_compression] run_client(channel_compression, call_compression, args.server) if __name__ == "__main__": logging.basicConfig() main() grpc-1.30.2/examples/python/compression/server.py000066400000000000000000000067471370425124100221250ustar00rootroot00000000000000# Copyright 2019 the gRPC 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 # # 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. """An example of compression on the server side with gRPC.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function from concurrent import futures import argparse import logging import threading import grpc from examples import helloworld_pb2 from examples import helloworld_pb2_grpc _DESCRIPTION = 'A server capable of compression.' _COMPRESSION_OPTIONS = { "none": grpc.Compression.NoCompression, "deflate": grpc.Compression.Deflate, "gzip": grpc.Compression.Gzip, } _LOGGER = logging.getLogger(__name__) _SERVER_HOST = 'localhost' class Greeter(helloworld_pb2_grpc.GreeterServicer): def __init__(self, no_compress_every_n): super(Greeter, self).__init__() self._no_compress_every_n = 0 self._request_counter = 0 self._counter_lock = threading.RLock() def _should_suppress_compression(self): suppress_compression = False with self._counter_lock: if self._no_compress_every_n and self._request_counter % self._no_compress_every_n == 0: suppress_compression = True self._request_counter += 1 return suppress_compression def SayHello(self, request, context): if self._should_suppress_compression(): context.set_response_compression(grpc.Compression.NoCompression) return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name) def run_server(server_compression, no_compress_every_n, port): server = grpc.server(futures.ThreadPoolExecutor(), compression=server_compression, options=(('grpc.so_reuseport', 1),)) helloworld_pb2_grpc.add_GreeterServicer_to_server( Greeter(no_compress_every_n), server) address = '{}:{}'.format(_SERVER_HOST, port) server.add_insecure_port(address) server.start() print("Server listening at '{}'".format(address)) server.wait_for_termination() def main(): parser = argparse.ArgumentParser(description=_DESCRIPTION) parser.add_argument('--server_compression', default='none', nargs='?', choices=_COMPRESSION_OPTIONS.keys(), help='The default compression method for the server.') parser.add_argument('--no_compress_every_n', type=int, default=0, nargs='?', help='If set, every nth reply will be uncompressed.') parser.add_argument('--port', type=int, default=50051, nargs='?', help='The port on which the server will listen.') args = parser.parse_args() run_server(_COMPRESSION_OPTIONS[args.server_compression], args.no_compress_every_n, args.port) if __name__ == "__main__": logging.basicConfig() main() grpc-1.30.2/examples/python/compression/test/000077500000000000000000000000001370425124100212065ustar00rootroot00000000000000grpc-1.30.2/examples/python/compression/test/compression_example_test.py000066400000000000000000000041611370425124100266750ustar00rootroot00000000000000# Copyright 2019 the gRPC 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 # # 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. """Test for compression example.""" import contextlib import os import socket import subprocess import unittest _BINARY_DIR = os.path.realpath( os.path.join(os.path.dirname(os.path.abspath(__file__)), '..')) _SERVER_PATH = os.path.join(_BINARY_DIR, 'server') _CLIENT_PATH = os.path.join(_BINARY_DIR, 'client') @contextlib.contextmanager def _get_port(): sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) if sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT) == 0: raise RuntimeError("Failed to set SO_REUSEPORT.") sock.bind(('', 0)) try: yield sock.getsockname()[1] finally: sock.close() class CompressionExampleTest(unittest.TestCase): def test_compression_example(self): with _get_port() as test_port: server_process = subprocess.Popen( (_SERVER_PATH, '--port', str(test_port), '--server_compression', 'gzip')) try: server_target = 'localhost:{}'.format(test_port) client_process = subprocess.Popen( (_CLIENT_PATH, '--server', server_target, '--channel_compression', 'gzip')) client_return_code = client_process.wait() self.assertEqual(0, client_return_code) self.assertIsNone(server_process.poll()) finally: server_process.kill() server_process.wait() if __name__ == '__main__': unittest.main(verbosity=2) grpc-1.30.2/examples/python/data_transmission/000077500000000000000000000000001370425124100214105ustar00rootroot00000000000000grpc-1.30.2/examples/python/data_transmission/BUILD000066400000000000000000000024241370425124100221740ustar00rootroot00000000000000# Copyright 2020 gRPC 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 # # 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. licenses(["notice"]) # 3-clause BSD load("@grpc_python_dependencies//:requirements.bzl", "requirement") py_binary( name = "alts_server", srcs = [ "alts_server.py", "demo_pb2.py", "demo_pb2_grpc.py", "server.py", ], main = "alts_server.py", python_version = "PY3", srcs_version = "PY2AND3", deps = [ "//src/python/grpcio/grpc:grpcio", ], ) py_binary( name = "alts_client", srcs = [ "alts_client.py", "client.py", "demo_pb2.py", "demo_pb2_grpc.py", ], main = "alts_client.py", python_version = "PY3", srcs_version = "PY2AND3", deps = [ "//src/python/grpcio/grpc:grpcio", ], ) grpc-1.30.2/examples/python/data_transmission/README.cn.md000066400000000000000000000017611370425124100232730ustar00rootroot00000000000000## Data transmission demo for using gRPC in Python 在Python中使用gRPC时, 进行数据传输的四种方式 [官方指南]() - #### 一元模式 在一次调用中, 客户端只能向服务器传输一次请求数据, 服务器也只能返回一次响应 `client.py: simple_method` `server.py: SimpleMethod` - #### 客户端流模式 在一次调用中, 客户端可以多次向服务器传输数据, 但是服务器只能返回一次响应 `client.py: client_streaming_method ` `server.py: ClientStreamingMethod` - #### 服务端流模式 在一次调用中, 客户端只能向服务器传输一次请求数据, 但是服务器可以多次返回响应 `client.py: server_streaming_method` `server.py: ServerStreamingMethod` - #### 双向流模式 在一次调用中, 客户端和服务器都可以向对方多次收发数据 `client.py: bidirectional_streaming_method` `server.py: BidirectionalStreamingMethod` grpc-1.30.2/examples/python/data_transmission/README.en.md000066400000000000000000000020321370425124100232650ustar00rootroot00000000000000## Data transmission demo for using gRPC in Python Four ways of data transmission when gRPC is used in Python. [Official Guide]() - #### unary-unary In a single call, the client can only send request once, and the server can only respond once. `client.py: simple_method` `server.py: SimpleMethod` - #### stream-unary In a single call, the client can transfer data to the server an arbitrary number of times, but the server can only return a response once. `client.py: client_streaming_method` `server.py: ClientStreamingMethod` - #### unary-stream In a single call, the client can only transmit data to the server at one time, but the server can return the response many times. `client.py: server_streaming_method` `server.py: ServerStreamingMethod` - #### stream-stream In a single call, both client and server can send and receive data to each other multiple times. `client.py: bidirectional_streaming_method` `server.py: BidirectionalStreamingMethod` grpc-1.30.2/examples/python/data_transmission/alts_client.py000066400000000000000000000024151370425124100242650ustar00rootroot00000000000000# Copyright 2020 gRPC 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 # # 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. """The example of using ALTS credentials to setup gRPC client. The example would only successfully run in GCP environment.""" import grpc import demo_pb2_grpc from client import (bidirectional_streaming_method, client_streaming_method, server_streaming_method, simple_method) SERVER_ADDRESS = "localhost:23333" def main(): with grpc.secure_channel( SERVER_ADDRESS, credentials=grpc.alts_channel_credentials()) as channel: stub = demo_pb2_grpc.GRPCDemoStub(channel) simple_method(stub) client_streaming_method(stub) server_streaming_method(stub) bidirectional_streaming_method(stub) if __name__ == '__main__': main() grpc-1.30.2/examples/python/data_transmission/alts_server.py000066400000000000000000000023541370425124100243170ustar00rootroot00000000000000# Copyright 2020 gRPC 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 # # 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. """The example of using ALTS credentials to setup gRPC server in python. The example would only successfully run in GCP environment.""" from concurrent import futures import grpc import demo_pb2_grpc from server import DemoServer SERVER_ADDRESS = 'localhost:23333' def main(): svr = grpc.server(futures.ThreadPoolExecutor()) demo_pb2_grpc.add_GRPCDemoServicer_to_server(DemoServer(), svr) svr.add_secure_port(SERVER_ADDRESS, server_credentials=grpc.alts_server_credentials()) print("------------------start Python GRPC server with ALTS encryption") svr.start() svr.wait_for_termination() if __name__ == '__main__': main() grpc-1.30.2/examples/python/data_transmission/client.py000066400000000000000000000112341370425124100232410ustar00rootroot00000000000000# Copyright 2019 gRPC 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 # # 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. """The example of four ways of data transmission using gRPC in Python.""" import time import grpc import demo_pb2_grpc import demo_pb2 __all__ = [ 'simple_method', 'client_streaming_method', 'server_streaming_method', 'bidirectional_streaming_method' ] SERVER_ADDRESS = "localhost:23333" CLIENT_ID = 1 # 中文注释和英文翻译 # Note that this example was contributed by an external user using Chinese comments. # In all cases, the Chinese comment text is translated to English just below it. # 一元模式(在一次调用中, 客户端只能向服务器传输一次请求数据, 服务器也只能返回一次响应) # unary-unary(In a single call, the client can only send request once, and the server can # only respond once.) def simple_method(stub): print("--------------Call SimpleMethod Begin--------------") request = demo_pb2.Request(client_id=CLIENT_ID, request_data="called by Python client") response = stub.SimpleMethod(request) print("resp from server(%d), the message=%s" % (response.server_id, response.response_data)) print("--------------Call SimpleMethod Over---------------") # 客户端流模式(在一次调用中, 客户端可以多次向服务器传输数据, 但是服务器只能返回一次响应) # stream-unary (In a single call, the client can transfer data to the server several times, # but the server can only return a response once.) def client_streaming_method(stub): print("--------------Call ClientStreamingMethod Begin--------------") # 创建一个生成器 # create a generator def request_messages(): for i in range(5): request = demo_pb2.Request( client_id=CLIENT_ID, request_data=("called by Python client, message:%d" % i)) yield request response = stub.ClientStreamingMethod(request_messages()) print("resp from server(%d), the message=%s" % (response.server_id, response.response_data)) print("--------------Call ClientStreamingMethod Over---------------") # 服务端流模式(在一次调用中, 客户端只能一次向服务器传输数据, 但是服务器可以多次返回响应) # unary-stream (In a single call, the client can only transmit data to the server at one time, # but the server can return the response many times.) def server_streaming_method(stub): print("--------------Call ServerStreamingMethod Begin--------------") request = demo_pb2.Request(client_id=CLIENT_ID, request_data="called by Python client") response_iterator = stub.ServerStreamingMethod(request) for response in response_iterator: print("recv from server(%d), message=%s" % (response.server_id, response.response_data)) print("--------------Call ServerStreamingMethod Over---------------") # 双向流模式 (在一次调用中, 客户端和服务器都可以向对方多次收发数据) # stream-stream (In a single call, both client and server can send and receive data # to each other multiple times.) def bidirectional_streaming_method(stub): print( "--------------Call BidirectionalStreamingMethod Begin---------------") # 创建一个生成器 # create a generator def request_messages(): for i in range(5): request = demo_pb2.Request( client_id=CLIENT_ID, request_data=("called by Python client, message: %d" % i)) yield request time.sleep(1) response_iterator = stub.BidirectionalStreamingMethod(request_messages()) for response in response_iterator: print("recv from server(%d), message=%s" % (response.server_id, response.response_data)) print("--------------Call BidirectionalStreamingMethod Over---------------") def main(): with grpc.insecure_channel(SERVER_ADDRESS) as channel: stub = demo_pb2_grpc.GRPCDemoStub(channel) simple_method(stub) client_streaming_method(stub) server_streaming_method(stub) bidirectional_streaming_method(stub) if __name__ == '__main__': main() grpc-1.30.2/examples/python/data_transmission/demo.proto000066400000000000000000000061731370425124100234300ustar00rootroot00000000000000// Copyright 2019 gRPC 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 // // 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. // 语法版本声明,必须放在非注释的第一行 // Syntax version declaration. Must be placed on the first line of non-commentary. syntax = "proto3"; // The document of proto3: https://developers.google.com/protocol-buffers/docs/proto3 // 包名定义, Python中使用时可以省略不写 // Package name definition, which can be omitted in Python. package demo; /* `message`是用来定义传输的数据的格式的, 等号后面的是字段编号 消息定义中的每个字段都有唯一的编号 总体格式类似于Python中定义一个类或者Golang中定义一个结构体 */ /* `message` is used to define the structure of the data to be transmitted, after the equal sign is the field number. Each field in the message definition has a unique number. The overall format is similar to defining a class in Python or a structure in Golang. */ message Request { int64 client_id = 1; string request_data = 2; } message Response { int64 server_id = 1; string response_data = 2; } // `service` 是用来给gRPC服务定义方法的, 格式固定, 类似于Golang中定义一个接口 // `service` is used to define methods for gRPC services in a fixed format, similar to defining //an interface in Golang service GRPCDemo { // 一元模式(在一次调用中, 客户端只能向服务器传输一次请求数据, 服务器也只能返回一次响应) // unary-unary(In a single call, the client can only send request once, and the server can // only respond once.) rpc SimpleMethod (Request) returns (Response); // 客户端流模式(在一次调用中, 客户端可以多次向服务器传输数据, 但是服务器只能返回一次响应) // stream-unary (In a single call, the client can transfer data to the server several times, // but the server can only return a response once.) rpc ClientStreamingMethod (stream Request) returns (Response); // 服务端流模式(在一次调用中, 客户端只能一次向服务器传输数据, 但是服务器可以多次返回响应) // unary-stream (In a single call, the client can only transmit data to the server at one time, // but the server can return the response many times.) rpc ServerStreamingMethod (Request) returns (stream Response); // 双向流模式 (在一次调用中, 客户端和服务器都可以向对方多次收发数据) // stream-stream (In a single call, both client and server can send and receive data // to each other multiple times.) rpc BidirectionalStreamingMethod (stream Request) returns (stream Response); } grpc-1.30.2/examples/python/data_transmission/demo_pb2.py000066400000000000000000000124601370425124100234540ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: demo.proto import sys _b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() DESCRIPTOR = _descriptor.FileDescriptor( name='demo.proto', package='demo', syntax='proto3', serialized_options=None, serialized_pb=_b('\n\ndemo.proto\x12\x04\x64\x65mo\"2\n\x07Request\x12\x11\n\tclient_id\x18\x01 \x01(\x03\x12\x14\n\x0crequest_data\x18\x02 \x01(\t\"4\n\x08Response\x12\x11\n\tserver_id\x18\x01 \x01(\x03\x12\x15\n\rresponse_data\x18\x02 \x01(\t2\xf0\x01\n\x08GRPCDemo\x12-\n\x0cSimpleMethod\x12\r.demo.Request\x1a\x0e.demo.Response\x12\x38\n\x15\x43lientStreamingMethod\x12\r.demo.Request\x1a\x0e.demo.Response(\x01\x12\x38\n\x15ServerStreamingMethod\x12\r.demo.Request\x1a\x0e.demo.Response0\x01\x12\x41\n\x1c\x42idirectionalStreamingMethod\x12\r.demo.Request\x1a\x0e.demo.Response(\x01\x30\x01\x62\x06proto3') ) _REQUEST = _descriptor.Descriptor( name='Request', full_name='demo.Request', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( name='client_id', full_name='demo.Request.client_id', index=0, number=1, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='request_data', full_name='demo.Request.request_data', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=20, serialized_end=70, ) _RESPONSE = _descriptor.Descriptor( name='Response', full_name='demo.Response', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( name='server_id', full_name='demo.Response.server_id', index=0, number=1, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='response_data', full_name='demo.Response.response_data', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=72, serialized_end=124, ) DESCRIPTOR.message_types_by_name['Request'] = _REQUEST DESCRIPTOR.message_types_by_name['Response'] = _RESPONSE _sym_db.RegisterFileDescriptor(DESCRIPTOR) Request = _reflection.GeneratedProtocolMessageType('Request', (_message.Message,), { 'DESCRIPTOR' : _REQUEST, '__module__' : 'demo_pb2' # @@protoc_insertion_point(class_scope:demo.Request) }) _sym_db.RegisterMessage(Request) Response = _reflection.GeneratedProtocolMessageType('Response', (_message.Message,), { 'DESCRIPTOR' : _RESPONSE, '__module__' : 'demo_pb2' # @@protoc_insertion_point(class_scope:demo.Response) }) _sym_db.RegisterMessage(Response) _GRPCDEMO = _descriptor.ServiceDescriptor( name='GRPCDemo', full_name='demo.GRPCDemo', file=DESCRIPTOR, index=0, serialized_options=None, serialized_start=127, serialized_end=367, methods=[ _descriptor.MethodDescriptor( name='SimpleMethod', full_name='demo.GRPCDemo.SimpleMethod', index=0, containing_service=None, input_type=_REQUEST, output_type=_RESPONSE, serialized_options=None, ), _descriptor.MethodDescriptor( name='ClientStreamingMethod', full_name='demo.GRPCDemo.ClientStreamingMethod', index=1, containing_service=None, input_type=_REQUEST, output_type=_RESPONSE, serialized_options=None, ), _descriptor.MethodDescriptor( name='ServerStreamingMethod', full_name='demo.GRPCDemo.ServerStreamingMethod', index=2, containing_service=None, input_type=_REQUEST, output_type=_RESPONSE, serialized_options=None, ), _descriptor.MethodDescriptor( name='BidirectionalStreamingMethod', full_name='demo.GRPCDemo.BidirectionalStreamingMethod', index=3, containing_service=None, input_type=_REQUEST, output_type=_RESPONSE, serialized_options=None, ), ]) _sym_db.RegisterServiceDescriptor(_GRPCDEMO) DESCRIPTOR.services_by_name['GRPCDemo'] = _GRPCDEMO # @@protoc_insertion_point(module_scope) grpc-1.30.2/examples/python/data_transmission/demo_pb2_grpc.py000066400000000000000000000110541370425124100244650ustar00rootroot00000000000000# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! import grpc import demo_pb2 as demo__pb2 class GRPCDemoStub(object): """service是用来给GRPC服务定义方法的, 格式固定, 类似于Golang中定义一个接口 `service` is used to define methods for GRPC services in a fixed format, similar to defining an interface in Golang """ def __init__(self, channel): """Constructor. Args: channel: A grpc.Channel. """ self.SimpleMethod = channel.unary_unary( '/demo.GRPCDemo/SimpleMethod', request_serializer=demo__pb2.Request.SerializeToString, response_deserializer=demo__pb2.Response.FromString, ) self.ClientStreamingMethod = channel.stream_unary( '/demo.GRPCDemo/ClientStreamingMethod', request_serializer=demo__pb2.Request.SerializeToString, response_deserializer=demo__pb2.Response.FromString, ) self.ServerStreamingMethod = channel.unary_stream( '/demo.GRPCDemo/ServerStreamingMethod', request_serializer=demo__pb2.Request.SerializeToString, response_deserializer=demo__pb2.Response.FromString, ) self.BidirectionalStreamingMethod = channel.stream_stream( '/demo.GRPCDemo/BidirectionalStreamingMethod', request_serializer=demo__pb2.Request.SerializeToString, response_deserializer=demo__pb2.Response.FromString, ) class GRPCDemoServicer(object): """service是用来给GRPC服务定义方法的, 格式固定, 类似于Golang中定义一个接口 `service` is used to define methods for GRPC services in a fixed format, similar to defining an interface in Golang """ def SimpleMethod(self, request, context): """简单模式 unary-unary """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') def ClientStreamingMethod(self, request_iterator, context): """客户端流模式(在一次调用中, 客户端可以多次向服务器传输数据, 但是服务器只能返回一次响应) stream-unary (In a single call, the client can transfer data to the server several times, but the server can only return a response once.) """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') def ServerStreamingMethod(self, request, context): """服务端流模式(在一次调用中, 客户端只能一次向服务器传输数据, 但是服务器可以多次返回响应) unary-stream (In a single call, the client can only transmit data to the server at one time, but the server can return the response many times.) """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') def BidirectionalStreamingMethod(self, request_iterator, context): """双向流模式 (在一次调用中, 客户端和服务器都可以向对方多次收发数据) stream-stream (In a single call, both client and server can send and receive data to each other multiple times.) """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') def add_GRPCDemoServicer_to_server(servicer, server): rpc_method_handlers = { 'SimpleMethod': grpc.unary_unary_rpc_method_handler( servicer.SimpleMethod, request_deserializer=demo__pb2.Request.FromString, response_serializer=demo__pb2.Response.SerializeToString, ), 'ClientStreamingMethod': grpc.stream_unary_rpc_method_handler( servicer.ClientStreamingMethod, request_deserializer=demo__pb2.Request.FromString, response_serializer=demo__pb2.Response.SerializeToString, ), 'ServerStreamingMethod': grpc.unary_stream_rpc_method_handler( servicer.ServerStreamingMethod, request_deserializer=demo__pb2.Request.FromString, response_serializer=demo__pb2.Response.SerializeToString, ), 'BidirectionalStreamingMethod': grpc.stream_stream_rpc_method_handler( servicer.BidirectionalStreamingMethod, request_deserializer=demo__pb2.Request.FromString, response_serializer=demo__pb2.Response.SerializeToString, ), } generic_handler = grpc.method_handlers_generic_handler( 'demo.GRPCDemo', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) grpc-1.30.2/examples/python/data_transmission/server.py000066400000000000000000000106141370425124100232720ustar00rootroot00000000000000# Copyright 2019 gRPC 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 # # 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. """The example of four ways of data transmission using gRPC in Python.""" from threading import Thread from concurrent import futures import grpc import demo_pb2_grpc import demo_pb2 __all__ = 'DemoServer' SERVER_ADDRESS = 'localhost:23333' SERVER_ID = 1 class DemoServer(demo_pb2_grpc.GRPCDemoServicer): # 一元模式(在一次调用中, 客户端只能向服务器传输一次请求数据, 服务器也只能返回一次响应) # unary-unary(In a single call, the client can only send request once, and the server can # only respond once.) def SimpleMethod(self, request, context): print("SimpleMethod called by client(%d) the message: %s" % (request.client_id, request.request_data)) response = demo_pb2.Response( server_id=SERVER_ID, response_data="Python server SimpleMethod Ok!!!!") return response # 客户端流模式(在一次调用中, 客户端可以多次向服务器传输数据, 但是服务器只能返回一次响应) # stream-unary (In a single call, the client can transfer data to the server several times, # but the server can only return a response once.) def ClientStreamingMethod(self, request_iterator, context): print("ClientStreamingMethod called by client...") for request in request_iterator: print("recv from client(%d), message= %s" % (request.client_id, request.request_data)) response = demo_pb2.Response( server_id=SERVER_ID, response_data="Python server ClientStreamingMethod ok") return response # 服务端流模式(在一次调用中, 客户端只能一次向服务器传输数据, 但是服务器可以多次返回响应) # unary-stream (In a single call, the client can only transmit data to the server at one time, # but the server can return the response many times.) def ServerStreamingMethod(self, request, context): print("ServerStreamingMethod called by client(%d), message= %s" % (request.client_id, request.request_data)) # 创建一个生成器 # create a generator def response_messages(): for i in range(5): response = demo_pb2.Response( server_id=SERVER_ID, response_data=("send by Python server, message=%d" % i)) yield response return response_messages() # 双向流模式 (在一次调用中, 客户端和服务器都可以向对方多次收发数据) # stream-stream (In a single call, both client and server can send and receive data # to each other multiple times.) def BidirectionalStreamingMethod(self, request_iterator, context): print("BidirectionalStreamingMethod called by client...") # 开启一个子线程去接收数据 # Open a sub thread to receive data def parse_request(): for request in request_iterator: print("recv from client(%d), message= %s" % (request.client_id, request.request_data)) t = Thread(target=parse_request) t.start() for i in range(5): yield demo_pb2.Response( server_id=SERVER_ID, response_data=("send by Python server, message= %d" % i)) t.join() def main(): server = grpc.server(futures.ThreadPoolExecutor()) demo_pb2_grpc.add_GRPCDemoServicer_to_server(DemoServer(), server) server.add_insecure_port(SERVER_ADDRESS) print("------------------start Python GRPC server") server.start() server.wait_for_termination() # If raise Error: # AttributeError: '_Server' object has no attribute 'wait_for_termination' # You can use the following code instead: # import time # while 1: # time.sleep(10) if __name__ == '__main__': main() grpc-1.30.2/examples/python/debug/000077500000000000000000000000001370425124100167545ustar00rootroot00000000000000grpc-1.30.2/examples/python/debug/BUILD.bazel000066400000000000000000000035321370425124100206350ustar00rootroot00000000000000# Copyright 2019 The gRPC 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 # # 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. load("@grpc_python_dependencies//:requirements.bzl", "requirement") py_binary( name = "debug_server", testonly = 1, srcs = ["debug_server.py"], deps = [ "//examples:helloworld_py_pb2", "//examples:helloworld_py_pb2_grpc", "//src/python/grpcio/grpc:grpcio", "//src/python/grpcio_channelz/grpc_channelz/v1:grpc_channelz", ], ) py_binary( name = "send_message", testonly = 1, srcs = ["send_message.py"], python_version = "PY3", deps = [ "//examples:helloworld_py_pb2", "//examples:helloworld_py_pb2_grpc", "//src/python/grpcio/grpc:grpcio", ], ) py_binary( name = "get_stats", testonly = 1, srcs = ["get_stats.py"], python_version = "PY3", deps = [ "//src/python/grpcio/grpc:grpcio", "//src/python/grpcio_channelz/grpc_channelz/v1:grpc_channelz", ], ) py_test( name = "_debug_example_test", srcs = ["test/_debug_example_test.py"], python_version = "PY3", deps = [ ":debug_server", ":get_stats", ":send_message", "//examples:helloworld_py_pb2", "//examples:helloworld_py_pb2_grpc", "//src/python/grpcio/grpc:grpcio", "//src/python/grpcio_channelz/grpc_channelz/v1:grpc_channelz", ], ) grpc-1.30.2/examples/python/debug/README.md000066400000000000000000000047351370425124100202440ustar00rootroot00000000000000# gRPC Python Debug Example This example demonstrate the usage of Channelz. For a better looking website, the [gdebug](https://github.com/grpc/grpc-experiments/tree/master/gdebug) uses gRPC-Web protocol and will serve all useful information in web pages. ## Channelz: Live Channel Tracing Channelz is a channel tracing feature. It will track statistics like how many messages have been sent, how many of them failed, what are the connected sockets. Since it is implemented in C-Core and has low-overhead, it is recommended to turn on for production services. See [Channelz design doc](https://github.com/grpc/proposal/blob/master/A14-channelz.md). ## How to enable tracing log The tracing log generation might have larger overhead, especially when you try to trace transport. It would result in replicating the traffic loads. However, it is still the most powerful tool when you need to dive in. ### The Most Verbose Tracing Log Specify environment variables, then run your application: ``` GRPC_VERBOSITY=debug GRPC_TRACE=all ``` For more granularity, please see [environment_variables](https://github.com/grpc/grpc/blob/master/doc/environment_variables.md). ### Debug Transport Protocol ``` GRPC_VERBOSITY=debug GRPC_TRACE=tcp,http,secure_endpoint,transport_security ``` ### Debug Connection Behavior ``` GRPC_VERBOSITY=debug GRPC_TRACE=call_error,connectivity_state,pick_first,round_robin,glb ``` ## How to debug your application? `pdb` is a debugging tool that is available for Python interpreters natively. You can set breakpoint, and execute commands while the application is stopped. The simplest usage is add a single line in the place you want to inspect: `import pdb; pdb.set_trace()`. When interpreter see this line, it would pop out a interactive command line interface for you to inspect the application state. For more detailed usage, see https://docs.python.org/3/library/pdb.html. **Caveat**: gRPC Python uses C-Extension under-the-hood, so `pdb` may not be able to trace through the whole stack. ## gRPC Command Line Tool `grpc_cli` is a handy tool to interact with gRPC backend easily. Imageine you can inspect what service does a server provide without writing any code, and make gRPC calls just like `curl`. The installation guide: https://github.com/grpc/grpc/blob/master/doc/command_line_tool.md#code-location The usage guide: https://github.com/grpc/grpc/blob/master/doc/command_line_tool.md#usage The source code: https://github.com/grpc/grpc/blob/master/test/cpp/util/grpc_cli.cc grpc-1.30.2/examples/python/debug/debug_server.py000066400000000000000000000047171370425124100220130ustar00rootroot00000000000000# Copyright 2019 The gRPC 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 # # 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. """The Python example of utilizing Channelz feature.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function import argparse import logging from concurrent import futures import random import grpc from grpc_channelz.v1 import channelz from examples import helloworld_pb2 from examples import helloworld_pb2_grpc _LOGGER = logging.getLogger(__name__) _LOGGER.setLevel(logging.INFO) _RANDOM_FAILURE_RATE = 0.3 class FaultInjectGreeter(helloworld_pb2_grpc.GreeterServicer): def __init__(self, failure_rate): self._failure_rate = failure_rate def SayHello(self, request, context): if random.random() < self._failure_rate: context.abort(grpc.StatusCode.UNAVAILABLE, 'Randomly injected failure.') return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name) def create_server(addr, failure_rate): server = grpc.server(futures.ThreadPoolExecutor()) helloworld_pb2_grpc.add_GreeterServicer_to_server( FaultInjectGreeter(failure_rate), server) # Add Channelz Servicer to the gRPC server channelz.add_channelz_servicer(server) server.add_insecure_port(addr) return server def main(): parser = argparse.ArgumentParser() parser.add_argument('--addr', nargs=1, type=str, default='[::]:50051', help='the address to listen on') parser.add_argument( '--failure_rate', nargs=1, type=float, default=0.3, help='a float indicates the percentage of failed message injections') args = parser.parse_args() server = create_server(addr=args.addr, failure_rate=args.failure_rate) server.start() server.wait_for_termination() if __name__ == '__main__': logging.basicConfig(level=logging.INFO) main() grpc-1.30.2/examples/python/debug/get_stats.py000066400000000000000000000027721370425124100213330ustar00rootroot00000000000000# Copyright 2019 The gRPC 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 # # 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. """Poll statistics from the server.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function import logging import argparse import grpc from grpc_channelz.v1 import channelz_pb2 from grpc_channelz.v1 import channelz_pb2_grpc def run(addr): with grpc.insecure_channel(addr) as channel: channelz_stub = channelz_pb2_grpc.ChannelzStub(channel) response = channelz_stub.GetServers( channelz_pb2.GetServersRequest(start_server_id=0)) print('Info for all servers: %s' % response) def main(): parser = argparse.ArgumentParser() parser.add_argument('--addr', nargs=1, type=str, default='[::]:50051', help='the address to request') args = parser.parse_args() run(addr=args.addr) if __name__ == '__main__': logging.basicConfig() main() grpc-1.30.2/examples/python/debug/send_message.py000066400000000000000000000036121370425124100217650ustar00rootroot00000000000000# Copyright 2019 The gRPC 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 # # 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. """Send multiple greeting messages to the backend.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function import logging import argparse import grpc from examples import helloworld_pb2 from examples import helloworld_pb2_grpc def process(stub, request): try: response = stub.SayHello(request) except grpc.RpcError as rpc_error: print('Received error: %s' % rpc_error) else: print('Received message: %s' % response) def run(addr, n): with grpc.insecure_channel(addr) as channel: stub = helloworld_pb2_grpc.GreeterStub(channel) request = helloworld_pb2.HelloRequest(name='you') for _ in range(n): process(stub, request) def main(): parser = argparse.ArgumentParser() parser.add_argument('--addr', nargs=1, type=str, default='[::]:50051', help='the address to request') parser.add_argument('-n', nargs=1, type=int, default=10, help='an integer for number of messages to sent') args = parser.parse_args() run(addr=args.addr, n=args.n) if __name__ == '__main__': logging.basicConfig() main() grpc-1.30.2/examples/python/debug/test/000077500000000000000000000000001370425124100177335ustar00rootroot00000000000000grpc-1.30.2/examples/python/debug/test/_debug_example_test.py000066400000000000000000000031551370425124100243100ustar00rootroot00000000000000# Copyright 2019 The gRPC 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 # # 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. """Test for gRPC Python debug example.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function import logging import unittest from examples.python.debug import debug_server from examples.python.debug import send_message from examples.python.debug import get_stats _LOGGER = logging.getLogger(__name__) _LOGGER.setLevel(logging.INFO) _FAILURE_RATE = 0.5 _NUMBER_OF_MESSAGES = 100 _ADDR_TEMPLATE = 'localhost:%d' class DebugExampleTest(unittest.TestCase): def test_channelz_example(self): server = debug_server.create_server(addr='[::]:0', failure_rate=_FAILURE_RATE) port = server.add_insecure_port('[::]:0') server.start() address = _ADDR_TEMPLATE % port send_message.run(addr=address, n=_NUMBER_OF_MESSAGES) get_stats.run(addr=address) server.stop(None) # No unhandled exception raised, test passed! if __name__ == '__main__': logging.basicConfig() unittest.main(verbosity=2) grpc-1.30.2/examples/python/errors/000077500000000000000000000000001370425124100172025ustar00rootroot00000000000000grpc-1.30.2/examples/python/errors/BUILD.bazel000066400000000000000000000033531370425124100210640ustar00rootroot00000000000000# Copyright 2019 The gRPC 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 # # 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. load("@grpc_python_dependencies//:requirements.bzl", "requirement") py_library( name = "client", testonly = 1, srcs = ["client.py"], deps = [ "//examples:helloworld_py_pb2", "//examples:helloworld_py_pb2_grpc", "//src/python/grpcio/grpc:grpcio", "//src/python/grpcio_status/grpc_status", requirement("googleapis-common-protos"), ], ) py_library( name = "server", testonly = 1, srcs = ["server.py"], deps = [ "//src/python/grpcio/grpc:grpcio", "//src/python/grpcio_status/grpc_status:grpc_status", "//examples:helloworld_py_pb2", "//examples:helloworld_py_pb2_grpc", ] + select({ "//conditions:default": [requirement("futures")], "//:python3": [], }), ) py_test( name = "test/_error_handling_example_test", size = "small", srcs = ["test/_error_handling_example_test.py"], imports = [ "../../../src/python/grpcio_status", "../../../src/python/grpcio_tests", ], python_version = "PY3", deps = [ ":client", ":server", "//src/python/grpcio_tests/tests:bazel_namespace_package_hack", ], ) grpc-1.30.2/examples/python/errors/README.md000066400000000000000000000120011370425124100204530ustar00rootroot00000000000000# gRPC Python Error Handling Example The goal of this example is sending error status from server that is more complicated than a code and detail string. The definition for an RPC method in proto files contains request message and response message. There are many error states that can be shared across RPC methods (e.g. stack trace, insufficient quota). Using a different path to handle error will make the code more maintainable. Ideally, the final status of an RPC should be described in the trailing headers of HTTP2, and gRPC Python provides helper functions in `grpcio-status` package to assist the packing and unpacking of error status. ### Requirement ``` grpcio>=1.18.0 grpcio-status>=1.18.0 googleapis-common-protos>=1.5.5 ``` ### Error Detail Proto You may provide any custom proto message as error detail in your implementation. Here are protos are defined by Google Cloud Library Team: * [code.proto]([https://github.com/googleapis/api-common-protos/blob/master/google/rpc/code.proto](https://github.com/googleapis/api-common-protos/blob/87185dfffad4afa5a33a8c153f0e1ea53b4f85dc/google/rpc/code.proto)) contains definition of RPC error codes. * [error_details.proto]([https://github.com/googleapis/api-common-protos/blob/master/google/rpc/error_details.proto](https://github.com/googleapis/api-common-protos/blob/87185dfffad4afa5a33a8c153f0e1ea53b4f85dc/google/rpc/error_details.proto)) contains definitions of common error details. ### Definition of Status Proto Here is the definition of Status proto. For full text, please see [status.proto](https://github.com/googleapis/api-common-protos/blob/87185dfffad4afa5a33a8c153f0e1ea53b4f85dc/google/rpc/status.proto). ```proto // The `Status` type defines a logical error model that is suitable for different // programming environments, including REST APIs and RPC APIs. It is used by // [gRPC](https://github.com/grpc). The error model is designed to be: // // - Simple to use and understand for most users // - Flexible enough to meet unexpected needs // // # Overview // // The `Status` message contains three pieces of data: error code, error message, // and error details. The error code should be an enum value of // [google.rpc.Code][google.rpc.Code], but it may accept additional error codes if needed. The // error message should be a developer-facing English message that helps // developers *understand* and *resolve* the error. If a localized user-facing // error message is needed, put the localized message in the error details or // localize it in the client. The optional error details may contain arbitrary // information about the error. There is a predefined set of error detail types // in the package `google.rpc` that can be used for common error conditions. // // # Language mapping // // The `Status` message is the logical representation of the error model, but it // is not necessarily the actual wire format. When the `Status` message is // exposed in different client libraries and different wire protocols, it can be // mapped differently. For example, it will likely be mapped to some exceptions // in Java, but more likely mapped to some error codes in C. // // # Other uses // // The error model and the `Status` message can be used in a variety of // environments, either with or without APIs, to provide a // consistent developer experience across different environments. // // Example uses of this error model include: // // - Partial errors. If a service needs to return partial errors to the client, // it may embed the `Status` in the normal response to indicate the partial // errors. // // - Workflow errors. A typical workflow has multiple steps. Each step may // have a `Status` message for error reporting. // // - Batch operations. If a client uses batch request and batch response, the // `Status` message should be used directly inside batch response, one for // each error sub-response. // // - Asynchronous operations. If an API call embeds asynchronous operation // results in its response, the status of those operations should be // represented directly using the `Status` message. // // - Logging. If some API errors are stored in logs, the message `Status` could // be used directly after any stripping needed for security/privacy reasons. message Status { // The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]. int32 code = 1; // A developer-facing error message, which should be in English. Any // user-facing error message should be localized and sent in the // [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client. string message = 2; // A list of messages that carry the error details. There is a common set of // message types for APIs to use. repeated google.protobuf.Any details = 3; } ``` ### Usage of Well-Known-Proto `Any` Please check [ProtoBuf Document: Any](https://developers.google.com/protocol-buffers/docs/reference/python-generated#any) ```Python any_message.Pack(message) any_message.Unpack(message) assert any_message.Is(message.DESCRIPTOR) ``` grpc-1.30.2/examples/python/errors/client.py000066400000000000000000000036331370425124100210370ustar00rootroot00000000000000# Copyright 2019 The gRPC 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 # # 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. """This example handles rich error status in client-side.""" from __future__ import print_function import logging import grpc from grpc_status import rpc_status from google.rpc import error_details_pb2 from examples import helloworld_pb2 from examples import helloworld_pb2_grpc _LOGGER = logging.getLogger(__name__) def process(stub): try: response = stub.SayHello(helloworld_pb2.HelloRequest(name='Alice')) _LOGGER.info('Call success: %s', response.message) except grpc.RpcError as rpc_error: _LOGGER.error('Call failure: %s', rpc_error) status = rpc_status.from_call(rpc_error) for detail in status.details: if detail.Is(error_details_pb2.QuotaFailure.DESCRIPTOR): info = error_details_pb2.QuotaFailure() detail.Unpack(info) _LOGGER.error('Quota failure: %s', info) else: raise RuntimeError('Unexpected failure: %s' % detail) def main(): # NOTE(gRPC Python Team): .close() is possible on a channel and should be # used in circumstances in which the with statement does not fit the needs # of the code. with grpc.insecure_channel('localhost:50051') as channel: stub = helloworld_pb2_grpc.GreeterStub(channel) process(stub) if __name__ == '__main__': logging.basicConfig() main() grpc-1.30.2/examples/python/errors/server.py000066400000000000000000000046631370425124100210730ustar00rootroot00000000000000# Copyright 2019 The gRPC 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 # # 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. """This example sends out rich error status from server-side.""" from concurrent import futures import logging import threading import grpc from grpc_status import rpc_status from google.protobuf import any_pb2 from google.rpc import code_pb2, status_pb2, error_details_pb2 from examples import helloworld_pb2 from examples import helloworld_pb2_grpc def create_greet_limit_exceed_error_status(name): detail = any_pb2.Any() detail.Pack( error_details_pb2.QuotaFailure(violations=[ error_details_pb2.QuotaFailure.Violation( subject="name: %s" % name, description="Limit one greeting per person", ) ],)) return status_pb2.Status( code=code_pb2.RESOURCE_EXHAUSTED, message='Request limit exceeded.', details=[detail], ) class LimitedGreeter(helloworld_pb2_grpc.GreeterServicer): def __init__(self): self._lock = threading.RLock() self._greeted = set() def SayHello(self, request, context): with self._lock: if request.name in self._greeted: rich_status = create_greet_limit_exceed_error_status( request.name) context.abort_with_status(rpc_status.to_status(rich_status)) else: self._greeted.add(request.name) return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name) def create_server(server_address): server = grpc.server(futures.ThreadPoolExecutor()) helloworld_pb2_grpc.add_GreeterServicer_to_server(LimitedGreeter(), server) port = server.add_insecure_port(server_address) return server, port def serve(server): server.start() server.wait_for_termination() def main(): server, unused_port = create_server('[::]:50051') serve(server) if __name__ == '__main__': logging.basicConfig() main() grpc-1.30.2/examples/python/errors/test/000077500000000000000000000000001370425124100201615ustar00rootroot00000000000000grpc-1.30.2/examples/python/errors/test/_error_handling_example_test.py000066400000000000000000000034211370425124100264410ustar00rootroot00000000000000# Copyright 2019 The gRPC 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 # # 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. """Tests of the error handling example.""" # NOTE(lidiz) This module only exists in Bazel BUILD file, for more details # please refer to comments in the "bazel_namespace_package_hack" module. try: from tests import bazel_namespace_package_hack bazel_namespace_package_hack.sys_path_to_site_dir_hack() except ImportError: pass import unittest import logging import grpc from examples import helloworld_pb2_grpc from examples.python.errors import client as error_handling_client from examples.python.errors import server as error_handling_server class ErrorHandlingExampleTest(unittest.TestCase): def setUp(self): self._server, port = error_handling_server.create_server('[::]:0') self._server.start() self._channel = grpc.insecure_channel('localhost:%d' % port) def tearDown(self): self._channel.close() self._server.stop(None) def test_error_handling_example(self): stub = helloworld_pb2_grpc.GreeterStub(self._channel) error_handling_client.process(stub) error_handling_client.process(stub) # No unhandled exception raised, test passed! if __name__ == '__main__': logging.basicConfig() unittest.main(verbosity=2) grpc-1.30.2/examples/python/helloworld/000077500000000000000000000000001370425124100200415ustar00rootroot00000000000000grpc-1.30.2/examples/python/helloworld/.gitignore000066400000000000000000000000061370425124100220250ustar00rootroot00000000000000*.pyc grpc-1.30.2/examples/python/helloworld/README.md000066400000000000000000000001441370425124100213170ustar00rootroot00000000000000[This code's documentation lives on the grpc.io site.](https://grpc.io/docs/quickstart/python.html) grpc-1.30.2/examples/python/helloworld/greeter_client.py000066400000000000000000000023651370425124100234140ustar00rootroot00000000000000# Copyright 2015 gRPC 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 # # 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. """The Python implementation of the GRPC helloworld.Greeter client.""" from __future__ import print_function import logging import grpc import helloworld_pb2 import helloworld_pb2_grpc def run(): # NOTE(gRPC Python Team): .close() is possible on a channel and should be # used in circumstances in which the with statement does not fit the needs # of the code. with grpc.insecure_channel('localhost:50051') as channel: stub = helloworld_pb2_grpc.GreeterStub(channel) response = stub.SayHello(helloworld_pb2.HelloRequest(name='you')) print("Greeter client received: " + response.message) if __name__ == '__main__': logging.basicConfig() run() grpc-1.30.2/examples/python/helloworld/greeter_client_with_options.py000066400000000000000000000034631370425124100262220ustar00rootroot00000000000000# Copyright 2018 gRPC 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 # # 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. """gRPC Python helloworld.Greeter client with channel options and call timeout parameters.""" from __future__ import print_function import logging import grpc import helloworld_pb2 import helloworld_pb2_grpc def run(): # NOTE(gRPC Python Team): .close() is possible on a channel and should be # used in circumstances in which the with statement does not fit the needs # of the code. # # For more channel options, please see https://grpc.io/grpc/core/group__grpc__arg__keys.html with grpc.insecure_channel(target='localhost:50051', options=[('grpc.lb_policy_name', 'pick_first'), ('grpc.enable_retries', 0), ('grpc.keepalive_timeout_ms', 10000) ]) as channel: stub = helloworld_pb2_grpc.GreeterStub(channel) # Timeout in seconds. # Please refer gRPC Python documents for more detail. https://grpc.io/grpc/python/grpc.html response = stub.SayHello(helloworld_pb2.HelloRequest(name='you'), timeout=10) print("Greeter client received: " + response.message) if __name__ == '__main__': logging.basicConfig() run() grpc-1.30.2/examples/python/helloworld/greeter_server.py000066400000000000000000000023451370425124100234420ustar00rootroot00000000000000# Copyright 2015 gRPC 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 # # 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. """The Python implementation of the GRPC helloworld.Greeter server.""" from concurrent import futures import logging import grpc import helloworld_pb2 import helloworld_pb2_grpc class Greeter(helloworld_pb2_grpc.GreeterServicer): def SayHello(self, request, context): return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name) def serve(): server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server) server.add_insecure_port('[::]:50051') server.start() server.wait_for_termination() if __name__ == '__main__': logging.basicConfig() serve() grpc-1.30.2/examples/python/helloworld/greeter_server_with_reflection.py000066400000000000000000000027351370425124100267120ustar00rootroot00000000000000# Copyright 2018 The gRPC 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 # # 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. """The reflection-enabled version of gRPC helloworld.Greeter server.""" from concurrent import futures import logging import grpc from grpc_reflection.v1alpha import reflection import helloworld_pb2 import helloworld_pb2_grpc class Greeter(helloworld_pb2_grpc.GreeterServicer): def SayHello(self, request, context): return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name) def serve(): server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server) SERVICE_NAMES = ( helloworld_pb2.DESCRIPTOR.services_by_name['Greeter'].full_name, reflection.SERVICE_NAME, ) reflection.enable_server_reflection(SERVICE_NAMES, server) server.add_insecure_port('[::]:50051') server.start() server.wait_for_termination() if __name__ == '__main__': logging.basicConfig() serve() grpc-1.30.2/examples/python/helloworld/helloworld_pb2.py000066400000000000000000000075101370425124100233340ustar00rootroot00000000000000# Generated by the protocol buffer compiler. DO NOT EDIT! # source: helloworld.proto import sys _b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() DESCRIPTOR = _descriptor.FileDescriptor( name='helloworld.proto', package='helloworld', syntax='proto3', serialized_pb=_b('\n\x10helloworld.proto\x12\nhelloworld\"\x1c\n\x0cHelloRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x1d\n\nHelloReply\x12\x0f\n\x07message\x18\x01 \x01(\t2I\n\x07Greeter\x12>\n\x08SayHello\x12\x18.helloworld.HelloRequest\x1a\x16.helloworld.HelloReply\"\x00\x42\x36\n\x1bio.grpc.examples.helloworldB\x0fHelloWorldProtoP\x01\xa2\x02\x03HLWb\x06proto3') ) _HELLOREQUEST = _descriptor.Descriptor( name='HelloRequest', full_name='helloworld.HelloRequest', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( name='name', full_name='helloworld.HelloRequest.name', index=0, number=1, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), ], extensions=[ ], nested_types=[], enum_types=[ ], options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=32, serialized_end=60, ) _HELLOREPLY = _descriptor.Descriptor( name='HelloReply', full_name='helloworld.HelloReply', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( name='message', full_name='helloworld.HelloReply.message', index=0, number=1, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), ], extensions=[ ], nested_types=[], enum_types=[ ], options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=62, serialized_end=91, ) DESCRIPTOR.message_types_by_name['HelloRequest'] = _HELLOREQUEST DESCRIPTOR.message_types_by_name['HelloReply'] = _HELLOREPLY _sym_db.RegisterFileDescriptor(DESCRIPTOR) HelloRequest = _reflection.GeneratedProtocolMessageType('HelloRequest', (_message.Message,), dict( DESCRIPTOR = _HELLOREQUEST, __module__ = 'helloworld_pb2' # @@protoc_insertion_point(class_scope:helloworld.HelloRequest) )) _sym_db.RegisterMessage(HelloRequest) HelloReply = _reflection.GeneratedProtocolMessageType('HelloReply', (_message.Message,), dict( DESCRIPTOR = _HELLOREPLY, __module__ = 'helloworld_pb2' # @@protoc_insertion_point(class_scope:helloworld.HelloReply) )) _sym_db.RegisterMessage(HelloReply) DESCRIPTOR.has_options = True DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\033io.grpc.examples.helloworldB\017HelloWorldProtoP\001\242\002\003HLW')) _GREETER = _descriptor.ServiceDescriptor( name='Greeter', full_name='helloworld.Greeter', file=DESCRIPTOR, index=0, options=None, serialized_start=93, serialized_end=166, methods=[ _descriptor.MethodDescriptor( name='SayHello', full_name='helloworld.Greeter.SayHello', index=0, containing_service=None, input_type=_HELLOREQUEST, output_type=_HELLOREPLY, options=None, ), ]) _sym_db.RegisterServiceDescriptor(_GREETER) DESCRIPTOR.services_by_name['Greeter'] = _GREETER # @@protoc_insertion_point(module_scope) grpc-1.30.2/examples/python/helloworld/helloworld_pb2_grpc.py000066400000000000000000000024631370425124100243510ustar00rootroot00000000000000# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! import grpc import helloworld_pb2 as helloworld__pb2 class GreeterStub(object): """The greeting service definition. """ def __init__(self, channel): """Constructor. Args: channel: A grpc.Channel. """ self.SayHello = channel.unary_unary( '/helloworld.Greeter/SayHello', request_serializer=helloworld__pb2.HelloRequest.SerializeToString, response_deserializer=helloworld__pb2.HelloReply.FromString, ) class GreeterServicer(object): """The greeting service definition. """ def SayHello(self, request, context): """Sends a greeting """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') def add_GreeterServicer_to_server(servicer, server): rpc_method_handlers = { 'SayHello': grpc.unary_unary_rpc_method_handler( servicer.SayHello, request_deserializer=helloworld__pb2.HelloRequest.FromString, response_serializer=helloworld__pb2.HelloReply.SerializeToString, ), } generic_handler = grpc.method_handlers_generic_handler( 'helloworld.Greeter', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) grpc-1.30.2/examples/python/interceptors/000077500000000000000000000000001370425124100204075ustar00rootroot00000000000000grpc-1.30.2/examples/python/interceptors/default_value/000077500000000000000000000000001370425124100232275ustar00rootroot00000000000000grpc-1.30.2/examples/python/interceptors/default_value/default_value_client_interceptor.py000066400000000000000000000040121370425124100323720ustar00rootroot00000000000000# Copyright 2017 gRPC 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 # # 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. """Interceptor that adds headers to outgoing requests.""" import grpc class _ConcreteValue(grpc.Future): def __init__(self, result): self._result = result def cancel(self): return False def cancelled(self): return False def running(self): return False def done(self): return True def result(self, timeout=None): return self._result def exception(self, timeout=None): return None def traceback(self, timeout=None): return None def add_done_callback(self, fn): fn(self._result) class DefaultValueClientInterceptor(grpc.UnaryUnaryClientInterceptor, grpc.StreamUnaryClientInterceptor): def __init__(self, value): self._default = _ConcreteValue(value) def _intercept_call(self, continuation, client_call_details, request_or_iterator): response = continuation(client_call_details, request_or_iterator) return self._default if response.exception() else response def intercept_unary_unary(self, continuation, client_call_details, request): return self._intercept_call(continuation, client_call_details, request) def intercept_stream_unary(self, continuation, client_call_details, request_iterator): return self._intercept_call(continuation, client_call_details, request_iterator) grpc-1.30.2/examples/python/interceptors/default_value/greeter_client.py000066400000000000000000000032151370425124100265750ustar00rootroot00000000000000# Copyright 2017 gRPC 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 # # 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. """The Python implementation of the gRPC helloworld.Greeter client.""" from __future__ import print_function import logging import grpc import helloworld_pb2 import helloworld_pb2_grpc import default_value_client_interceptor def run(): default_value = helloworld_pb2.HelloReply( message='Hello from your local interceptor!') default_value_interceptor = default_value_client_interceptor.DefaultValueClientInterceptor( default_value) # NOTE(gRPC Python Team): .close() is possible on a channel and should be # used in circumstances in which the with statement does not fit the needs # of the code. with grpc.insecure_channel('localhost:50051') as channel: intercept_channel = grpc.intercept_channel(channel, default_value_interceptor) stub = helloworld_pb2_grpc.GreeterStub(intercept_channel) response = stub.SayHello(helloworld_pb2.HelloRequest(name='you')) print("Greeter client received: " + response.message) if __name__ == '__main__': logging.basicConfig() run() grpc-1.30.2/examples/python/interceptors/default_value/helloworld_pb2.py000066400000000000000000000075101370425124100265220ustar00rootroot00000000000000# Generated by the protocol buffer compiler. DO NOT EDIT! # source: helloworld.proto import sys _b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() DESCRIPTOR = _descriptor.FileDescriptor( name='helloworld.proto', package='helloworld', syntax='proto3', serialized_pb=_b('\n\x10helloworld.proto\x12\nhelloworld\"\x1c\n\x0cHelloRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x1d\n\nHelloReply\x12\x0f\n\x07message\x18\x01 \x01(\t2I\n\x07Greeter\x12>\n\x08SayHello\x12\x18.helloworld.HelloRequest\x1a\x16.helloworld.HelloReply\"\x00\x42\x36\n\x1bio.grpc.examples.helloworldB\x0fHelloWorldProtoP\x01\xa2\x02\x03HLWb\x06proto3') ) _HELLOREQUEST = _descriptor.Descriptor( name='HelloRequest', full_name='helloworld.HelloRequest', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( name='name', full_name='helloworld.HelloRequest.name', index=0, number=1, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), ], extensions=[ ], nested_types=[], enum_types=[ ], options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=32, serialized_end=60, ) _HELLOREPLY = _descriptor.Descriptor( name='HelloReply', full_name='helloworld.HelloReply', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( name='message', full_name='helloworld.HelloReply.message', index=0, number=1, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), ], extensions=[ ], nested_types=[], enum_types=[ ], options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=62, serialized_end=91, ) DESCRIPTOR.message_types_by_name['HelloRequest'] = _HELLOREQUEST DESCRIPTOR.message_types_by_name['HelloReply'] = _HELLOREPLY _sym_db.RegisterFileDescriptor(DESCRIPTOR) HelloRequest = _reflection.GeneratedProtocolMessageType('HelloRequest', (_message.Message,), dict( DESCRIPTOR = _HELLOREQUEST, __module__ = 'helloworld_pb2' # @@protoc_insertion_point(class_scope:helloworld.HelloRequest) )) _sym_db.RegisterMessage(HelloRequest) HelloReply = _reflection.GeneratedProtocolMessageType('HelloReply', (_message.Message,), dict( DESCRIPTOR = _HELLOREPLY, __module__ = 'helloworld_pb2' # @@protoc_insertion_point(class_scope:helloworld.HelloReply) )) _sym_db.RegisterMessage(HelloReply) DESCRIPTOR.has_options = True DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\033io.grpc.examples.helloworldB\017HelloWorldProtoP\001\242\002\003HLW')) _GREETER = _descriptor.ServiceDescriptor( name='Greeter', full_name='helloworld.Greeter', file=DESCRIPTOR, index=0, options=None, serialized_start=93, serialized_end=166, methods=[ _descriptor.MethodDescriptor( name='SayHello', full_name='helloworld.Greeter.SayHello', index=0, containing_service=None, input_type=_HELLOREQUEST, output_type=_HELLOREPLY, options=None, ), ]) _sym_db.RegisterServiceDescriptor(_GREETER) DESCRIPTOR.services_by_name['Greeter'] = _GREETER # @@protoc_insertion_point(module_scope) grpc-1.30.2/examples/python/interceptors/default_value/helloworld_pb2_grpc.py000066400000000000000000000024631370425124100275370ustar00rootroot00000000000000# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! import grpc import helloworld_pb2 as helloworld__pb2 class GreeterStub(object): """The greeting service definition. """ def __init__(self, channel): """Constructor. Args: channel: A grpc.Channel. """ self.SayHello = channel.unary_unary( '/helloworld.Greeter/SayHello', request_serializer=helloworld__pb2.HelloRequest.SerializeToString, response_deserializer=helloworld__pb2.HelloReply.FromString, ) class GreeterServicer(object): """The greeting service definition. """ def SayHello(self, request, context): """Sends a greeting """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') def add_GreeterServicer_to_server(servicer, server): rpc_method_handlers = { 'SayHello': grpc.unary_unary_rpc_method_handler( servicer.SayHello, request_deserializer=helloworld__pb2.HelloRequest.FromString, response_serializer=helloworld__pb2.HelloReply.SerializeToString, ), } generic_handler = grpc.method_handlers_generic_handler( 'helloworld.Greeter', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) grpc-1.30.2/examples/python/interceptors/headers/000077500000000000000000000000001370425124100220225ustar00rootroot00000000000000grpc-1.30.2/examples/python/interceptors/headers/generic_client_interceptor.py000066400000000000000000000051021370425124100277620ustar00rootroot00000000000000# Copyright 2017 gRPC 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 # # 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. """Base class for interceptors that operate on all RPC types.""" import grpc class _GenericClientInterceptor(grpc.UnaryUnaryClientInterceptor, grpc.UnaryStreamClientInterceptor, grpc.StreamUnaryClientInterceptor, grpc.StreamStreamClientInterceptor): def __init__(self, interceptor_function): self._fn = interceptor_function def intercept_unary_unary(self, continuation, client_call_details, request): new_details, new_request_iterator, postprocess = self._fn( client_call_details, iter((request,)), False, False) response = continuation(new_details, next(new_request_iterator)) return postprocess(response) if postprocess else response def intercept_unary_stream(self, continuation, client_call_details, request): new_details, new_request_iterator, postprocess = self._fn( client_call_details, iter((request,)), False, True) response_it = continuation(new_details, next(new_request_iterator)) return postprocess(response_it) if postprocess else response_it def intercept_stream_unary(self, continuation, client_call_details, request_iterator): new_details, new_request_iterator, postprocess = self._fn( client_call_details, request_iterator, True, False) response = continuation(new_details, new_request_iterator) return postprocess(response) if postprocess else response def intercept_stream_stream(self, continuation, client_call_details, request_iterator): new_details, new_request_iterator, postprocess = self._fn( client_call_details, request_iterator, True, True) response_it = continuation(new_details, new_request_iterator) return postprocess(response_it) if postprocess else response_it def create(intercept_call): return _GenericClientInterceptor(intercept_call) grpc-1.30.2/examples/python/interceptors/headers/greeter_client.py000066400000000000000000000030671370425124100253750ustar00rootroot00000000000000# Copyright 2017 gRPC 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 # # 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. """The Python implementation of the GRPC helloworld.Greeter client.""" from __future__ import print_function import logging import grpc import helloworld_pb2 import helloworld_pb2_grpc import header_manipulator_client_interceptor def run(): header_adder_interceptor = header_manipulator_client_interceptor.header_adder_interceptor( 'one-time-password', '42') # NOTE(gRPC Python Team): .close() is possible on a channel and should be # used in circumstances in which the with statement does not fit the needs # of the code. with grpc.insecure_channel('localhost:50051') as channel: intercept_channel = grpc.intercept_channel(channel, header_adder_interceptor) stub = helloworld_pb2_grpc.GreeterStub(intercept_channel) response = stub.SayHello(helloworld_pb2.HelloRequest(name='you')) print("Greeter client received: " + response.message) if __name__ == '__main__': logging.basicConfig() run() grpc-1.30.2/examples/python/interceptors/headers/greeter_server.py000066400000000000000000000030131370425124100254140ustar00rootroot00000000000000# Copyright 2017 gRPC 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 # # 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. """The Python implementation of the GRPC helloworld.Greeter server.""" from concurrent import futures import logging import grpc import helloworld_pb2 import helloworld_pb2_grpc from request_header_validator_interceptor import RequestHeaderValidatorInterceptor class Greeter(helloworld_pb2_grpc.GreeterServicer): def SayHello(self, request, context): return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name) def serve(): header_validator = RequestHeaderValidatorInterceptor( 'one-time-password', '42', grpc.StatusCode.UNAUTHENTICATED, 'Access denied!') server = grpc.server(futures.ThreadPoolExecutor(max_workers=10), interceptors=(header_validator,)) helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server) server.add_insecure_port('[::]:50051') server.start() server.wait_for_termination() if __name__ == '__main__': logging.basicConfig() serve() grpc-1.30.2/examples/python/interceptors/headers/header_manipulator_client_interceptor.py000066400000000000000000000030521370425124100322130ustar00rootroot00000000000000# Copyright 2017 gRPC 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 # # 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. """Interceptor that adds headers to outgoing requests.""" import collections import grpc import generic_client_interceptor class _ClientCallDetails( collections.namedtuple( '_ClientCallDetails', ('method', 'timeout', 'metadata', 'credentials')), grpc.ClientCallDetails): pass def header_adder_interceptor(header, value): def intercept_call(client_call_details, request_iterator, request_streaming, response_streaming): metadata = [] if client_call_details.metadata is not None: metadata = list(client_call_details.metadata) metadata.append(( header, value, )) client_call_details = _ClientCallDetails( client_call_details.method, client_call_details.timeout, metadata, client_call_details.credentials) return client_call_details, request_iterator, None return generic_client_interceptor.create(intercept_call) grpc-1.30.2/examples/python/interceptors/headers/helloworld_pb2.py000066400000000000000000000075101370425124100253150ustar00rootroot00000000000000# Generated by the protocol buffer compiler. DO NOT EDIT! # source: helloworld.proto import sys _b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() DESCRIPTOR = _descriptor.FileDescriptor( name='helloworld.proto', package='helloworld', syntax='proto3', serialized_pb=_b('\n\x10helloworld.proto\x12\nhelloworld\"\x1c\n\x0cHelloRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x1d\n\nHelloReply\x12\x0f\n\x07message\x18\x01 \x01(\t2I\n\x07Greeter\x12>\n\x08SayHello\x12\x18.helloworld.HelloRequest\x1a\x16.helloworld.HelloReply\"\x00\x42\x36\n\x1bio.grpc.examples.helloworldB\x0fHelloWorldProtoP\x01\xa2\x02\x03HLWb\x06proto3') ) _HELLOREQUEST = _descriptor.Descriptor( name='HelloRequest', full_name='helloworld.HelloRequest', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( name='name', full_name='helloworld.HelloRequest.name', index=0, number=1, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), ], extensions=[ ], nested_types=[], enum_types=[ ], options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=32, serialized_end=60, ) _HELLOREPLY = _descriptor.Descriptor( name='HelloReply', full_name='helloworld.HelloReply', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( name='message', full_name='helloworld.HelloReply.message', index=0, number=1, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), ], extensions=[ ], nested_types=[], enum_types=[ ], options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=62, serialized_end=91, ) DESCRIPTOR.message_types_by_name['HelloRequest'] = _HELLOREQUEST DESCRIPTOR.message_types_by_name['HelloReply'] = _HELLOREPLY _sym_db.RegisterFileDescriptor(DESCRIPTOR) HelloRequest = _reflection.GeneratedProtocolMessageType('HelloRequest', (_message.Message,), dict( DESCRIPTOR = _HELLOREQUEST, __module__ = 'helloworld_pb2' # @@protoc_insertion_point(class_scope:helloworld.HelloRequest) )) _sym_db.RegisterMessage(HelloRequest) HelloReply = _reflection.GeneratedProtocolMessageType('HelloReply', (_message.Message,), dict( DESCRIPTOR = _HELLOREPLY, __module__ = 'helloworld_pb2' # @@protoc_insertion_point(class_scope:helloworld.HelloReply) )) _sym_db.RegisterMessage(HelloReply) DESCRIPTOR.has_options = True DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\033io.grpc.examples.helloworldB\017HelloWorldProtoP\001\242\002\003HLW')) _GREETER = _descriptor.ServiceDescriptor( name='Greeter', full_name='helloworld.Greeter', file=DESCRIPTOR, index=0, options=None, serialized_start=93, serialized_end=166, methods=[ _descriptor.MethodDescriptor( name='SayHello', full_name='helloworld.Greeter.SayHello', index=0, containing_service=None, input_type=_HELLOREQUEST, output_type=_HELLOREPLY, options=None, ), ]) _sym_db.RegisterServiceDescriptor(_GREETER) DESCRIPTOR.services_by_name['Greeter'] = _GREETER # @@protoc_insertion_point(module_scope) grpc-1.30.2/examples/python/interceptors/headers/helloworld_pb2_grpc.py000066400000000000000000000024631370425124100263320ustar00rootroot00000000000000# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! import grpc import helloworld_pb2 as helloworld__pb2 class GreeterStub(object): """The greeting service definition. """ def __init__(self, channel): """Constructor. Args: channel: A grpc.Channel. """ self.SayHello = channel.unary_unary( '/helloworld.Greeter/SayHello', request_serializer=helloworld__pb2.HelloRequest.SerializeToString, response_deserializer=helloworld__pb2.HelloReply.FromString, ) class GreeterServicer(object): """The greeting service definition. """ def SayHello(self, request, context): """Sends a greeting """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') def add_GreeterServicer_to_server(servicer, server): rpc_method_handlers = { 'SayHello': grpc.unary_unary_rpc_method_handler( servicer.SayHello, request_deserializer=helloworld__pb2.HelloRequest.FromString, response_serializer=helloworld__pb2.HelloReply.SerializeToString, ), } generic_handler = grpc.method_handlers_generic_handler( 'helloworld.Greeter', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) grpc-1.30.2/examples/python/interceptors/headers/request_header_validator_interceptor.py000066400000000000000000000025271370425124100320650ustar00rootroot00000000000000# Copyright 2017 gRPC 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 # # 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. """Interceptor that ensures a specific header is present.""" import grpc def _unary_unary_rpc_terminator(code, details): def terminate(ignored_request, context): context.abort(code, details) return grpc.unary_unary_rpc_method_handler(terminate) class RequestHeaderValidatorInterceptor(grpc.ServerInterceptor): def __init__(self, header, value, code, details): self._header = header self._value = value self._terminator = _unary_unary_rpc_terminator(code, details) def intercept_service(self, continuation, handler_call_details): if (self._header, self._value) in handler_call_details.invocation_metadata: return continuation(handler_call_details) else: return self._terminator grpc-1.30.2/examples/python/metadata/000077500000000000000000000000001370425124100174465ustar00rootroot00000000000000grpc-1.30.2/examples/python/metadata/README.md000066400000000000000000000007241370425124100207300ustar00rootroot00000000000000An example showing how to add custom HTTP2 headers (or [metadata](https://grpc.io/grpc/python/glossary.html) in gRPC glossary) HTTP2 supports initial headers and trailing headers, which gRPC utilizes both of them ([learn more](https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md)). More complete documentation lives at [grpc.io](https://grpc.io/docs/tutorials/basic/python.html). For API reference please see [API](https://grpc.io/grpc/python/grpc.html). grpc-1.30.2/examples/python/metadata/helloworld_pb2.py000066400000000000000000000075101370425124100227410ustar00rootroot00000000000000# Generated by the protocol buffer compiler. DO NOT EDIT! # source: helloworld.proto import sys _b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() DESCRIPTOR = _descriptor.FileDescriptor( name='helloworld.proto', package='helloworld', syntax='proto3', serialized_pb=_b('\n\x10helloworld.proto\x12\nhelloworld\"\x1c\n\x0cHelloRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x1d\n\nHelloReply\x12\x0f\n\x07message\x18\x01 \x01(\t2I\n\x07Greeter\x12>\n\x08SayHello\x12\x18.helloworld.HelloRequest\x1a\x16.helloworld.HelloReply\"\x00\x42\x36\n\x1bio.grpc.examples.helloworldB\x0fHelloWorldProtoP\x01\xa2\x02\x03HLWb\x06proto3') ) _HELLOREQUEST = _descriptor.Descriptor( name='HelloRequest', full_name='helloworld.HelloRequest', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( name='name', full_name='helloworld.HelloRequest.name', index=0, number=1, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), ], extensions=[ ], nested_types=[], enum_types=[ ], options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=32, serialized_end=60, ) _HELLOREPLY = _descriptor.Descriptor( name='HelloReply', full_name='helloworld.HelloReply', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( name='message', full_name='helloworld.HelloReply.message', index=0, number=1, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), ], extensions=[ ], nested_types=[], enum_types=[ ], options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=62, serialized_end=91, ) DESCRIPTOR.message_types_by_name['HelloRequest'] = _HELLOREQUEST DESCRIPTOR.message_types_by_name['HelloReply'] = _HELLOREPLY _sym_db.RegisterFileDescriptor(DESCRIPTOR) HelloRequest = _reflection.GeneratedProtocolMessageType('HelloRequest', (_message.Message,), dict( DESCRIPTOR = _HELLOREQUEST, __module__ = 'helloworld_pb2' # @@protoc_insertion_point(class_scope:helloworld.HelloRequest) )) _sym_db.RegisterMessage(HelloRequest) HelloReply = _reflection.GeneratedProtocolMessageType('HelloReply', (_message.Message,), dict( DESCRIPTOR = _HELLOREPLY, __module__ = 'helloworld_pb2' # @@protoc_insertion_point(class_scope:helloworld.HelloReply) )) _sym_db.RegisterMessage(HelloReply) DESCRIPTOR.has_options = True DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\033io.grpc.examples.helloworldB\017HelloWorldProtoP\001\242\002\003HLW')) _GREETER = _descriptor.ServiceDescriptor( name='Greeter', full_name='helloworld.Greeter', file=DESCRIPTOR, index=0, options=None, serialized_start=93, serialized_end=166, methods=[ _descriptor.MethodDescriptor( name='SayHello', full_name='helloworld.Greeter.SayHello', index=0, containing_service=None, input_type=_HELLOREQUEST, output_type=_HELLOREPLY, options=None, ), ]) _sym_db.RegisterServiceDescriptor(_GREETER) DESCRIPTOR.services_by_name['Greeter'] = _GREETER # @@protoc_insertion_point(module_scope) grpc-1.30.2/examples/python/metadata/helloworld_pb2_grpc.py000066400000000000000000000024631370425124100237560ustar00rootroot00000000000000# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! import grpc import helloworld_pb2 as helloworld__pb2 class GreeterStub(object): """The greeting service definition. """ def __init__(self, channel): """Constructor. Args: channel: A grpc.Channel. """ self.SayHello = channel.unary_unary( '/helloworld.Greeter/SayHello', request_serializer=helloworld__pb2.HelloRequest.SerializeToString, response_deserializer=helloworld__pb2.HelloReply.FromString, ) class GreeterServicer(object): """The greeting service definition. """ def SayHello(self, request, context): """Sends a greeting """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') def add_GreeterServicer_to_server(servicer, server): rpc_method_handlers = { 'SayHello': grpc.unary_unary_rpc_method_handler( servicer.SayHello, request_deserializer=helloworld__pb2.HelloRequest.FromString, response_serializer=helloworld__pb2.HelloReply.SerializeToString, ), } generic_handler = grpc.method_handlers_generic_handler( 'helloworld.Greeter', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) grpc-1.30.2/examples/python/metadata/metadata_client.py000066400000000000000000000032641370425124100231430ustar00rootroot00000000000000# Copyright 2018 The gRPC 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 # # 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. """Example gRPC client that gets/sets metadata (HTTP2 headers)""" from __future__ import print_function import logging import grpc import helloworld_pb2 import helloworld_pb2_grpc def run(): # NOTE(gRPC Python Team): .close() is possible on a channel and should be # used in circumstances in which the with statement does not fit the needs # of the code. with grpc.insecure_channel('localhost:50051') as channel: stub = helloworld_pb2_grpc.GreeterStub(channel) response, call = stub.SayHello.with_call( helloworld_pb2.HelloRequest(name='you'), metadata=( ('initial-metadata-1', 'The value should be str'), ('binary-metadata-bin', b'With -bin surffix, the value can be bytes'), ('accesstoken', 'gRPC Python is great'), )) print("Greeter client received: " + response.message) for key, value in call.trailing_metadata(): print('Greeter client received trailing metadata: key=%s value=%s' % (key, value)) if __name__ == '__main__': logging.basicConfig() run() grpc-1.30.2/examples/python/metadata/metadata_server.py000066400000000000000000000030171370425124100231670ustar00rootroot00000000000000# Copyright 2018 The gRPC 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 # # 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. """Example gRPC server that gets/sets metadata (HTTP2 headers)""" from __future__ import print_function from concurrent import futures import logging import grpc import helloworld_pb2 import helloworld_pb2_grpc class Greeter(helloworld_pb2_grpc.GreeterServicer): def SayHello(self, request, context): for key, value in context.invocation_metadata(): print('Received initial metadata: key=%s value=%s' % (key, value)) context.set_trailing_metadata(( ('checksum-bin', b'I agree'), ('retry', 'false'), )) return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name) def serve(): server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server) server.add_insecure_port('[::]:50051') server.start() server.wait_for_termination() if __name__ == '__main__': logging.basicConfig() serve() grpc-1.30.2/examples/python/multiplex/000077500000000000000000000000001370425124100177115ustar00rootroot00000000000000grpc-1.30.2/examples/python/multiplex/.gitignore000066400000000000000000000000061370425124100216750ustar00rootroot00000000000000*.pyc grpc-1.30.2/examples/python/multiplex/README.md000066400000000000000000000002661370425124100211740ustar00rootroot00000000000000An example showing two stubs sharing a channel and two servicers sharing a server. More complete documentation lives at [grpc.io](https://grpc.io/docs/tutorials/basic/python.html). grpc-1.30.2/examples/python/multiplex/helloworld_pb2.py000066400000000000000000000075101370425124100232040ustar00rootroot00000000000000# Generated by the protocol buffer compiler. DO NOT EDIT! # source: helloworld.proto import sys _b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() DESCRIPTOR = _descriptor.FileDescriptor( name='helloworld.proto', package='helloworld', syntax='proto3', serialized_pb=_b('\n\x10helloworld.proto\x12\nhelloworld\"\x1c\n\x0cHelloRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x1d\n\nHelloReply\x12\x0f\n\x07message\x18\x01 \x01(\t2I\n\x07Greeter\x12>\n\x08SayHello\x12\x18.helloworld.HelloRequest\x1a\x16.helloworld.HelloReply\"\x00\x42\x36\n\x1bio.grpc.examples.helloworldB\x0fHelloWorldProtoP\x01\xa2\x02\x03HLWb\x06proto3') ) _HELLOREQUEST = _descriptor.Descriptor( name='HelloRequest', full_name='helloworld.HelloRequest', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( name='name', full_name='helloworld.HelloRequest.name', index=0, number=1, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), ], extensions=[ ], nested_types=[], enum_types=[ ], options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=32, serialized_end=60, ) _HELLOREPLY = _descriptor.Descriptor( name='HelloReply', full_name='helloworld.HelloReply', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( name='message', full_name='helloworld.HelloReply.message', index=0, number=1, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), ], extensions=[ ], nested_types=[], enum_types=[ ], options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=62, serialized_end=91, ) DESCRIPTOR.message_types_by_name['HelloRequest'] = _HELLOREQUEST DESCRIPTOR.message_types_by_name['HelloReply'] = _HELLOREPLY _sym_db.RegisterFileDescriptor(DESCRIPTOR) HelloRequest = _reflection.GeneratedProtocolMessageType('HelloRequest', (_message.Message,), dict( DESCRIPTOR = _HELLOREQUEST, __module__ = 'helloworld_pb2' # @@protoc_insertion_point(class_scope:helloworld.HelloRequest) )) _sym_db.RegisterMessage(HelloRequest) HelloReply = _reflection.GeneratedProtocolMessageType('HelloReply', (_message.Message,), dict( DESCRIPTOR = _HELLOREPLY, __module__ = 'helloworld_pb2' # @@protoc_insertion_point(class_scope:helloworld.HelloReply) )) _sym_db.RegisterMessage(HelloReply) DESCRIPTOR.has_options = True DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\033io.grpc.examples.helloworldB\017HelloWorldProtoP\001\242\002\003HLW')) _GREETER = _descriptor.ServiceDescriptor( name='Greeter', full_name='helloworld.Greeter', file=DESCRIPTOR, index=0, options=None, serialized_start=93, serialized_end=166, methods=[ _descriptor.MethodDescriptor( name='SayHello', full_name='helloworld.Greeter.SayHello', index=0, containing_service=None, input_type=_HELLOREQUEST, output_type=_HELLOREPLY, options=None, ), ]) _sym_db.RegisterServiceDescriptor(_GREETER) DESCRIPTOR.services_by_name['Greeter'] = _GREETER # @@protoc_insertion_point(module_scope) grpc-1.30.2/examples/python/multiplex/helloworld_pb2_grpc.py000066400000000000000000000024631370425124100242210ustar00rootroot00000000000000# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! import grpc import helloworld_pb2 as helloworld__pb2 class GreeterStub(object): """The greeting service definition. """ def __init__(self, channel): """Constructor. Args: channel: A grpc.Channel. """ self.SayHello = channel.unary_unary( '/helloworld.Greeter/SayHello', request_serializer=helloworld__pb2.HelloRequest.SerializeToString, response_deserializer=helloworld__pb2.HelloReply.FromString, ) class GreeterServicer(object): """The greeting service definition. """ def SayHello(self, request, context): """Sends a greeting """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') def add_GreeterServicer_to_server(servicer, server): rpc_method_handlers = { 'SayHello': grpc.unary_unary_rpc_method_handler( servicer.SayHello, request_deserializer=helloworld__pb2.HelloRequest.FromString, response_serializer=helloworld__pb2.HelloReply.SerializeToString, ), } generic_handler = grpc.method_handlers_generic_handler( 'helloworld.Greeter', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) grpc-1.30.2/examples/python/multiplex/multiplex_client.py000066400000000000000000000110651370425124100236470ustar00rootroot00000000000000# Copyright 2016 gRPC 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 # # 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. """A client that makes both Greeter and RouteGuide RPCs.""" from __future__ import print_function import random import time import logging import grpc import helloworld_pb2 import helloworld_pb2_grpc import route_guide_pb2 import route_guide_pb2_grpc import route_guide_resources def make_route_note(message, latitude, longitude): return route_guide_pb2.RouteNote( message=message, location=route_guide_pb2.Point(latitude=latitude, longitude=longitude)) def guide_get_one_feature(route_guide_stub, point): feature = route_guide_stub.GetFeature(point) if not feature.location: print("Server returned incomplete feature") return if feature.name: print("Feature called %s at %s" % (feature.name, feature.location)) else: print("Found no feature at %s" % feature.location) def guide_get_feature(route_guide_stub): guide_get_one_feature( route_guide_stub, route_guide_pb2.Point(latitude=409146138, longitude=-746188906)) guide_get_one_feature(route_guide_stub, route_guide_pb2.Point(latitude=0, longitude=0)) def guide_list_features(route_guide_stub): rectangle = route_guide_pb2.Rectangle( lo=route_guide_pb2.Point(latitude=400000000, longitude=-750000000), hi=route_guide_pb2.Point(latitude=420000000, longitude=-730000000)) print("Looking for features between 40, -75 and 42, -73") features = route_guide_stub.ListFeatures(rectangle) for feature in features: print("Feature called %s at %s" % (feature.name, feature.location)) def generate_route(feature_list): for _ in range(0, 10): random_feature = feature_list[random.randint(0, len(feature_list) - 1)] print("Visiting point %s" % random_feature.location) yield random_feature.location time.sleep(random.uniform(0.5, 1.5)) def guide_record_route(route_guide_stub): feature_list = route_guide_resources.read_route_guide_database() route_iterator = generate_route(feature_list) route_summary = route_guide_stub.RecordRoute(route_iterator) print("Finished trip with %s points " % route_summary.point_count) print("Passed %s features " % route_summary.feature_count) print("Travelled %s meters " % route_summary.distance) print("It took %s seconds " % route_summary.elapsed_time) def generate_messages(): messages = [ make_route_note("First message", 0, 0), make_route_note("Second message", 0, 1), make_route_note("Third message", 1, 0), make_route_note("Fourth message", 0, 0), make_route_note("Fifth message", 1, 0), ] for msg in messages: print("Sending %s at %s" % (msg.message, msg.location)) yield msg time.sleep(random.uniform(0.5, 1.0)) def guide_route_chat(route_guide_stub): responses = route_guide_stub.RouteChat(generate_messages()) for response in responses: print("Received message %s at %s" % (response.message, response.location)) def run(): # NOTE(gRPC Python Team): .close() is possible on a channel and should be # used in circumstances in which the with statement does not fit the needs # of the code. with grpc.insecure_channel('localhost:50051') as channel: greeter_stub = helloworld_pb2_grpc.GreeterStub(channel) route_guide_stub = route_guide_pb2_grpc.RouteGuideStub(channel) greeter_response = greeter_stub.SayHello( helloworld_pb2.HelloRequest(name='you')) print("Greeter client received: " + greeter_response.message) print("-------------- GetFeature --------------") guide_get_feature(route_guide_stub) print("-------------- ListFeatures --------------") guide_list_features(route_guide_stub) print("-------------- RecordRoute --------------") guide_record_route(route_guide_stub) print("-------------- RouteChat --------------") guide_route_chat(route_guide_stub) if __name__ == '__main__': logging.basicConfig() run() grpc-1.30.2/examples/python/multiplex/multiplex_server.py000066400000000000000000000107441370425124100237020ustar00rootroot00000000000000# Copyright 2016 gRPC 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 # # 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. """A gRPC server servicing both Greeter and RouteGuide RPCs.""" from concurrent import futures import time import math import logging import grpc import helloworld_pb2 import helloworld_pb2_grpc import route_guide_pb2 import route_guide_pb2_grpc import route_guide_resources def _get_feature(feature_db, point): """Returns Feature at given location or None.""" for feature in feature_db: if feature.location == point: return feature return None def _get_distance(start, end): """Distance between two points.""" coord_factor = 10000000.0 lat_1 = start.latitude / coord_factor lat_2 = end.latitude / coord_factor lon_1 = start.longitude / coord_factor lon_2 = end.longitude / coord_factor lat_rad_1 = math.radians(lat_1) lat_rad_2 = math.radians(lat_2) delta_lat_rad = math.radians(lat_2 - lat_1) delta_lon_rad = math.radians(lon_2 - lon_1) a = (pow(math.sin(delta_lat_rad / 2), 2) + (math.cos(lat_rad_1) * math.cos(lat_rad_2) * pow(math.sin(delta_lon_rad / 2), 2))) c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a)) R = 6371000 # metres return R * c class _GreeterServicer(helloworld_pb2_grpc.GreeterServicer): def SayHello(self, request, context): return helloworld_pb2.HelloReply( message='Hello, {}!'.format(request.name)) class _RouteGuideServicer(route_guide_pb2_grpc.RouteGuideServicer): """Provides methods that implement functionality of route guide server.""" def __init__(self): self.db = route_guide_resources.read_route_guide_database() def GetFeature(self, request, context): feature = _get_feature(self.db, request) if feature is None: return route_guide_pb2.Feature(name="", location=request) else: return feature def ListFeatures(self, request, context): left = min(request.lo.longitude, request.hi.longitude) right = max(request.lo.longitude, request.hi.longitude) top = max(request.lo.latitude, request.hi.latitude) bottom = min(request.lo.latitude, request.hi.latitude) for feature in self.db: if (feature.location.longitude >= left and feature.location.longitude <= right and feature.location.latitude >= bottom and feature.location.latitude <= top): yield feature def RecordRoute(self, request_iterator, context): point_count = 0 feature_count = 0 distance = 0.0 prev_point = None start_time = time.time() for point in request_iterator: point_count += 1 if _get_feature(self.db, point): feature_count += 1 if prev_point: distance += _get_distance(prev_point, point) prev_point = point elapsed_time = time.time() - start_time return route_guide_pb2.RouteSummary(point_count=point_count, feature_count=feature_count, distance=int(distance), elapsed_time=int(elapsed_time)) def RouteChat(self, request_iterator, context): prev_notes = [] for new_note in request_iterator: for prev_note in prev_notes: if prev_note.location == new_note.location: yield prev_note prev_notes.append(new_note) def serve(): server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) helloworld_pb2_grpc.add_GreeterServicer_to_server(_GreeterServicer(), server) route_guide_pb2_grpc.add_RouteGuideServicer_to_server( _RouteGuideServicer(), server) server.add_insecure_port('[::]:50051') server.start() server.wait_for_termination() if __name__ == '__main__': logging.basicConfig() serve() grpc-1.30.2/examples/python/multiplex/route_guide_db.json000066400000000000000000000327101370425124100235670ustar00rootroot00000000000000[{ "location": { "latitude": 407838351, "longitude": -746143763 }, "name": "Patriots Path, Mendham, NJ 07945, USA" }, { "location": { "latitude": 408122808, "longitude": -743999179 }, "name": "101 New Jersey 10, Whippany, NJ 07981, USA" }, { "location": { "latitude": 413628156, "longitude": -749015468 }, "name": "U.S. 6, Shohola, PA 18458, USA" }, { "location": { "latitude": 419999544, "longitude": -740371136 }, "name": "5 Conners Road, Kingston, NY 12401, USA" }, { "location": { "latitude": 414008389, "longitude": -743951297 }, "name": "Mid Hudson Psychiatric Center, New Hampton, NY 10958, USA" }, { "location": { "latitude": 419611318, "longitude": -746524769 }, "name": "287 Flugertown Road, Livingston Manor, NY 12758, USA" }, { "location": { "latitude": 406109563, "longitude": -742186778 }, "name": "4001 Tremley Point Road, Linden, NJ 07036, USA" }, { "location": { "latitude": 416802456, "longitude": -742370183 }, "name": "352 South Mountain Road, Wallkill, NY 12589, USA" }, { "location": { "latitude": 412950425, "longitude": -741077389 }, "name": "Bailey Turn Road, Harriman, NY 10926, USA" }, { "location": { "latitude": 412144655, "longitude": -743949739 }, "name": "193-199 Wawayanda Road, Hewitt, NJ 07421, USA" }, { "location": { "latitude": 415736605, "longitude": -742847522 }, "name": "406-496 Ward Avenue, Pine Bush, NY 12566, USA" }, { "location": { "latitude": 413843930, "longitude": -740501726 }, "name": "162 Merrill Road, Highland Mills, NY 10930, USA" }, { "location": { "latitude": 410873075, "longitude": -744459023 }, "name": "Clinton Road, West Milford, NJ 07480, USA" }, { "location": { "latitude": 412346009, "longitude": -744026814 }, "name": "16 Old Brook Lane, Warwick, NY 10990, USA" }, { "location": { "latitude": 402948455, "longitude": -747903913 }, "name": "3 Drake Lane, Pennington, NJ 08534, USA" }, { "location": { "latitude": 406337092, "longitude": -740122226 }, "name": "6324 8th Avenue, Brooklyn, NY 11220, USA" }, { "location": { "latitude": 406421967, "longitude": -747727624 }, "name": "1 Merck Access Road, Whitehouse Station, NJ 08889, USA" }, { "location": { "latitude": 416318082, "longitude": -749677716 }, "name": "78-98 Schalck Road, Narrowsburg, NY 12764, USA" }, { "location": { "latitude": 415301720, "longitude": -748416257 }, "name": "282 Lakeview Drive Road, Highland Lake, NY 12743, USA" }, { "location": { "latitude": 402647019, "longitude": -747071791 }, "name": "330 Evelyn Avenue, Hamilton Township, NJ 08619, USA" }, { "location": { "latitude": 412567807, "longitude": -741058078 }, "name": "New York State Reference Route 987E, Southfields, NY 10975, USA" }, { "location": { "latitude": 416855156, "longitude": -744420597 }, "name": "103-271 Tempaloni Road, Ellenville, NY 12428, USA" }, { "location": { "latitude": 404663628, "longitude": -744820157 }, "name": "1300 Airport Road, North Brunswick Township, NJ 08902, USA" }, { "location": { "latitude": 407113723, "longitude": -749746483 }, "name": "" }, { "location": { "latitude": 402133926, "longitude": -743613249 }, "name": "" }, { "location": { "latitude": 400273442, "longitude": -741220915 }, "name": "" }, { "location": { "latitude": 411236786, "longitude": -744070769 }, "name": "" }, { "location": { "latitude": 411633782, "longitude": -746784970 }, "name": "211-225 Plains Road, Augusta, NJ 07822, USA" }, { "location": { "latitude": 415830701, "longitude": -742952812 }, "name": "" }, { "location": { "latitude": 413447164, "longitude": -748712898 }, "name": "165 Pedersen Ridge Road, Milford, PA 18337, USA" }, { "location": { "latitude": 405047245, "longitude": -749800722 }, "name": "100-122 Locktown Road, Frenchtown, NJ 08825, USA" }, { "location": { "latitude": 418858923, "longitude": -746156790 }, "name": "" }, { "location": { "latitude": 417951888, "longitude": -748484944 }, "name": "650-652 Willi Hill Road, Swan Lake, NY 12783, USA" }, { "location": { "latitude": 407033786, "longitude": -743977337 }, "name": "26 East 3rd Street, New Providence, NJ 07974, USA" }, { "location": { "latitude": 417548014, "longitude": -740075041 }, "name": "" }, { "location": { "latitude": 410395868, "longitude": -744972325 }, "name": "" }, { "location": { "latitude": 404615353, "longitude": -745129803 }, "name": "" }, { "location": { "latitude": 406589790, "longitude": -743560121 }, "name": "611 Lawrence Avenue, Westfield, NJ 07090, USA" }, { "location": { "latitude": 414653148, "longitude": -740477477 }, "name": "18 Lannis Avenue, New Windsor, NY 12553, USA" }, { "location": { "latitude": 405957808, "longitude": -743255336 }, "name": "82-104 Amherst Avenue, Colonia, NJ 07067, USA" }, { "location": { "latitude": 411733589, "longitude": -741648093 }, "name": "170 Seven Lakes Drive, Sloatsburg, NY 10974, USA" }, { "location": { "latitude": 412676291, "longitude": -742606606 }, "name": "1270 Lakes Road, Monroe, NY 10950, USA" }, { "location": { "latitude": 409224445, "longitude": -748286738 }, "name": "509-535 Alphano Road, Great Meadows, NJ 07838, USA" }, { "location": { "latitude": 406523420, "longitude": -742135517 }, "name": "652 Garden Street, Elizabeth, NJ 07202, USA" }, { "location": { "latitude": 401827388, "longitude": -740294537 }, "name": "349 Sea Spray Court, Neptune City, NJ 07753, USA" }, { "location": { "latitude": 410564152, "longitude": -743685054 }, "name": "13-17 Stanley Street, West Milford, NJ 07480, USA" }, { "location": { "latitude": 408472324, "longitude": -740726046 }, "name": "47 Industrial Avenue, Teterboro, NJ 07608, USA" }, { "location": { "latitude": 412452168, "longitude": -740214052 }, "name": "5 White Oak Lane, Stony Point, NY 10980, USA" }, { "location": { "latitude": 409146138, "longitude": -746188906 }, "name": "Berkshire Valley Management Area Trail, Jefferson, NJ, USA" }, { "location": { "latitude": 404701380, "longitude": -744781745 }, "name": "1007 Jersey Avenue, New Brunswick, NJ 08901, USA" }, { "location": { "latitude": 409642566, "longitude": -746017679 }, "name": "6 East Emerald Isle Drive, Lake Hopatcong, NJ 07849, USA" }, { "location": { "latitude": 408031728, "longitude": -748645385 }, "name": "1358-1474 New Jersey 57, Port Murray, NJ 07865, USA" }, { "location": { "latitude": 413700272, "longitude": -742135189 }, "name": "367 Prospect Road, Chester, NY 10918, USA" }, { "location": { "latitude": 404310607, "longitude": -740282632 }, "name": "10 Simon Lake Drive, Atlantic Highlands, NJ 07716, USA" }, { "location": { "latitude": 409319800, "longitude": -746201391 }, "name": "11 Ward Street, Mount Arlington, NJ 07856, USA" }, { "location": { "latitude": 406685311, "longitude": -742108603 }, "name": "300-398 Jefferson Avenue, Elizabeth, NJ 07201, USA" }, { "location": { "latitude": 419018117, "longitude": -749142781 }, "name": "43 Dreher Road, Roscoe, NY 12776, USA" }, { "location": { "latitude": 412856162, "longitude": -745148837 }, "name": "Swan Street, Pine Island, NY 10969, USA" }, { "location": { "latitude": 416560744, "longitude": -746721964 }, "name": "66 Pleasantview Avenue, Monticello, NY 12701, USA" }, { "location": { "latitude": 405314270, "longitude": -749836354 }, "name": "" }, { "location": { "latitude": 414219548, "longitude": -743327440 }, "name": "" }, { "location": { "latitude": 415534177, "longitude": -742900616 }, "name": "565 Winding Hills Road, Montgomery, NY 12549, USA" }, { "location": { "latitude": 406898530, "longitude": -749127080 }, "name": "231 Rocky Run Road, Glen Gardner, NJ 08826, USA" }, { "location": { "latitude": 407586880, "longitude": -741670168 }, "name": "100 Mount Pleasant Avenue, Newark, NJ 07104, USA" }, { "location": { "latitude": 400106455, "longitude": -742870190 }, "name": "517-521 Huntington Drive, Manchester Township, NJ 08759, USA" }, { "location": { "latitude": 400066188, "longitude": -746793294 }, "name": "" }, { "location": { "latitude": 418803880, "longitude": -744102673 }, "name": "40 Mountain Road, Napanoch, NY 12458, USA" }, { "location": { "latitude": 414204288, "longitude": -747895140 }, "name": "" }, { "location": { "latitude": 414777405, "longitude": -740615601 }, "name": "" }, { "location": { "latitude": 415464475, "longitude": -747175374 }, "name": "48 North Road, Forestburgh, NY 12777, USA" }, { "location": { "latitude": 404062378, "longitude": -746376177 }, "name": "" }, { "location": { "latitude": 405688272, "longitude": -749285130 }, "name": "" }, { "location": { "latitude": 400342070, "longitude": -748788996 }, "name": "" }, { "location": { "latitude": 401809022, "longitude": -744157964 }, "name": "" }, { "location": { "latitude": 404226644, "longitude": -740517141 }, "name": "9 Thompson Avenue, Leonardo, NJ 07737, USA" }, { "location": { "latitude": 410322033, "longitude": -747871659 }, "name": "" }, { "location": { "latitude": 407100674, "longitude": -747742727 }, "name": "" }, { "location": { "latitude": 418811433, "longitude": -741718005 }, "name": "213 Bush Road, Stone Ridge, NY 12484, USA" }, { "location": { "latitude": 415034302, "longitude": -743850945 }, "name": "" }, { "location": { "latitude": 411349992, "longitude": -743694161 }, "name": "" }, { "location": { "latitude": 404839914, "longitude": -744759616 }, "name": "1-17 Bergen Court, New Brunswick, NJ 08901, USA" }, { "location": { "latitude": 414638017, "longitude": -745957854 }, "name": "35 Oakland Valley Road, Cuddebackville, NY 12729, USA" }, { "location": { "latitude": 412127800, "longitude": -740173578 }, "name": "" }, { "location": { "latitude": 401263460, "longitude": -747964303 }, "name": "" }, { "location": { "latitude": 412843391, "longitude": -749086026 }, "name": "" }, { "location": { "latitude": 418512773, "longitude": -743067823 }, "name": "" }, { "location": { "latitude": 404318328, "longitude": -740835638 }, "name": "42-102 Main Street, Belford, NJ 07718, USA" }, { "location": { "latitude": 419020746, "longitude": -741172328 }, "name": "" }, { "location": { "latitude": 404080723, "longitude": -746119569 }, "name": "" }, { "location": { "latitude": 401012643, "longitude": -744035134 }, "name": "" }, { "location": { "latitude": 404306372, "longitude": -741079661 }, "name": "" }, { "location": { "latitude": 403966326, "longitude": -748519297 }, "name": "" }, { "location": { "latitude": 405002031, "longitude": -748407866 }, "name": "" }, { "location": { "latitude": 409532885, "longitude": -742200683 }, "name": "" }, { "location": { "latitude": 416851321, "longitude": -742674555 }, "name": "" }, { "location": { "latitude": 406411633, "longitude": -741722051 }, "name": "3387 Richmond Terrace, Staten Island, NY 10303, USA" }, { "location": { "latitude": 413069058, "longitude": -744597778 }, "name": "261 Van Sickle Road, Goshen, NY 10924, USA" }, { "location": { "latitude": 418465462, "longitude": -746859398 }, "name": "" }, { "location": { "latitude": 411733222, "longitude": -744228360 }, "name": "" }, { "location": { "latitude": 410248224, "longitude": -747127767 }, "name": "3 Hasta Way, Newton, NJ 07860, USA" }] grpc-1.30.2/examples/python/multiplex/route_guide_pb2.py000066400000000000000000000254061370425124100233500ustar00rootroot00000000000000# Generated by the protocol buffer compiler. DO NOT EDIT! # source: route_guide.proto import sys _b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() DESCRIPTOR = _descriptor.FileDescriptor( name='route_guide.proto', package='routeguide', syntax='proto3', serialized_pb=_b('\n\x11route_guide.proto\x12\nrouteguide\",\n\x05Point\x12\x10\n\x08latitude\x18\x01 \x01(\x05\x12\x11\n\tlongitude\x18\x02 \x01(\x05\"I\n\tRectangle\x12\x1d\n\x02lo\x18\x01 \x01(\x0b\x32\x11.routeguide.Point\x12\x1d\n\x02hi\x18\x02 \x01(\x0b\x32\x11.routeguide.Point\"<\n\x07\x46\x65\x61ture\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x08location\x18\x02 \x01(\x0b\x32\x11.routeguide.Point\"A\n\tRouteNote\x12#\n\x08location\x18\x01 \x01(\x0b\x32\x11.routeguide.Point\x12\x0f\n\x07message\x18\x02 \x01(\t\"b\n\x0cRouteSummary\x12\x13\n\x0bpoint_count\x18\x01 \x01(\x05\x12\x15\n\rfeature_count\x18\x02 \x01(\x05\x12\x10\n\x08\x64istance\x18\x03 \x01(\x05\x12\x14\n\x0c\x65lapsed_time\x18\x04 \x01(\x05\x32\x85\x02\n\nRouteGuide\x12\x36\n\nGetFeature\x12\x11.routeguide.Point\x1a\x13.routeguide.Feature\"\x00\x12>\n\x0cListFeatures\x12\x15.routeguide.Rectangle\x1a\x13.routeguide.Feature\"\x00\x30\x01\x12>\n\x0bRecordRoute\x12\x11.routeguide.Point\x1a\x18.routeguide.RouteSummary\"\x00(\x01\x12?\n\tRouteChat\x12\x15.routeguide.RouteNote\x1a\x15.routeguide.RouteNote\"\x00(\x01\x30\x01\x42\x36\n\x1bio.grpc.examples.routeguideB\x0fRouteGuideProtoP\x01\xa2\x02\x03RTGb\x06proto3') ) _POINT = _descriptor.Descriptor( name='Point', full_name='routeguide.Point', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( name='latitude', full_name='routeguide.Point.latitude', index=0, number=1, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), _descriptor.FieldDescriptor( name='longitude', full_name='routeguide.Point.longitude', index=1, number=2, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), ], extensions=[ ], nested_types=[], enum_types=[ ], options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=33, serialized_end=77, ) _RECTANGLE = _descriptor.Descriptor( name='Rectangle', full_name='routeguide.Rectangle', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( name='lo', full_name='routeguide.Rectangle.lo', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), _descriptor.FieldDescriptor( name='hi', full_name='routeguide.Rectangle.hi', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), ], extensions=[ ], nested_types=[], enum_types=[ ], options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=79, serialized_end=152, ) _FEATURE = _descriptor.Descriptor( name='Feature', full_name='routeguide.Feature', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( name='name', full_name='routeguide.Feature.name', index=0, number=1, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), _descriptor.FieldDescriptor( name='location', full_name='routeguide.Feature.location', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), ], extensions=[ ], nested_types=[], enum_types=[ ], options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=154, serialized_end=214, ) _ROUTENOTE = _descriptor.Descriptor( name='RouteNote', full_name='routeguide.RouteNote', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( name='location', full_name='routeguide.RouteNote.location', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), _descriptor.FieldDescriptor( name='message', full_name='routeguide.RouteNote.message', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), ], extensions=[ ], nested_types=[], enum_types=[ ], options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=216, serialized_end=281, ) _ROUTESUMMARY = _descriptor.Descriptor( name='RouteSummary', full_name='routeguide.RouteSummary', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( name='point_count', full_name='routeguide.RouteSummary.point_count', index=0, number=1, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), _descriptor.FieldDescriptor( name='feature_count', full_name='routeguide.RouteSummary.feature_count', index=1, number=2, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), _descriptor.FieldDescriptor( name='distance', full_name='routeguide.RouteSummary.distance', index=2, number=3, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), _descriptor.FieldDescriptor( name='elapsed_time', full_name='routeguide.RouteSummary.elapsed_time', index=3, number=4, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), ], extensions=[ ], nested_types=[], enum_types=[ ], options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=283, serialized_end=381, ) _RECTANGLE.fields_by_name['lo'].message_type = _POINT _RECTANGLE.fields_by_name['hi'].message_type = _POINT _FEATURE.fields_by_name['location'].message_type = _POINT _ROUTENOTE.fields_by_name['location'].message_type = _POINT DESCRIPTOR.message_types_by_name['Point'] = _POINT DESCRIPTOR.message_types_by_name['Rectangle'] = _RECTANGLE DESCRIPTOR.message_types_by_name['Feature'] = _FEATURE DESCRIPTOR.message_types_by_name['RouteNote'] = _ROUTENOTE DESCRIPTOR.message_types_by_name['RouteSummary'] = _ROUTESUMMARY _sym_db.RegisterFileDescriptor(DESCRIPTOR) Point = _reflection.GeneratedProtocolMessageType('Point', (_message.Message,), dict( DESCRIPTOR = _POINT, __module__ = 'route_guide_pb2' # @@protoc_insertion_point(class_scope:routeguide.Point) )) _sym_db.RegisterMessage(Point) Rectangle = _reflection.GeneratedProtocolMessageType('Rectangle', (_message.Message,), dict( DESCRIPTOR = _RECTANGLE, __module__ = 'route_guide_pb2' # @@protoc_insertion_point(class_scope:routeguide.Rectangle) )) _sym_db.RegisterMessage(Rectangle) Feature = _reflection.GeneratedProtocolMessageType('Feature', (_message.Message,), dict( DESCRIPTOR = _FEATURE, __module__ = 'route_guide_pb2' # @@protoc_insertion_point(class_scope:routeguide.Feature) )) _sym_db.RegisterMessage(Feature) RouteNote = _reflection.GeneratedProtocolMessageType('RouteNote', (_message.Message,), dict( DESCRIPTOR = _ROUTENOTE, __module__ = 'route_guide_pb2' # @@protoc_insertion_point(class_scope:routeguide.RouteNote) )) _sym_db.RegisterMessage(RouteNote) RouteSummary = _reflection.GeneratedProtocolMessageType('RouteSummary', (_message.Message,), dict( DESCRIPTOR = _ROUTESUMMARY, __module__ = 'route_guide_pb2' # @@protoc_insertion_point(class_scope:routeguide.RouteSummary) )) _sym_db.RegisterMessage(RouteSummary) DESCRIPTOR.has_options = True DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\033io.grpc.examples.routeguideB\017RouteGuideProtoP\001\242\002\003RTG')) _ROUTEGUIDE = _descriptor.ServiceDescriptor( name='RouteGuide', full_name='routeguide.RouteGuide', file=DESCRIPTOR, index=0, options=None, serialized_start=384, serialized_end=645, methods=[ _descriptor.MethodDescriptor( name='GetFeature', full_name='routeguide.RouteGuide.GetFeature', index=0, containing_service=None, input_type=_POINT, output_type=_FEATURE, options=None, ), _descriptor.MethodDescriptor( name='ListFeatures', full_name='routeguide.RouteGuide.ListFeatures', index=1, containing_service=None, input_type=_RECTANGLE, output_type=_FEATURE, options=None, ), _descriptor.MethodDescriptor( name='RecordRoute', full_name='routeguide.RouteGuide.RecordRoute', index=2, containing_service=None, input_type=_POINT, output_type=_ROUTESUMMARY, options=None, ), _descriptor.MethodDescriptor( name='RouteChat', full_name='routeguide.RouteGuide.RouteChat', index=3, containing_service=None, input_type=_ROUTENOTE, output_type=_ROUTENOTE, options=None, ), ]) _sym_db.RegisterServiceDescriptor(_ROUTEGUIDE) DESCRIPTOR.services_by_name['RouteGuide'] = _ROUTEGUIDE # @@protoc_insertion_point(module_scope) grpc-1.30.2/examples/python/multiplex/route_guide_pb2_grpc.py000066400000000000000000000102241370425124100243530ustar00rootroot00000000000000# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! import grpc import route_guide_pb2 as route__guide__pb2 class RouteGuideStub(object): """Interface exported by the server. """ def __init__(self, channel): """Constructor. Args: channel: A grpc.Channel. """ self.GetFeature = channel.unary_unary( '/routeguide.RouteGuide/GetFeature', request_serializer=route__guide__pb2.Point.SerializeToString, response_deserializer=route__guide__pb2.Feature.FromString, ) self.ListFeatures = channel.unary_stream( '/routeguide.RouteGuide/ListFeatures', request_serializer=route__guide__pb2.Rectangle.SerializeToString, response_deserializer=route__guide__pb2.Feature.FromString, ) self.RecordRoute = channel.stream_unary( '/routeguide.RouteGuide/RecordRoute', request_serializer=route__guide__pb2.Point.SerializeToString, response_deserializer=route__guide__pb2.RouteSummary.FromString, ) self.RouteChat = channel.stream_stream( '/routeguide.RouteGuide/RouteChat', request_serializer=route__guide__pb2.RouteNote.SerializeToString, response_deserializer=route__guide__pb2.RouteNote.FromString, ) class RouteGuideServicer(object): """Interface exported by the server. """ def GetFeature(self, request, context): """A simple RPC. Obtains the feature at a given position. A feature with an empty name is returned if there's no feature at the given position. """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') def ListFeatures(self, request, context): """A server-to-client streaming RPC. Obtains the Features available within the given Rectangle. Results are streamed rather than returned at once (e.g. in a response message with a repeated field), as the rectangle may cover a large area and contain a huge number of features. """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') def RecordRoute(self, request_iterator, context): """A client-to-server streaming RPC. Accepts a stream of Points on a route being traversed, returning a RouteSummary when traversal is completed. """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') def RouteChat(self, request_iterator, context): """A Bidirectional streaming RPC. Accepts a stream of RouteNotes sent while a route is being traversed, while receiving other RouteNotes (e.g. from other users). """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') def add_RouteGuideServicer_to_server(servicer, server): rpc_method_handlers = { 'GetFeature': grpc.unary_unary_rpc_method_handler( servicer.GetFeature, request_deserializer=route__guide__pb2.Point.FromString, response_serializer=route__guide__pb2.Feature.SerializeToString, ), 'ListFeatures': grpc.unary_stream_rpc_method_handler( servicer.ListFeatures, request_deserializer=route__guide__pb2.Rectangle.FromString, response_serializer=route__guide__pb2.Feature.SerializeToString, ), 'RecordRoute': grpc.stream_unary_rpc_method_handler( servicer.RecordRoute, request_deserializer=route__guide__pb2.Point.FromString, response_serializer=route__guide__pb2.RouteSummary.SerializeToString, ), 'RouteChat': grpc.stream_stream_rpc_method_handler( servicer.RouteChat, request_deserializer=route__guide__pb2.RouteNote.FromString, response_serializer=route__guide__pb2.RouteNote.SerializeToString, ), } generic_handler = grpc.method_handlers_generic_handler( 'routeguide.RouteGuide', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) grpc-1.30.2/examples/python/multiplex/route_guide_resources.py000066400000000000000000000024451370425124100246750ustar00rootroot00000000000000# Copyright 2015 gRPC 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 # # 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. """Common resources used in the gRPC route guide example.""" import json import route_guide_pb2 def read_route_guide_database(): """Reads the route guide database. Returns: The full contents of the route guide database as a sequence of route_guide_pb2.Features. """ feature_list = [] with open("route_guide_db.json") as route_guide_db_file: for item in json.load(route_guide_db_file): feature = route_guide_pb2.Feature( name=item["name"], location=route_guide_pb2.Point( latitude=item["location"]["latitude"], longitude=item["location"]["longitude"])) feature_list.append(feature) return feature_list grpc-1.30.2/examples/python/multiplex/run_codegen.py000066400000000000000000000016361370425124100225610ustar00rootroot00000000000000# Copyright 2016 gRPC 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 # # 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. """Generates protocol messages and gRPC stubs.""" from grpc_tools import protoc protoc.main(( '', '-I../../protos', '--python_out=.', '--grpc_python_out=.', '../../protos/helloworld.proto', )) protoc.main(( '', '-I../../protos', '--python_out=.', '--grpc_python_out=.', '../../protos/route_guide.proto', )) grpc-1.30.2/examples/python/multiprocessing/000077500000000000000000000000001370425124100211155ustar00rootroot00000000000000grpc-1.30.2/examples/python/multiprocessing/BUILD000066400000000000000000000035311370425124100217010ustar00rootroot00000000000000# gRPC Bazel BUILD file. # # Copyright 2019 The gRPC 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 # # 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. load("@rules_proto//proto:defs.bzl", "proto_library") load("//bazel:python_rules.bzl", "py_grpc_library", "py_proto_library") proto_library( name = "prime_proto", srcs = ["prime.proto"], ) py_proto_library( name = "prime_proto_pb2", deps = [":prime_proto"], ) py_grpc_library( name = "prime_proto_pb2_grpc", srcs = [":prime_proto"], deps = [":prime_proto_pb2"], ) py_binary( name = "client", testonly = 1, srcs = ["client.py"], imports = ["."], python_version = "PY3", srcs_version = "PY3", deps = [ ":prime_proto_pb2", ":prime_proto_pb2_grpc", "//src/python/grpcio/grpc:grpcio", ], ) py_binary( name = "server", testonly = 1, srcs = ["server.py"], imports = ["."], python_version = "PY3", srcs_version = "PY3", deps = [ "//src/python/grpcio/grpc:grpcio", ":prime_proto_pb2", ":prime_proto_pb2_grpc", ] + select({ "//conditions:default": ["@futures//:futures"], "//:python3": [], }), ) py_test( name = "test/_multiprocessing_example_test", size = "small", srcs = ["test/_multiprocessing_example_test.py"], data = [ ":client", ":server", ], python_version = "PY3", ) grpc-1.30.2/examples/python/multiprocessing/README.md000066400000000000000000000045541370425124100224040ustar00rootroot00000000000000## Multiprocessing with gRPC Python Multiprocessing allows application developers to sidestep the Python global interpreter lock and achieve true parallelism on multicore systems. Unfortunately, using multiprocessing and gRPC Python is not yet as simple as instantiating your server with a `futures.ProcessPoolExecutor`. The library is implemented as a C extension, maintaining much of the state that drives the system in native code. As such, upon calling [`fork`](http://man7.org/linux/man-pages/man2/fork.2.html), any threads in a critical section may leave the state of the gRPC library invalid in the child process. See this [excellent research paper](https://www.microsoft.com/en-us/research/uploads/prod/2019/04/fork-hotos19.pdf) for a thorough discussion of the topic. Calling `fork` without `exec` in your process *is* supported before any gRPC servers have been instantiated. Application developers can take advantage of this to parallelize their CPU-intensive operations. ## Calculating Prime Numbers with Multiple Processes This example calculates the first 10,000 prime numbers as an RPC. We instantiate one server per subprocess, balancing requests between the servers using the [`SO_REUSEPORT`](https://lwn.net/Articles/542629/) socket option. ```python _PROCESS_COUNT = multiprocessing.cpu_count() ``` On the server side, we detect the number of CPUs available on the system and spawn exactly that many child processes. If we spin up fewer, we won't be taking full advantage of the hardware resources available. ## Running the Example To run the server, [ensure `bazel` is installed](https://docs.bazel.build/versions/master/install.html) and run: ``` bazel run //examples/python/multiprocessing:server & ``` Note the address at which the server is running. For example, ``` ... [PID 107153] Binding to '[::]:33915' [PID 107507] Starting new server. [PID 107508] Starting new server. ... ``` Note that several servers have been started, each with its own PID. Now, start the client by running ``` bazel run //examples/python/multiprocessing:client -- [SERVER_ADDRESS] ``` For example, ``` bazel run //examples/python/multiprocessing:client -- [::]:33915 ``` Alternatively, generate code using the following and then run the client and server directly: ```python cd examples/python/helloworld python -m grpc_tools.protoc -I . prime.proto --python_out=. --grpc_python_out=. ``` grpc-1.30.2/examples/python/multiprocessing/client.py000066400000000000000000000061561370425124100227550ustar00rootroot00000000000000# Copyright 2019 gRPC 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 # # 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. """An example of multiprocessing concurrency with gRPC.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function import argparse import atexit import logging import multiprocessing import operator import sys import grpc import prime_pb2 import prime_pb2_grpc _PROCESS_COUNT = 8 _MAXIMUM_CANDIDATE = 10000 # Each worker process initializes a single channel after forking. # It's regrettable, but to ensure that each subprocess only has to instantiate # a single channel to be reused across all RPCs, we use globals. _worker_channel_singleton = None _worker_stub_singleton = None _LOGGER = logging.getLogger(__name__) def _shutdown_worker(): _LOGGER.info('Shutting worker process down.') if _worker_channel_singleton is not None: _worker_channel_singleton.stop() def _initialize_worker(server_address): global _worker_channel_singleton # pylint: disable=global-statement global _worker_stub_singleton # pylint: disable=global-statement _LOGGER.info('Initializing worker process.') _worker_channel_singleton = grpc.insecure_channel(server_address) _worker_stub_singleton = prime_pb2_grpc.PrimeCheckerStub( _worker_channel_singleton) atexit.register(_shutdown_worker) def _run_worker_query(primality_candidate): _LOGGER.info('Checking primality of %s.', primality_candidate) return _worker_stub_singleton.check( prime_pb2.PrimeCandidate(candidate=primality_candidate)) def _calculate_primes(server_address): worker_pool = multiprocessing.Pool(processes=_PROCESS_COUNT, initializer=_initialize_worker, initargs=(server_address,)) check_range = range(2, _MAXIMUM_CANDIDATE) primality = worker_pool.map(_run_worker_query, check_range) primes = zip(check_range, map(operator.attrgetter('isPrime'), primality)) return tuple(primes) def main(): msg = 'Determine the primality of the first {} integers.'.format( _MAXIMUM_CANDIDATE) parser = argparse.ArgumentParser(description=msg) parser.add_argument('server_address', help='The address of the server (e.g. localhost:50051)') args = parser.parse_args() primes = _calculate_primes(args.server_address) print(primes) if __name__ == '__main__': handler = logging.StreamHandler(sys.stdout) formatter = logging.Formatter('[PID %(process)d] %(message)s') handler.setFormatter(formatter) _LOGGER.addHandler(handler) _LOGGER.setLevel(logging.INFO) main() grpc-1.30.2/examples/python/multiprocessing/prime.proto000066400000000000000000000020121370425124100233110ustar00rootroot00000000000000// Copyright 2019 gRPC 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 // // 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. syntax = "proto3"; package prime; // A candidate integer for primality testing. message PrimeCandidate { // The candidate. int64 candidate = 1; } // The primality of the requested integer candidate. message Primality { // Is the candidate prime? bool isPrime = 1; } // Service to check primality. service PrimeChecker { // Determines the primality of an integer. rpc check (PrimeCandidate) returns (Primality) {} } grpc-1.30.2/examples/python/multiprocessing/server.py000066400000000000000000000067321370425124100230050ustar00rootroot00000000000000# Copyright 2019 gRPC 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 # # 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. """An example of multiprocess concurrency with gRPC.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function from concurrent import futures import contextlib import datetime import logging import math import multiprocessing import time import socket import sys import grpc import prime_pb2 import prime_pb2_grpc _LOGGER = logging.getLogger(__name__) _ONE_DAY = datetime.timedelta(days=1) _PROCESS_COUNT = multiprocessing.cpu_count() _THREAD_CONCURRENCY = _PROCESS_COUNT def is_prime(n): for i in range(2, int(math.ceil(math.sqrt(n)))): if n % i == 0: return False else: return True class PrimeChecker(prime_pb2_grpc.PrimeCheckerServicer): def check(self, request, context): _LOGGER.info('Determining primality of %s', request.candidate) return prime_pb2.Primality(isPrime=is_prime(request.candidate)) def _wait_forever(server): try: while True: time.sleep(_ONE_DAY.total_seconds()) except KeyboardInterrupt: server.stop(None) def _run_server(bind_address): """Start a server in a subprocess.""" _LOGGER.info('Starting new server.') options = (('grpc.so_reuseport', 1),) server = grpc.server(futures.ThreadPoolExecutor( max_workers=_THREAD_CONCURRENCY,), options=options) prime_pb2_grpc.add_PrimeCheckerServicer_to_server(PrimeChecker(), server) server.add_insecure_port(bind_address) server.start() _wait_forever(server) @contextlib.contextmanager def _reserve_port(): """Find and reserve a port for all subprocesses to use.""" sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) if sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT) == 0: raise RuntimeError("Failed to set SO_REUSEPORT.") sock.bind(('', 0)) try: yield sock.getsockname()[1] finally: sock.close() def main(): with _reserve_port() as port: bind_address = 'localhost:{}'.format(port) _LOGGER.info("Binding to '%s'", bind_address) sys.stdout.flush() workers = [] for _ in range(_PROCESS_COUNT): # NOTE: It is imperative that the worker subprocesses be forked before # any gRPC servers start up. See # https://github.com/grpc/grpc/issues/16001 for more details. worker = multiprocessing.Process(target=_run_server, args=(bind_address,)) worker.start() workers.append(worker) for worker in workers: worker.join() if __name__ == '__main__': handler = logging.StreamHandler(sys.stdout) formatter = logging.Formatter('[PID %(process)d] %(message)s') handler.setFormatter(formatter) _LOGGER.addHandler(handler) _LOGGER.setLevel(logging.INFO) main() grpc-1.30.2/examples/python/multiprocessing/test/000077500000000000000000000000001370425124100220745ustar00rootroot00000000000000grpc-1.30.2/examples/python/multiprocessing/test/_multiprocessing_example_test.py000066400000000000000000000045531370425124100306150ustar00rootroot00000000000000# Copyright 2019 the gRPC 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 # # 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. """Test for multiprocessing example.""" import ast import logging import math import os import re import subprocess import tempfile import unittest _BINARY_DIR = os.path.realpath( os.path.join(os.path.dirname(os.path.abspath(__file__)), '..')) _SERVER_PATH = os.path.join(_BINARY_DIR, 'server') _CLIENT_PATH = os.path.join(_BINARY_DIR, 'client') def is_prime(n): for i in range(2, int(math.ceil(math.sqrt(n)))): if n % i == 0: return False else: return True def _get_server_address(server_stream): while True: server_stream.seek(0) line = server_stream.readline() while line: matches = re.search('Binding to \'(.+)\'', line) if matches is not None: return matches.groups()[0] line = server_stream.readline() class MultiprocessingExampleTest(unittest.TestCase): def test_multiprocessing_example(self): server_stdout = tempfile.TemporaryFile(mode='r') server_process = subprocess.Popen((_SERVER_PATH,), stdout=server_stdout) server_address = _get_server_address(server_stdout) client_stdout = tempfile.TemporaryFile(mode='r') client_process = subprocess.Popen(( _CLIENT_PATH, server_address, ), stdout=client_stdout) client_process.wait() server_process.terminate() client_stdout.seek(0) results = ast.literal_eval(client_stdout.read().strip().split('\n')[-1]) values = tuple(result[0] for result in results) self.assertSequenceEqual(range(2, 10000), values) for result in results: self.assertEqual(is_prime(result[0]), result[1]) if __name__ == '__main__': logging.basicConfig() unittest.main(verbosity=2) grpc-1.30.2/examples/python/route_guide/000077500000000000000000000000001370425124100202015ustar00rootroot00000000000000grpc-1.30.2/examples/python/route_guide/.gitignore000066400000000000000000000000061370425124100221650ustar00rootroot00000000000000*.pyc grpc-1.30.2/examples/python/route_guide/README.md000066400000000000000000000001511370425124100214550ustar00rootroot00000000000000[This code's documentation lives on the grpc.io site.](https://grpc.io/docs/tutorials/basic/python.html) grpc-1.30.2/examples/python/route_guide/route_guide_client.py000066400000000000000000000077231370425124100244350ustar00rootroot00000000000000# Copyright 2015 gRPC 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 # # 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. """The Python implementation of the gRPC route guide client.""" from __future__ import print_function import random import logging import grpc import route_guide_pb2 import route_guide_pb2_grpc import route_guide_resources def make_route_note(message, latitude, longitude): return route_guide_pb2.RouteNote( message=message, location=route_guide_pb2.Point(latitude=latitude, longitude=longitude)) def guide_get_one_feature(stub, point): feature = stub.GetFeature(point) if not feature.location: print("Server returned incomplete feature") return if feature.name: print("Feature called %s at %s" % (feature.name, feature.location)) else: print("Found no feature at %s" % feature.location) def guide_get_feature(stub): guide_get_one_feature( stub, route_guide_pb2.Point(latitude=409146138, longitude=-746188906)) guide_get_one_feature(stub, route_guide_pb2.Point(latitude=0, longitude=0)) def guide_list_features(stub): rectangle = route_guide_pb2.Rectangle( lo=route_guide_pb2.Point(latitude=400000000, longitude=-750000000), hi=route_guide_pb2.Point(latitude=420000000, longitude=-730000000)) print("Looking for features between 40, -75 and 42, -73") features = stub.ListFeatures(rectangle) for feature in features: print("Feature called %s at %s" % (feature.name, feature.location)) def generate_route(feature_list): for _ in range(0, 10): random_feature = feature_list[random.randint(0, len(feature_list) - 1)] print("Visiting point %s" % random_feature.location) yield random_feature.location def guide_record_route(stub): feature_list = route_guide_resources.read_route_guide_database() route_iterator = generate_route(feature_list) route_summary = stub.RecordRoute(route_iterator) print("Finished trip with %s points " % route_summary.point_count) print("Passed %s features " % route_summary.feature_count) print("Travelled %s meters " % route_summary.distance) print("It took %s seconds " % route_summary.elapsed_time) def generate_messages(): messages = [ make_route_note("First message", 0, 0), make_route_note("Second message", 0, 1), make_route_note("Third message", 1, 0), make_route_note("Fourth message", 0, 0), make_route_note("Fifth message", 1, 0), ] for msg in messages: print("Sending %s at %s" % (msg.message, msg.location)) yield msg def guide_route_chat(stub): responses = stub.RouteChat(generate_messages()) for response in responses: print("Received message %s at %s" % (response.message, response.location)) def run(): # NOTE(gRPC Python Team): .close() is possible on a channel and should be # used in circumstances in which the with statement does not fit the needs # of the code. with grpc.insecure_channel('localhost:50051') as channel: stub = route_guide_pb2_grpc.RouteGuideStub(channel) print("-------------- GetFeature --------------") guide_get_feature(stub) print("-------------- ListFeatures --------------") guide_list_features(stub) print("-------------- RecordRoute --------------") guide_record_route(stub) print("-------------- RouteChat --------------") guide_route_chat(stub) if __name__ == '__main__': logging.basicConfig() run() grpc-1.30.2/examples/python/route_guide/route_guide_db.json000066400000000000000000000327101370425124100240570ustar00rootroot00000000000000[{ "location": { "latitude": 407838351, "longitude": -746143763 }, "name": "Patriots Path, Mendham, NJ 07945, USA" }, { "location": { "latitude": 408122808, "longitude": -743999179 }, "name": "101 New Jersey 10, Whippany, NJ 07981, USA" }, { "location": { "latitude": 413628156, "longitude": -749015468 }, "name": "U.S. 6, Shohola, PA 18458, USA" }, { "location": { "latitude": 419999544, "longitude": -740371136 }, "name": "5 Conners Road, Kingston, NY 12401, USA" }, { "location": { "latitude": 414008389, "longitude": -743951297 }, "name": "Mid Hudson Psychiatric Center, New Hampton, NY 10958, USA" }, { "location": { "latitude": 419611318, "longitude": -746524769 }, "name": "287 Flugertown Road, Livingston Manor, NY 12758, USA" }, { "location": { "latitude": 406109563, "longitude": -742186778 }, "name": "4001 Tremley Point Road, Linden, NJ 07036, USA" }, { "location": { "latitude": 416802456, "longitude": -742370183 }, "name": "352 South Mountain Road, Wallkill, NY 12589, USA" }, { "location": { "latitude": 412950425, "longitude": -741077389 }, "name": "Bailey Turn Road, Harriman, NY 10926, USA" }, { "location": { "latitude": 412144655, "longitude": -743949739 }, "name": "193-199 Wawayanda Road, Hewitt, NJ 07421, USA" }, { "location": { "latitude": 415736605, "longitude": -742847522 }, "name": "406-496 Ward Avenue, Pine Bush, NY 12566, USA" }, { "location": { "latitude": 413843930, "longitude": -740501726 }, "name": "162 Merrill Road, Highland Mills, NY 10930, USA" }, { "location": { "latitude": 410873075, "longitude": -744459023 }, "name": "Clinton Road, West Milford, NJ 07480, USA" }, { "location": { "latitude": 412346009, "longitude": -744026814 }, "name": "16 Old Brook Lane, Warwick, NY 10990, USA" }, { "location": { "latitude": 402948455, "longitude": -747903913 }, "name": "3 Drake Lane, Pennington, NJ 08534, USA" }, { "location": { "latitude": 406337092, "longitude": -740122226 }, "name": "6324 8th Avenue, Brooklyn, NY 11220, USA" }, { "location": { "latitude": 406421967, "longitude": -747727624 }, "name": "1 Merck Access Road, Whitehouse Station, NJ 08889, USA" }, { "location": { "latitude": 416318082, "longitude": -749677716 }, "name": "78-98 Schalck Road, Narrowsburg, NY 12764, USA" }, { "location": { "latitude": 415301720, "longitude": -748416257 }, "name": "282 Lakeview Drive Road, Highland Lake, NY 12743, USA" }, { "location": { "latitude": 402647019, "longitude": -747071791 }, "name": "330 Evelyn Avenue, Hamilton Township, NJ 08619, USA" }, { "location": { "latitude": 412567807, "longitude": -741058078 }, "name": "New York State Reference Route 987E, Southfields, NY 10975, USA" }, { "location": { "latitude": 416855156, "longitude": -744420597 }, "name": "103-271 Tempaloni Road, Ellenville, NY 12428, USA" }, { "location": { "latitude": 404663628, "longitude": -744820157 }, "name": "1300 Airport Road, North Brunswick Township, NJ 08902, USA" }, { "location": { "latitude": 407113723, "longitude": -749746483 }, "name": "" }, { "location": { "latitude": 402133926, "longitude": -743613249 }, "name": "" }, { "location": { "latitude": 400273442, "longitude": -741220915 }, "name": "" }, { "location": { "latitude": 411236786, "longitude": -744070769 }, "name": "" }, { "location": { "latitude": 411633782, "longitude": -746784970 }, "name": "211-225 Plains Road, Augusta, NJ 07822, USA" }, { "location": { "latitude": 415830701, "longitude": -742952812 }, "name": "" }, { "location": { "latitude": 413447164, "longitude": -748712898 }, "name": "165 Pedersen Ridge Road, Milford, PA 18337, USA" }, { "location": { "latitude": 405047245, "longitude": -749800722 }, "name": "100-122 Locktown Road, Frenchtown, NJ 08825, USA" }, { "location": { "latitude": 418858923, "longitude": -746156790 }, "name": "" }, { "location": { "latitude": 417951888, "longitude": -748484944 }, "name": "650-652 Willi Hill Road, Swan Lake, NY 12783, USA" }, { "location": { "latitude": 407033786, "longitude": -743977337 }, "name": "26 East 3rd Street, New Providence, NJ 07974, USA" }, { "location": { "latitude": 417548014, "longitude": -740075041 }, "name": "" }, { "location": { "latitude": 410395868, "longitude": -744972325 }, "name": "" }, { "location": { "latitude": 404615353, "longitude": -745129803 }, "name": "" }, { "location": { "latitude": 406589790, "longitude": -743560121 }, "name": "611 Lawrence Avenue, Westfield, NJ 07090, USA" }, { "location": { "latitude": 414653148, "longitude": -740477477 }, "name": "18 Lannis Avenue, New Windsor, NY 12553, USA" }, { "location": { "latitude": 405957808, "longitude": -743255336 }, "name": "82-104 Amherst Avenue, Colonia, NJ 07067, USA" }, { "location": { "latitude": 411733589, "longitude": -741648093 }, "name": "170 Seven Lakes Drive, Sloatsburg, NY 10974, USA" }, { "location": { "latitude": 412676291, "longitude": -742606606 }, "name": "1270 Lakes Road, Monroe, NY 10950, USA" }, { "location": { "latitude": 409224445, "longitude": -748286738 }, "name": "509-535 Alphano Road, Great Meadows, NJ 07838, USA" }, { "location": { "latitude": 406523420, "longitude": -742135517 }, "name": "652 Garden Street, Elizabeth, NJ 07202, USA" }, { "location": { "latitude": 401827388, "longitude": -740294537 }, "name": "349 Sea Spray Court, Neptune City, NJ 07753, USA" }, { "location": { "latitude": 410564152, "longitude": -743685054 }, "name": "13-17 Stanley Street, West Milford, NJ 07480, USA" }, { "location": { "latitude": 408472324, "longitude": -740726046 }, "name": "47 Industrial Avenue, Teterboro, NJ 07608, USA" }, { "location": { "latitude": 412452168, "longitude": -740214052 }, "name": "5 White Oak Lane, Stony Point, NY 10980, USA" }, { "location": { "latitude": 409146138, "longitude": -746188906 }, "name": "Berkshire Valley Management Area Trail, Jefferson, NJ, USA" }, { "location": { "latitude": 404701380, "longitude": -744781745 }, "name": "1007 Jersey Avenue, New Brunswick, NJ 08901, USA" }, { "location": { "latitude": 409642566, "longitude": -746017679 }, "name": "6 East Emerald Isle Drive, Lake Hopatcong, NJ 07849, USA" }, { "location": { "latitude": 408031728, "longitude": -748645385 }, "name": "1358-1474 New Jersey 57, Port Murray, NJ 07865, USA" }, { "location": { "latitude": 413700272, "longitude": -742135189 }, "name": "367 Prospect Road, Chester, NY 10918, USA" }, { "location": { "latitude": 404310607, "longitude": -740282632 }, "name": "10 Simon Lake Drive, Atlantic Highlands, NJ 07716, USA" }, { "location": { "latitude": 409319800, "longitude": -746201391 }, "name": "11 Ward Street, Mount Arlington, NJ 07856, USA" }, { "location": { "latitude": 406685311, "longitude": -742108603 }, "name": "300-398 Jefferson Avenue, Elizabeth, NJ 07201, USA" }, { "location": { "latitude": 419018117, "longitude": -749142781 }, "name": "43 Dreher Road, Roscoe, NY 12776, USA" }, { "location": { "latitude": 412856162, "longitude": -745148837 }, "name": "Swan Street, Pine Island, NY 10969, USA" }, { "location": { "latitude": 416560744, "longitude": -746721964 }, "name": "66 Pleasantview Avenue, Monticello, NY 12701, USA" }, { "location": { "latitude": 405314270, "longitude": -749836354 }, "name": "" }, { "location": { "latitude": 414219548, "longitude": -743327440 }, "name": "" }, { "location": { "latitude": 415534177, "longitude": -742900616 }, "name": "565 Winding Hills Road, Montgomery, NY 12549, USA" }, { "location": { "latitude": 406898530, "longitude": -749127080 }, "name": "231 Rocky Run Road, Glen Gardner, NJ 08826, USA" }, { "location": { "latitude": 407586880, "longitude": -741670168 }, "name": "100 Mount Pleasant Avenue, Newark, NJ 07104, USA" }, { "location": { "latitude": 400106455, "longitude": -742870190 }, "name": "517-521 Huntington Drive, Manchester Township, NJ 08759, USA" }, { "location": { "latitude": 400066188, "longitude": -746793294 }, "name": "" }, { "location": { "latitude": 418803880, "longitude": -744102673 }, "name": "40 Mountain Road, Napanoch, NY 12458, USA" }, { "location": { "latitude": 414204288, "longitude": -747895140 }, "name": "" }, { "location": { "latitude": 414777405, "longitude": -740615601 }, "name": "" }, { "location": { "latitude": 415464475, "longitude": -747175374 }, "name": "48 North Road, Forestburgh, NY 12777, USA" }, { "location": { "latitude": 404062378, "longitude": -746376177 }, "name": "" }, { "location": { "latitude": 405688272, "longitude": -749285130 }, "name": "" }, { "location": { "latitude": 400342070, "longitude": -748788996 }, "name": "" }, { "location": { "latitude": 401809022, "longitude": -744157964 }, "name": "" }, { "location": { "latitude": 404226644, "longitude": -740517141 }, "name": "9 Thompson Avenue, Leonardo, NJ 07737, USA" }, { "location": { "latitude": 410322033, "longitude": -747871659 }, "name": "" }, { "location": { "latitude": 407100674, "longitude": -747742727 }, "name": "" }, { "location": { "latitude": 418811433, "longitude": -741718005 }, "name": "213 Bush Road, Stone Ridge, NY 12484, USA" }, { "location": { "latitude": 415034302, "longitude": -743850945 }, "name": "" }, { "location": { "latitude": 411349992, "longitude": -743694161 }, "name": "" }, { "location": { "latitude": 404839914, "longitude": -744759616 }, "name": "1-17 Bergen Court, New Brunswick, NJ 08901, USA" }, { "location": { "latitude": 414638017, "longitude": -745957854 }, "name": "35 Oakland Valley Road, Cuddebackville, NY 12729, USA" }, { "location": { "latitude": 412127800, "longitude": -740173578 }, "name": "" }, { "location": { "latitude": 401263460, "longitude": -747964303 }, "name": "" }, { "location": { "latitude": 412843391, "longitude": -749086026 }, "name": "" }, { "location": { "latitude": 418512773, "longitude": -743067823 }, "name": "" }, { "location": { "latitude": 404318328, "longitude": -740835638 }, "name": "42-102 Main Street, Belford, NJ 07718, USA" }, { "location": { "latitude": 419020746, "longitude": -741172328 }, "name": "" }, { "location": { "latitude": 404080723, "longitude": -746119569 }, "name": "" }, { "location": { "latitude": 401012643, "longitude": -744035134 }, "name": "" }, { "location": { "latitude": 404306372, "longitude": -741079661 }, "name": "" }, { "location": { "latitude": 403966326, "longitude": -748519297 }, "name": "" }, { "location": { "latitude": 405002031, "longitude": -748407866 }, "name": "" }, { "location": { "latitude": 409532885, "longitude": -742200683 }, "name": "" }, { "location": { "latitude": 416851321, "longitude": -742674555 }, "name": "" }, { "location": { "latitude": 406411633, "longitude": -741722051 }, "name": "3387 Richmond Terrace, Staten Island, NY 10303, USA" }, { "location": { "latitude": 413069058, "longitude": -744597778 }, "name": "261 Van Sickle Road, Goshen, NY 10924, USA" }, { "location": { "latitude": 418465462, "longitude": -746859398 }, "name": "" }, { "location": { "latitude": 411733222, "longitude": -744228360 }, "name": "" }, { "location": { "latitude": 410248224, "longitude": -747127767 }, "name": "3 Hasta Way, Newton, NJ 07860, USA" }] grpc-1.30.2/examples/python/route_guide/route_guide_pb2.py000066400000000000000000000254061370425124100236400ustar00rootroot00000000000000# Generated by the protocol buffer compiler. DO NOT EDIT! # source: route_guide.proto import sys _b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() DESCRIPTOR = _descriptor.FileDescriptor( name='route_guide.proto', package='routeguide', syntax='proto3', serialized_pb=_b('\n\x11route_guide.proto\x12\nrouteguide\",\n\x05Point\x12\x10\n\x08latitude\x18\x01 \x01(\x05\x12\x11\n\tlongitude\x18\x02 \x01(\x05\"I\n\tRectangle\x12\x1d\n\x02lo\x18\x01 \x01(\x0b\x32\x11.routeguide.Point\x12\x1d\n\x02hi\x18\x02 \x01(\x0b\x32\x11.routeguide.Point\"<\n\x07\x46\x65\x61ture\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x08location\x18\x02 \x01(\x0b\x32\x11.routeguide.Point\"A\n\tRouteNote\x12#\n\x08location\x18\x01 \x01(\x0b\x32\x11.routeguide.Point\x12\x0f\n\x07message\x18\x02 \x01(\t\"b\n\x0cRouteSummary\x12\x13\n\x0bpoint_count\x18\x01 \x01(\x05\x12\x15\n\rfeature_count\x18\x02 \x01(\x05\x12\x10\n\x08\x64istance\x18\x03 \x01(\x05\x12\x14\n\x0c\x65lapsed_time\x18\x04 \x01(\x05\x32\x85\x02\n\nRouteGuide\x12\x36\n\nGetFeature\x12\x11.routeguide.Point\x1a\x13.routeguide.Feature\"\x00\x12>\n\x0cListFeatures\x12\x15.routeguide.Rectangle\x1a\x13.routeguide.Feature\"\x00\x30\x01\x12>\n\x0bRecordRoute\x12\x11.routeguide.Point\x1a\x18.routeguide.RouteSummary\"\x00(\x01\x12?\n\tRouteChat\x12\x15.routeguide.RouteNote\x1a\x15.routeguide.RouteNote\"\x00(\x01\x30\x01\x42\x36\n\x1bio.grpc.examples.routeguideB\x0fRouteGuideProtoP\x01\xa2\x02\x03RTGb\x06proto3') ) _POINT = _descriptor.Descriptor( name='Point', full_name='routeguide.Point', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( name='latitude', full_name='routeguide.Point.latitude', index=0, number=1, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), _descriptor.FieldDescriptor( name='longitude', full_name='routeguide.Point.longitude', index=1, number=2, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), ], extensions=[ ], nested_types=[], enum_types=[ ], options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=33, serialized_end=77, ) _RECTANGLE = _descriptor.Descriptor( name='Rectangle', full_name='routeguide.Rectangle', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( name='lo', full_name='routeguide.Rectangle.lo', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), _descriptor.FieldDescriptor( name='hi', full_name='routeguide.Rectangle.hi', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), ], extensions=[ ], nested_types=[], enum_types=[ ], options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=79, serialized_end=152, ) _FEATURE = _descriptor.Descriptor( name='Feature', full_name='routeguide.Feature', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( name='name', full_name='routeguide.Feature.name', index=0, number=1, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), _descriptor.FieldDescriptor( name='location', full_name='routeguide.Feature.location', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), ], extensions=[ ], nested_types=[], enum_types=[ ], options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=154, serialized_end=214, ) _ROUTENOTE = _descriptor.Descriptor( name='RouteNote', full_name='routeguide.RouteNote', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( name='location', full_name='routeguide.RouteNote.location', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), _descriptor.FieldDescriptor( name='message', full_name='routeguide.RouteNote.message', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), ], extensions=[ ], nested_types=[], enum_types=[ ], options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=216, serialized_end=281, ) _ROUTESUMMARY = _descriptor.Descriptor( name='RouteSummary', full_name='routeguide.RouteSummary', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( name='point_count', full_name='routeguide.RouteSummary.point_count', index=0, number=1, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), _descriptor.FieldDescriptor( name='feature_count', full_name='routeguide.RouteSummary.feature_count', index=1, number=2, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), _descriptor.FieldDescriptor( name='distance', full_name='routeguide.RouteSummary.distance', index=2, number=3, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), _descriptor.FieldDescriptor( name='elapsed_time', full_name='routeguide.RouteSummary.elapsed_time', index=3, number=4, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), ], extensions=[ ], nested_types=[], enum_types=[ ], options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=283, serialized_end=381, ) _RECTANGLE.fields_by_name['lo'].message_type = _POINT _RECTANGLE.fields_by_name['hi'].message_type = _POINT _FEATURE.fields_by_name['location'].message_type = _POINT _ROUTENOTE.fields_by_name['location'].message_type = _POINT DESCRIPTOR.message_types_by_name['Point'] = _POINT DESCRIPTOR.message_types_by_name['Rectangle'] = _RECTANGLE DESCRIPTOR.message_types_by_name['Feature'] = _FEATURE DESCRIPTOR.message_types_by_name['RouteNote'] = _ROUTENOTE DESCRIPTOR.message_types_by_name['RouteSummary'] = _ROUTESUMMARY _sym_db.RegisterFileDescriptor(DESCRIPTOR) Point = _reflection.GeneratedProtocolMessageType('Point', (_message.Message,), dict( DESCRIPTOR = _POINT, __module__ = 'route_guide_pb2' # @@protoc_insertion_point(class_scope:routeguide.Point) )) _sym_db.RegisterMessage(Point) Rectangle = _reflection.GeneratedProtocolMessageType('Rectangle', (_message.Message,), dict( DESCRIPTOR = _RECTANGLE, __module__ = 'route_guide_pb2' # @@protoc_insertion_point(class_scope:routeguide.Rectangle) )) _sym_db.RegisterMessage(Rectangle) Feature = _reflection.GeneratedProtocolMessageType('Feature', (_message.Message,), dict( DESCRIPTOR = _FEATURE, __module__ = 'route_guide_pb2' # @@protoc_insertion_point(class_scope:routeguide.Feature) )) _sym_db.RegisterMessage(Feature) RouteNote = _reflection.GeneratedProtocolMessageType('RouteNote', (_message.Message,), dict( DESCRIPTOR = _ROUTENOTE, __module__ = 'route_guide_pb2' # @@protoc_insertion_point(class_scope:routeguide.RouteNote) )) _sym_db.RegisterMessage(RouteNote) RouteSummary = _reflection.GeneratedProtocolMessageType('RouteSummary', (_message.Message,), dict( DESCRIPTOR = _ROUTESUMMARY, __module__ = 'route_guide_pb2' # @@protoc_insertion_point(class_scope:routeguide.RouteSummary) )) _sym_db.RegisterMessage(RouteSummary) DESCRIPTOR.has_options = True DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\033io.grpc.examples.routeguideB\017RouteGuideProtoP\001\242\002\003RTG')) _ROUTEGUIDE = _descriptor.ServiceDescriptor( name='RouteGuide', full_name='routeguide.RouteGuide', file=DESCRIPTOR, index=0, options=None, serialized_start=384, serialized_end=645, methods=[ _descriptor.MethodDescriptor( name='GetFeature', full_name='routeguide.RouteGuide.GetFeature', index=0, containing_service=None, input_type=_POINT, output_type=_FEATURE, options=None, ), _descriptor.MethodDescriptor( name='ListFeatures', full_name='routeguide.RouteGuide.ListFeatures', index=1, containing_service=None, input_type=_RECTANGLE, output_type=_FEATURE, options=None, ), _descriptor.MethodDescriptor( name='RecordRoute', full_name='routeguide.RouteGuide.RecordRoute', index=2, containing_service=None, input_type=_POINT, output_type=_ROUTESUMMARY, options=None, ), _descriptor.MethodDescriptor( name='RouteChat', full_name='routeguide.RouteGuide.RouteChat', index=3, containing_service=None, input_type=_ROUTENOTE, output_type=_ROUTENOTE, options=None, ), ]) _sym_db.RegisterServiceDescriptor(_ROUTEGUIDE) DESCRIPTOR.services_by_name['RouteGuide'] = _ROUTEGUIDE # @@protoc_insertion_point(module_scope) grpc-1.30.2/examples/python/route_guide/route_guide_pb2_grpc.py000066400000000000000000000102241370425124100246430ustar00rootroot00000000000000# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! import grpc import route_guide_pb2 as route__guide__pb2 class RouteGuideStub(object): """Interface exported by the server. """ def __init__(self, channel): """Constructor. Args: channel: A grpc.Channel. """ self.GetFeature = channel.unary_unary( '/routeguide.RouteGuide/GetFeature', request_serializer=route__guide__pb2.Point.SerializeToString, response_deserializer=route__guide__pb2.Feature.FromString, ) self.ListFeatures = channel.unary_stream( '/routeguide.RouteGuide/ListFeatures', request_serializer=route__guide__pb2.Rectangle.SerializeToString, response_deserializer=route__guide__pb2.Feature.FromString, ) self.RecordRoute = channel.stream_unary( '/routeguide.RouteGuide/RecordRoute', request_serializer=route__guide__pb2.Point.SerializeToString, response_deserializer=route__guide__pb2.RouteSummary.FromString, ) self.RouteChat = channel.stream_stream( '/routeguide.RouteGuide/RouteChat', request_serializer=route__guide__pb2.RouteNote.SerializeToString, response_deserializer=route__guide__pb2.RouteNote.FromString, ) class RouteGuideServicer(object): """Interface exported by the server. """ def GetFeature(self, request, context): """A simple RPC. Obtains the feature at a given position. A feature with an empty name is returned if there's no feature at the given position. """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') def ListFeatures(self, request, context): """A server-to-client streaming RPC. Obtains the Features available within the given Rectangle. Results are streamed rather than returned at once (e.g. in a response message with a repeated field), as the rectangle may cover a large area and contain a huge number of features. """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') def RecordRoute(self, request_iterator, context): """A client-to-server streaming RPC. Accepts a stream of Points on a route being traversed, returning a RouteSummary when traversal is completed. """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') def RouteChat(self, request_iterator, context): """A Bidirectional streaming RPC. Accepts a stream of RouteNotes sent while a route is being traversed, while receiving other RouteNotes (e.g. from other users). """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') def add_RouteGuideServicer_to_server(servicer, server): rpc_method_handlers = { 'GetFeature': grpc.unary_unary_rpc_method_handler( servicer.GetFeature, request_deserializer=route__guide__pb2.Point.FromString, response_serializer=route__guide__pb2.Feature.SerializeToString, ), 'ListFeatures': grpc.unary_stream_rpc_method_handler( servicer.ListFeatures, request_deserializer=route__guide__pb2.Rectangle.FromString, response_serializer=route__guide__pb2.Feature.SerializeToString, ), 'RecordRoute': grpc.stream_unary_rpc_method_handler( servicer.RecordRoute, request_deserializer=route__guide__pb2.Point.FromString, response_serializer=route__guide__pb2.RouteSummary.SerializeToString, ), 'RouteChat': grpc.stream_stream_rpc_method_handler( servicer.RouteChat, request_deserializer=route__guide__pb2.RouteNote.FromString, response_serializer=route__guide__pb2.RouteNote.SerializeToString, ), } generic_handler = grpc.method_handlers_generic_handler( 'routeguide.RouteGuide', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) grpc-1.30.2/examples/python/route_guide/route_guide_resources.py000066400000000000000000000024451370425124100251650ustar00rootroot00000000000000# Copyright 2015 gRPC 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 # # 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. """Common resources used in the gRPC route guide example.""" import json import route_guide_pb2 def read_route_guide_database(): """Reads the route guide database. Returns: The full contents of the route guide database as a sequence of route_guide_pb2.Features. """ feature_list = [] with open("route_guide_db.json") as route_guide_db_file: for item in json.load(route_guide_db_file): feature = route_guide_pb2.Feature( name=item["name"], location=route_guide_pb2.Point( latitude=item["location"]["latitude"], longitude=item["location"]["longitude"])) feature_list.append(feature) return feature_list grpc-1.30.2/examples/python/route_guide/route_guide_server.py000066400000000000000000000102471370425124100244600ustar00rootroot00000000000000# Copyright 2015 gRPC 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 # # 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. """The Python implementation of the gRPC route guide server.""" from concurrent import futures import time import math import logging import grpc import route_guide_pb2 import route_guide_pb2_grpc import route_guide_resources def get_feature(feature_db, point): """Returns Feature at given location or None.""" for feature in feature_db: if feature.location == point: return feature return None def get_distance(start, end): """Distance between two points.""" coord_factor = 10000000.0 lat_1 = start.latitude / coord_factor lat_2 = end.latitude / coord_factor lon_1 = start.longitude / coord_factor lon_2 = end.longitude / coord_factor lat_rad_1 = math.radians(lat_1) lat_rad_2 = math.radians(lat_2) delta_lat_rad = math.radians(lat_2 - lat_1) delta_lon_rad = math.radians(lon_2 - lon_1) # Formula is based on http://mathforum.org/library/drmath/view/51879.html a = (pow(math.sin(delta_lat_rad / 2), 2) + (math.cos(lat_rad_1) * math.cos(lat_rad_2) * pow(math.sin(delta_lon_rad / 2), 2))) c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a)) R = 6371000 # metres return R * c class RouteGuideServicer(route_guide_pb2_grpc.RouteGuideServicer): """Provides methods that implement functionality of route guide server.""" def __init__(self): self.db = route_guide_resources.read_route_guide_database() def GetFeature(self, request, context): feature = get_feature(self.db, request) if feature is None: return route_guide_pb2.Feature(name="", location=request) else: return feature def ListFeatures(self, request, context): left = min(request.lo.longitude, request.hi.longitude) right = max(request.lo.longitude, request.hi.longitude) top = max(request.lo.latitude, request.hi.latitude) bottom = min(request.lo.latitude, request.hi.latitude) for feature in self.db: if (feature.location.longitude >= left and feature.location.longitude <= right and feature.location.latitude >= bottom and feature.location.latitude <= top): yield feature def RecordRoute(self, request_iterator, context): point_count = 0 feature_count = 0 distance = 0.0 prev_point = None start_time = time.time() for point in request_iterator: point_count += 1 if get_feature(self.db, point): feature_count += 1 if prev_point: distance += get_distance(prev_point, point) prev_point = point elapsed_time = time.time() - start_time return route_guide_pb2.RouteSummary(point_count=point_count, feature_count=feature_count, distance=int(distance), elapsed_time=int(elapsed_time)) def RouteChat(self, request_iterator, context): prev_notes = [] for new_note in request_iterator: for prev_note in prev_notes: if prev_note.location == new_note.location: yield prev_note prev_notes.append(new_note) def serve(): server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) route_guide_pb2_grpc.add_RouteGuideServicer_to_server( RouteGuideServicer(), server) server.add_insecure_port('[::]:50051') server.start() server.wait_for_termination() if __name__ == '__main__': logging.basicConfig() serve() grpc-1.30.2/examples/python/route_guide/run_codegen.py000066400000000000000000000014631370425124100230470ustar00rootroot00000000000000# Copyright 2015 gRPC 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 # # 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. """Runs protoc with the gRPC plugin to generate messages and gRPC stubs.""" from grpc_tools import protoc protoc.main(( '', '-I../../protos', '--python_out=.', '--grpc_python_out=.', '../../protos/route_guide.proto', )) grpc-1.30.2/examples/python/wait_for_ready/000077500000000000000000000000001370425124100206645ustar00rootroot00000000000000grpc-1.30.2/examples/python/wait_for_ready/BUILD.bazel000066400000000000000000000021261370425124100225430ustar00rootroot00000000000000# Copyright 2019 The gRPC 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 # # 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. load("@grpc_python_dependencies//:requirements.bzl", "requirement") py_library( name = "wait_for_ready_example", testonly = 1, srcs = ["wait_for_ready_example.py"], deps = [ "//examples:helloworld_py_pb2", "//examples:helloworld_py_pb2_grpc", "//src/python/grpcio/grpc:grpcio", ], ) py_test( name = "test/_wait_for_ready_example_test", size = "small", srcs = ["test/_wait_for_ready_example_test.py"], python_version = "PY3", deps = [":wait_for_ready_example"], ) grpc-1.30.2/examples/python/wait_for_ready/README.md000066400000000000000000000040411370425124100221420ustar00rootroot00000000000000# gRPC Python Example for Wait-for-ready The default behavior of an RPC is to fail instantly if the server is not ready yet. This example demonstrates how to change that behavior. ### Definition of 'wait-for-ready' semantics > If an RPC is issued but the channel is in TRANSIENT_FAILURE or SHUTDOWN states, the RPC is unable to be transmitted promptly. By default, gRPC implementations SHOULD fail such RPCs immediately. This is known as "fail fast," but the usage of the term is historical. RPCs SHOULD NOT fail as a result of the channel being in other states (CONNECTING, READY, or IDLE). > > gRPC implementations MAY provide a per-RPC option to not fail RPCs as a result of the channel being in TRANSIENT_FAILURE state. Instead, the implementation queues the RPCs until the channel is READY. This is known as "wait for ready." The RPCs SHOULD still fail before READY if there are unrelated reasons, such as the channel is SHUTDOWN or the RPC's deadline is reached. > > From https://github.com/grpc/grpc/blob/master/doc/wait-for-ready.md ### Use cases for 'wait-for-ready' When developers spin up gRPC clients and servers at the same time, it is very like to fail first couple RPC calls due to unavailability of the server. If developers failed to prepare for this situation, the result can be catastrophic. But with 'wait-for-ready' semantics, developers can initialize the client and server in any order, especially useful in testing. Also, developers may ensure the server is up before starting client. But in some cases like transient network failure may result in a temporary unavailability of the server. With 'wait-for-ready' semantics, those RPC calls will automatically wait until the server is ready to accept incoming requests. ### DEMO Snippets ```Python # Per RPC level stub = ...Stub(...) stub.important_transaction_1(..., wait_for_ready=True) stub.unimportant_transaction_2(...) stub.important_transaction_3(..., wait_for_ready=True) stub.unimportant_transaction_4(...) # The unimportant transactions can be status report, or health check, etc. ``` grpc-1.30.2/examples/python/wait_for_ready/test/000077500000000000000000000000001370425124100216435ustar00rootroot00000000000000grpc-1.30.2/examples/python/wait_for_ready/test/_wait_for_ready_example_test.py000066400000000000000000000017611370425124100301310ustar00rootroot00000000000000# Copyright 2019 The gRPC 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 # # 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. """Tests of the wait-for-ready example.""" import unittest import logging from examples.python.wait_for_ready import wait_for_ready_example class WaitForReadyExampleTest(unittest.TestCase): def test_wait_for_ready_example(self): wait_for_ready_example.main() # No unhandled exception raised, no deadlock, test passed! if __name__ == '__main__': logging.basicConfig() unittest.main(verbosity=2) grpc-1.30.2/examples/python/wait_for_ready/wait_for_ready_example.py000066400000000000000000000074251370425124100257570ustar00rootroot00000000000000# Copyright 2019 The gRPC 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 # # 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. """The Python example of utilizing wait-for-ready flag.""" from __future__ import print_function import logging from concurrent import futures from contextlib import contextmanager import socket import threading import grpc from examples import helloworld_pb2 from examples import helloworld_pb2_grpc _LOGGER = logging.getLogger(__name__) _LOGGER.setLevel(logging.INFO) @contextmanager def get_free_loopback_tcp_port(): if socket.has_ipv6: tcp_socket = socket.socket(socket.AF_INET6) else: tcp_socket = socket.socket(socket.AF_INET) tcp_socket.bind(('', 0)) address_tuple = tcp_socket.getsockname() yield "localhost:%s" % (address_tuple[1]) tcp_socket.close() class Greeter(helloworld_pb2_grpc.GreeterServicer): def SayHello(self, request, unused_context): return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name) def create_server(server_address): server = grpc.server(futures.ThreadPoolExecutor()) helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server) bound_port = server.add_insecure_port(server_address) assert bound_port == int(server_address.split(':')[-1]) return server def process(stub, wait_for_ready=None): try: response = stub.SayHello(helloworld_pb2.HelloRequest(name='you'), wait_for_ready=wait_for_ready) message = response.message except grpc.RpcError as rpc_error: assert rpc_error.code() == grpc.StatusCode.UNAVAILABLE assert not wait_for_ready message = rpc_error else: assert wait_for_ready _LOGGER.info("Wait-for-ready %s, client received: %s", "enabled" if wait_for_ready else "disabled", message) def main(): # Pick a random free port with get_free_loopback_tcp_port() as server_address: # Register connectivity event to notify main thread transient_failure_event = threading.Event() def wait_for_transient_failure(channel_connectivity): if channel_connectivity == grpc.ChannelConnectivity.TRANSIENT_FAILURE: transient_failure_event.set() # Create gRPC channel channel = grpc.insecure_channel(server_address) channel.subscribe(wait_for_transient_failure) stub = helloworld_pb2_grpc.GreeterStub(channel) # Fire an RPC without wait_for_ready thread_disabled_wait_for_ready = threading.Thread(target=process, args=(stub, False)) thread_disabled_wait_for_ready.start() # Fire an RPC with wait_for_ready thread_enabled_wait_for_ready = threading.Thread(target=process, args=(stub, True)) thread_enabled_wait_for_ready.start() # Wait for the channel entering TRANSIENT FAILURE state. transient_failure_event.wait() server = create_server(server_address) server.start() # Expected to fail with StatusCode.UNAVAILABLE. thread_disabled_wait_for_ready.join() # Expected to success. thread_enabled_wait_for_ready.join() server.stop(None) channel.close() if __name__ == '__main__': logging.basicConfig(level=logging.INFO) main() grpc-1.30.2/examples/python/xds/000077500000000000000000000000001370425124100164645ustar00rootroot00000000000000grpc-1.30.2/examples/python/xds/README.md000066400000000000000000000044521370425124100177500ustar00rootroot00000000000000gRPC Hostname Example ===================== The hostname example is a Hello World server whose response includes its hostname. It also supports health and reflection services. This makes it a good server to test infrastructure, like load balancing. This example depends on a gRPC version of 1.28.1 or newer. ### Run the Server 1. Navigate to this directory: ```sh cd grpc/examples/python/xds ``` 2. Run the server ```sh virtualenv venv -p python3 source venv/bin/activate pip install -r requirements.txt python server.py ``` ### Run the Client 1. Set up xDS configuration. After configuring your xDS server to track the gRPC server we just started, create a bootstrap file as desribed in [gRFC A27](https://github.com/grpc/proposal/blob/master/A27-xds-global-load-balancing.md): ``` { xds_servers": [ { "server_uri": , "channel_creds": [ { "type": , "config": } ] } ], "node": } ``` 2. Point the `GRPC_XDS_BOOTSTRAP` environment variable at the bootstrap file: ``` export GRPC_XDS_BOOTSTRAP=/etc/xds-bootstrap.json ``` 3. Run the client: ``` python client.py xds-experimental:///my-backend ``` ### Verifying Configuration with a CLI Tool Alternatively, `grpcurl` can be used to verify your server. If you don't have it, install [`grpcurl`](https://github.com/fullstorydev/grpcurl/releases). This will allow you to manually test the service. Be sure to set up the bootstrap file and `GRPC_XDS_BOOTSTRAP` as in the previous section. 1. Verify the server's application-layer service: ```sh > grpcurl --plaintext -d '{"name": "you"}' localhost:50051 { "message": "Hello you from rbell.svl.corp.google.com!" } ``` 2. Verify that all services are available via reflection: ```sh > grpcurl --plaintext localhost:50051 list grpc.health.v1.Health grpc.reflection.v1alpha.ServerReflection helloworld.Greeter ``` 3. Verify that all services are reporting healthy: ```sh > grpcurl --plaintext -d '{"service": "helloworld.Greeter"}' localhost:50051 grpc.health.v1.Health/Check { "status": "SERVING" } > grpcurl --plaintext -d '{"service": ""}' localhost:50051 grpc.health.v1.Health/Check { "status": "SERVING" } ``` grpc-1.30.2/examples/python/xds/client.py000066400000000000000000000026001370425124100203120ustar00rootroot00000000000000# Copyright 2020 The gRPC 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 # # 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. """The Python implementation of the GRPC helloworld.Greeter client.""" from __future__ import print_function import logging import argparse import grpc import helloworld_pb2 import helloworld_pb2_grpc _DESCRIPTION = "Get a greeting from a server." def run(server_address): with grpc.insecure_channel(server_address) as channel: stub = helloworld_pb2_grpc.GreeterStub(channel) response = stub.SayHello(helloworld_pb2.HelloRequest(name='you')) print("Greeter client received: " + response.message) if __name__ == '__main__': parser = argparse.ArgumentParser(description=_DESCRIPTION) parser.add_argument("server", default=None, help="The address of the server.") args = parser.parse_args() logging.basicConfig() run(args.server) grpc-1.30.2/examples/python/xds/helloworld_pb2.py000066400000000000000000000075101370425124100217570ustar00rootroot00000000000000# Generated by the protocol buffer compiler. DO NOT EDIT! # source: helloworld.proto import sys _b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() DESCRIPTOR = _descriptor.FileDescriptor( name='helloworld.proto', package='helloworld', syntax='proto3', serialized_pb=_b('\n\x10helloworld.proto\x12\nhelloworld\"\x1c\n\x0cHelloRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x1d\n\nHelloReply\x12\x0f\n\x07message\x18\x01 \x01(\t2I\n\x07Greeter\x12>\n\x08SayHello\x12\x18.helloworld.HelloRequest\x1a\x16.helloworld.HelloReply\"\x00\x42\x36\n\x1bio.grpc.examples.helloworldB\x0fHelloWorldProtoP\x01\xa2\x02\x03HLWb\x06proto3') ) _HELLOREQUEST = _descriptor.Descriptor( name='HelloRequest', full_name='helloworld.HelloRequest', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( name='name', full_name='helloworld.HelloRequest.name', index=0, number=1, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), ], extensions=[ ], nested_types=[], enum_types=[ ], options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=32, serialized_end=60, ) _HELLOREPLY = _descriptor.Descriptor( name='HelloReply', full_name='helloworld.HelloReply', filename=None, file=DESCRIPTOR, containing_type=None, fields=[ _descriptor.FieldDescriptor( name='message', full_name='helloworld.HelloReply.message', index=0, number=1, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), ], extensions=[ ], nested_types=[], enum_types=[ ], options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], serialized_start=62, serialized_end=91, ) DESCRIPTOR.message_types_by_name['HelloRequest'] = _HELLOREQUEST DESCRIPTOR.message_types_by_name['HelloReply'] = _HELLOREPLY _sym_db.RegisterFileDescriptor(DESCRIPTOR) HelloRequest = _reflection.GeneratedProtocolMessageType('HelloRequest', (_message.Message,), dict( DESCRIPTOR = _HELLOREQUEST, __module__ = 'helloworld_pb2' # @@protoc_insertion_point(class_scope:helloworld.HelloRequest) )) _sym_db.RegisterMessage(HelloRequest) HelloReply = _reflection.GeneratedProtocolMessageType('HelloReply', (_message.Message,), dict( DESCRIPTOR = _HELLOREPLY, __module__ = 'helloworld_pb2' # @@protoc_insertion_point(class_scope:helloworld.HelloReply) )) _sym_db.RegisterMessage(HelloReply) DESCRIPTOR.has_options = True DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\033io.grpc.examples.helloworldB\017HelloWorldProtoP\001\242\002\003HLW')) _GREETER = _descriptor.ServiceDescriptor( name='Greeter', full_name='helloworld.Greeter', file=DESCRIPTOR, index=0, options=None, serialized_start=93, serialized_end=166, methods=[ _descriptor.MethodDescriptor( name='SayHello', full_name='helloworld.Greeter.SayHello', index=0, containing_service=None, input_type=_HELLOREQUEST, output_type=_HELLOREPLY, options=None, ), ]) _sym_db.RegisterServiceDescriptor(_GREETER) DESCRIPTOR.services_by_name['Greeter'] = _GREETER # @@protoc_insertion_point(module_scope) grpc-1.30.2/examples/python/xds/helloworld_pb2_grpc.py000066400000000000000000000024631370425124100227740ustar00rootroot00000000000000# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! import grpc import helloworld_pb2 as helloworld__pb2 class GreeterStub(object): """The greeting service definition. """ def __init__(self, channel): """Constructor. Args: channel: A grpc.Channel. """ self.SayHello = channel.unary_unary( '/helloworld.Greeter/SayHello', request_serializer=helloworld__pb2.HelloRequest.SerializeToString, response_deserializer=helloworld__pb2.HelloReply.FromString, ) class GreeterServicer(object): """The greeting service definition. """ def SayHello(self, request, context): """Sends a greeting """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') def add_GreeterServicer_to_server(servicer, server): rpc_method_handlers = { 'SayHello': grpc.unary_unary_rpc_method_handler( servicer.SayHello, request_deserializer=helloworld__pb2.HelloRequest.FromString, response_serializer=helloworld__pb2.HelloReply.SerializeToString, ), } generic_handler = grpc.method_handlers_generic_handler( 'helloworld.Greeter', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) grpc-1.30.2/examples/python/xds/requirements.txt000066400000000000000000000001021370425124100217410ustar00rootroot00000000000000grpcio>=1.28.1 protobuf grpcio-reflection grpcio-health-checking grpc-1.30.2/examples/python/xds/server.py000066400000000000000000000064621370425124100203540ustar00rootroot00000000000000# Copyright 2020 The gRPC 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 # # 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. """The Python implementation of the GRPC helloworld.Greeter server.""" from concurrent import futures import argparse import logging import multiprocessing import socket import grpc import helloworld_pb2 import helloworld_pb2_grpc from grpc_reflection.v1alpha import reflection from grpc_health.v1 import health from grpc_health.v1 import health_pb2 from grpc_health.v1 import health_pb2_grpc _DESCRIPTION = "A general purpose dummy server." class Greeter(helloworld_pb2_grpc.GreeterServicer): def __init__(self, hostname: str): self._hostname = hostname if hostname else socket.gethostname() def SayHello(self, request: helloworld_pb2.HelloRequest, context: grpc.ServicerContext) -> helloworld_pb2.HelloReply: return helloworld_pb2.HelloReply( message=f"Hello {request.name} from {self._hostname}!") def serve(port: int, hostname: str): server = grpc.server( futures.ThreadPoolExecutor(max_workers=multiprocessing.cpu_count())) # Add the application servicer to the server. helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(hostname), server) # Create a health check servicer. We use the non-blocking implementation # to avoid thread starvation. health_servicer = health.HealthServicer( experimental_non_blocking=True, experimental_thread_pool=futures.ThreadPoolExecutor(max_workers=1)) health_pb2_grpc.add_HealthServicer_to_server(health_servicer, server) # Create a tuple of all of the services we want to export via reflection. services = tuple( service.full_name for service in helloworld_pb2.DESCRIPTOR.services_by_name.values()) + ( reflection.SERVICE_NAME, health.SERVICE_NAME) # Add the reflection service to the server. reflection.enable_server_reflection(services, server) server.add_insecure_port(f"[::]:{port}") server.start() # Mark all services as healthy. overall_server_health = "" for service in services + (overall_server_health,): health_servicer.set(service, health_pb2.HealthCheckResponse.SERVING) # Park the main application thread. server.wait_for_termination() if __name__ == '__main__': parser = argparse.ArgumentParser(description=_DESCRIPTION) parser.add_argument("port", default=50051, type=int, nargs="?", help="The port on which to listen.") parser.add_argument("hostname", type=str, default=None, nargs="?", help="The name clients will see in responses.") args = parser.parse_args() logging.basicConfig() serve(args.port, args.hostname) grpc-1.30.2/examples/ruby/000077500000000000000000000000001370425124100153265ustar00rootroot00000000000000grpc-1.30.2/examples/ruby/.gitignore000066400000000000000000000001751370425124100173210ustar00rootroot00000000000000/.bundle/ /.yardoc /Gemfile.lock /_yardoc/ /coverage/ /doc/ /pkg/ /spec/reports/ /tmp/ *.bundle *.so *.o *.a mkmf.log vendor grpc-1.30.2/examples/ruby/Gemfile000066400000000000000000000001121370425124100166130ustar00rootroot00000000000000# -*- ruby -*- # encoding: utf-8 source 'https://rubygems.org/' gemspec grpc-1.30.2/examples/ruby/README.md000066400000000000000000000032661370425124100166140ustar00rootroot00000000000000gRPC in 3 minutes (Ruby) ======================== BACKGROUND ------------- For this sample, we've already generated the server and client stubs from [helloworld.proto][] PREREQUISITES ------------- - Ruby 2.x This requires Ruby 2.x, as the gRPC API surface uses keyword args. If you don't have that installed locally, you can use [RVM][] to use Ruby 2.x for testing without upgrading the version of Ruby on your whole system. RVM is also useful if you don't have the necessary privileges to update your system's Ruby. ```sh $ # RVM installation as specified at https://rvm.io/rvm/install $ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 $ \curl -sSL https://get.rvm.io | bash -s stable --ruby=ruby-2 $ $ # follow the instructions to ensure that your're using the latest stable version of Ruby $ # and that the rvm command is installed ``` - *N.B* Make sure your run `source $HOME/.rvm/scripts/rvm` as instructed to complete the set-up of RVM. INSTALL ------- - [Install gRPC Ruby][] - Use bundler to install the example package's dependencies ```sh $ # from this directory $ gem install bundler # if you don't already have bundler available $ bundle install ``` Try it! ------- - Run the server ```sh $ # from this directory $ bundle exec ./greeter_server.rb & ``` - Run the client ```sh $ # from this directory $ bundle exec ./greeter_client.rb ``` Tutorial -------- You can find a more detailed tutorial in [gRPC Basics: Ruby][] [helloworld.proto]:../protos/helloworld.proto [RVM]:https://www.rvm.io/ [Install gRPC ruby]:../../src/ruby#installation [gRPC Basics: Ruby]:https://grpc.io/docs/tutorials/basic/ruby.html grpc-1.30.2/examples/ruby/errors_and_cancellation/000077500000000000000000000000001370425124100222005ustar00rootroot00000000000000grpc-1.30.2/examples/ruby/errors_and_cancellation/README.md000066400000000000000000000011221370425124100234530ustar00rootroot00000000000000# Errors and Cancelletion code samples for grpc-ruby The examples in this directory show use of grpc errors. On the server side, errors are returned from service implementations by raising a certain `GRPC::BadStatus` exception. On the client side, GRPC errors get raised when either: * the call completes (unary and client-streaming call types) * the response `Enumerable` is iterated through (server-streaming and bidi call types). ## To run the examples here: Start the server: ``` > ruby error_examples_server.rb ``` Then run the client: ``` > ruby error_examples_client.rb ``` grpc-1.30.2/examples/ruby/errors_and_cancellation/error_examples_client.rb000077500000000000000000000051671370425124100271260ustar00rootroot00000000000000#!/usr/bin/env ruby # Copyright 2015 gRPC 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 # # 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. # Sample app that connects to an error-throwing implementation of # Route Guide service. # # Usage: $ path/to/route_guide_client.rb this_dir = File.expand_path(File.dirname(__FILE__)) lib_dir = File.join(File.dirname(this_dir), 'lib') $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir) require 'grpc' require 'route_guide_services_pb' include Routeguide def run_get_feature_expect_error(stub) resp = stub.get_feature(Point.new) end def run_list_features_expect_error(stub) resps = stub.list_features(Rectangle.new) # NOOP iteration to pick up error resps.each { } end def run_record_route_expect_error(stub) stub.record_route([]) end def run_route_chat_expect_error(stub) resps = stub.route_chat([]) # NOOP iteration to pick up error resps.each { } end def main stub = RouteGuide::Stub.new('localhost:50051', :this_channel_is_insecure) begin run_get_feature_expect_error(stub) rescue GRPC::BadStatus => e puts "===== GetFeature exception: =====" puts e.inspect puts "e.code: #{e.code}" puts "e.details: #{e.details}" puts "e.metadata: #{e.metadata}" puts "=================================" end begin run_list_features_expect_error(stub) rescue GRPC::BadStatus => e error = true puts "===== ListFeatures exception: =====" puts e.inspect puts "e.code: #{e.code}" puts "e.details: #{e.details}" puts "e.metadata: #{e.metadata}" puts "=================================" end begin run_route_chat_expect_error(stub) rescue GRPC::BadStatus => e puts "==== RouteChat exception: ====" puts e.inspect puts "e.code: #{e.code}" puts "e.details: #{e.details}" puts "e.metadata: #{e.metadata}" puts "=================================" end begin run_record_route_expect_error(stub) rescue GRPC::BadStatus => e puts "==== RecordRoute exception: ====" puts e.inspect puts "e.code: #{e.code}" puts "e.details: #{e.details}" puts "e.metadata: #{e.metadata}" puts "=================================" end end main grpc-1.30.2/examples/ruby/errors_and_cancellation/error_examples_server.rb000077500000000000000000000036161370425124100271530ustar00rootroot00000000000000#!/usr/bin/env ruby # -*- coding: utf-8 -*- # Copyright 2015 gRPC 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 # # 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. # Error-throwing implementation of Route Guide service. # # Usage: $ path/to/route_guide_server.rb this_dir = File.expand_path(File.dirname(__FILE__)) lib_dir = File.join(File.dirname(this_dir), 'lib') $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir) require 'grpc' require 'route_guide_services_pb' include Routeguide include GRPC::Core::StatusCodes # CanellingandErrorReturningServiceImpl provides an implementation of the RouteGuide service. class CancellingAndErrorReturningServerImpl < RouteGuide::Service # def get_feature # Note get_feature isn't implemented in this subclass, so the server # will get a gRPC UNIMPLEMENTED error when it's called. def list_features(rectangle, _call) raise "string appears on the client in the 'details' field of a 'GRPC::Unknown' exception" end def record_route(call) raise GRPC::BadStatus.new_status_exception(CANCELLED) end def route_chat(notes) raise GRPC::BadStatus.new_status_exception(ABORTED, details = 'arbitrary', metadata = {somekey: 'val'}) end end def main port = '0.0.0.0:50051' s = GRPC::RpcServer.new s.add_http2_port(port, :this_port_is_insecure) GRPC.logger.info("... running insecurely on #{port}") s.handle(CancellingAndErrorReturningServerImpl.new) s.run_till_terminated end main grpc-1.30.2/examples/ruby/greeter_client.rb000077500000000000000000000023701370425124100206530ustar00rootroot00000000000000#!/usr/bin/env ruby # Copyright 2015 gRPC 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 # # 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. # Sample app that connects to a Greeter service. # # Usage: $ path/to/greeter_client.rb this_dir = File.expand_path(File.dirname(__FILE__)) lib_dir = File.join(this_dir, 'lib') $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir) require 'grpc' require 'helloworld_services_pb' def main user = ARGV.size > 0 ? ARGV[0] : 'world' hostname = ARGV.size > 1 ? ARGV[1] : 'localhost:50051' stub = Helloworld::Greeter::Stub.new(hostname, :this_channel_is_insecure) begin message = stub.say_hello(Helloworld::HelloRequest.new(name: user)).message p "Greeting: #{message}" rescue GRPC::BadStatus => e abort "ERROR: #{e.message}" end end main grpc-1.30.2/examples/ruby/greeter_server.rb000077500000000000000000000032111370425124100206760ustar00rootroot00000000000000#!/usr/bin/env ruby # Copyright 2015 gRPC 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 # # 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. # Sample gRPC server that implements the Greeter::Helloworld service. # # Usage: $ path/to/greeter_server.rb this_dir = File.expand_path(File.dirname(__FILE__)) lib_dir = File.join(this_dir, 'lib') $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir) require 'grpc' require 'helloworld_services_pb' # GreeterServer is simple server that implements the Helloworld Greeter server. class GreeterServer < Helloworld::Greeter::Service # say_hello implements the SayHello rpc method. def say_hello(hello_req, _unused_call) Helloworld::HelloReply.new(message: "Hello #{hello_req.name}") end end # main starts an RpcServer that receives requests to GreeterServer at the sample # server port. def main s = GRPC::RpcServer.new s.add_http2_port('0.0.0.0:50051', :this_port_is_insecure) s.handle(GreeterServer) # Runs the server with SIGHUP, SIGINT and SIGQUIT signal handlers to # gracefully shutdown. # User could also choose to run server via call to run_till_terminated s.run_till_terminated_or_interrupted([1, 'int', 'SIGQUIT']) end main grpc-1.30.2/examples/ruby/grpc-demo.gemspec000066400000000000000000000013551370425124100205540ustar00rootroot00000000000000# -*- ruby -*- # encoding: utf-8 Gem::Specification.new do |s| s.name = 'grpc-demo' s.version = '1.0.0' s.authors = ['gRPC Authors'] s.email = 'temiola@google.com' s.homepage = 'https://github.com/grpc/grpc' s.summary = 'gRPC Ruby overview sample' s.description = 'Simple demo of using gRPC from Ruby' s.files = `git ls-files -- ruby/*`.split("\n") s.executables = `git ls-files -- ruby/greeter*.rb ruby/route_guide/*.rb`.split("\n").map do |f| File.basename(f) end s.require_paths = ['lib'] s.platform = Gem::Platform::RUBY s.add_dependency 'grpc', '~> 1.0' s.add_dependency 'multi_json', '~> 1.13.1' s.add_development_dependency 'bundler', '>= 1.9' end grpc-1.30.2/examples/ruby/lib/000077500000000000000000000000001370425124100160745ustar00rootroot00000000000000grpc-1.30.2/examples/ruby/lib/helloworld_pb.rb000066400000000000000000000010731370425124100212560ustar00rootroot00000000000000# Generated by the protocol buffer compiler. DO NOT EDIT! # source: helloworld.proto require 'google/protobuf' Google::Protobuf::DescriptorPool.generated_pool.build do add_message "helloworld.HelloRequest" do optional :name, :string, 1 end add_message "helloworld.HelloReply" do optional :message, :string, 1 end end module Helloworld HelloRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("helloworld.HelloRequest").msgclass HelloReply = Google::Protobuf::DescriptorPool.generated_pool.lookup("helloworld.HelloReply").msgclass end grpc-1.30.2/examples/ruby/lib/helloworld_services_pb.rb000066400000000000000000000021701370425124100231600ustar00rootroot00000000000000# Generated by the protocol buffer compiler. DO NOT EDIT! # Source: helloworld.proto for package 'helloworld' # Original file comments: # Copyright 2015 gRPC 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 # # 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. # require 'grpc' require 'helloworld_pb' module Helloworld module Greeter # The greeting service definition. class Service include GRPC::GenericService self.marshal_class_method = :encode self.unmarshal_class_method = :decode self.service_name = 'helloworld.Greeter' # Sends a greeting rpc :SayHello, HelloRequest, HelloReply end Stub = Service.rpc_stub_class end end grpc-1.30.2/examples/ruby/lib/route_guide_pb.rb000066400000000000000000000026201370425124100214150ustar00rootroot00000000000000# Generated by the protocol buffer compiler. DO NOT EDIT! # source: route_guide.proto require 'google/protobuf' Google::Protobuf::DescriptorPool.generated_pool.build do add_message "routeguide.Point" do optional :latitude, :int32, 1 optional :longitude, :int32, 2 end add_message "routeguide.Rectangle" do optional :lo, :message, 1, "routeguide.Point" optional :hi, :message, 2, "routeguide.Point" end add_message "routeguide.Feature" do optional :name, :string, 1 optional :location, :message, 2, "routeguide.Point" end add_message "routeguide.RouteNote" do optional :location, :message, 1, "routeguide.Point" optional :message, :string, 2 end add_message "routeguide.RouteSummary" do optional :point_count, :int32, 1 optional :feature_count, :int32, 2 optional :distance, :int32, 3 optional :elapsed_time, :int32, 4 end end module Routeguide Point = Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.Point").msgclass Rectangle = Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.Rectangle").msgclass Feature = Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.Feature").msgclass RouteNote = Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.RouteNote").msgclass RouteSummary = Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.RouteSummary").msgclass end grpc-1.30.2/examples/ruby/lib/route_guide_services_pb.rb000066400000000000000000000041611370425124100233220ustar00rootroot00000000000000# Generated by the protocol buffer compiler. DO NOT EDIT! # Source: route_guide.proto for package 'routeguide' # Original file comments: # Copyright 2015 gRPC 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 # # 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. # require 'grpc' require 'route_guide_pb' module Routeguide module RouteGuide # Interface exported by the server. class Service include GRPC::GenericService self.marshal_class_method = :encode self.unmarshal_class_method = :decode self.service_name = 'routeguide.RouteGuide' # A simple RPC. # # Obtains the feature at a given position. # # A feature with an empty name is returned if there's no feature at the given # position. rpc :GetFeature, Point, Feature # A server-to-client streaming RPC. # # Obtains the Features available within the given Rectangle. Results are # streamed rather than returned at once (e.g. in a response message with a # repeated field), as the rectangle may cover a large area and contain a # huge number of features. rpc :ListFeatures, Rectangle, stream(Feature) # A client-to-server streaming RPC. # # Accepts a stream of Points on a route being traversed, returning a # RouteSummary when traversal is completed. rpc :RecordRoute, stream(Point), RouteSummary # A Bidirectional streaming RPC. # # Accepts a stream of RouteNotes sent while a route is being traversed, # while receiving other RouteNotes (e.g. from other users). rpc :RouteChat, stream(RouteNote), stream(RouteNote) end Stub = Service.rpc_stub_class end end grpc-1.30.2/examples/ruby/pubsub/000077500000000000000000000000001370425124100166265ustar00rootroot00000000000000grpc-1.30.2/examples/ruby/pubsub/.gitignore000066400000000000000000000001751370425124100206210ustar00rootroot00000000000000/.bundle/ /.yardoc /Gemfile.lock /_yardoc/ /coverage/ /doc/ /pkg/ /spec/reports/ /tmp/ *.bundle *.so *.o *.a mkmf.log vendor grpc-1.30.2/examples/ruby/pubsub/Gemfile000066400000000000000000000001331370425124100201160ustar00rootroot00000000000000source 'https://rubygems.org/' gem 'grpc', '~> 1.0' gem 'googleauth', '>= 0.5.1', '< 0.7' grpc-1.30.2/examples/ruby/pubsub/google/000077500000000000000000000000001370425124100201025ustar00rootroot00000000000000grpc-1.30.2/examples/ruby/pubsub/google/protobuf/000077500000000000000000000000001370425124100217425ustar00rootroot00000000000000grpc-1.30.2/examples/ruby/pubsub/google/protobuf/empty.rb000066400000000000000000000016731370425124100234340ustar00rootroot00000000000000# Copyright 2015 gRPC 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 # # 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. # Generated by the protocol buffer compiler. DO NOT EDIT! # source: google/protobuf/empty.proto require 'google/protobuf' Google::Protobuf::DescriptorPool.generated_pool.build do add_message "google.protobuf.Empty" do end end module Google module Protobuf Empty = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.Empty").msgclass end end grpc-1.30.2/examples/ruby/pubsub/pubsub_demo.rb000077500000000000000000000174251370425124100214730ustar00rootroot00000000000000#!/usr/bin/env ruby # Copyright 2015 gRPC 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 # # 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. # pubsub_demo demos accesses the Google PubSub API via its gRPC interface # # $ GOOGLE_APPLICATION_CREDENTIALS= \ # path/to/pubsub_demo.rb \ # [--action= ] # # There are options related to the chosen action, see #parse_args below. # - the possible actions are given by the method names of NamedAction class # - the default action is list_some_topics this_dir = File.expand_path(File.dirname(__FILE__)) lib_dir = File.join(File.dirname(File.dirname(this_dir)), 'lib') $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir) $LOAD_PATH.unshift(this_dir) unless $LOAD_PATH.include?(this_dir) require 'optparse' require 'grpc' require 'googleauth' require 'google/protobuf' require 'google/protobuf/empty' require 'tech/pubsub/proto/pubsub' require 'tech/pubsub/proto/pubsub_services' # creates a SSL Credentials from the production certificates. def ssl_creds GRPC::Core::ChannelCredentials.new() end # Builds the metadata authentication update proc. def auth_proc(opts) auth_creds = Google::Auth.get_application_default return auth_creds.updater_proc end # Creates a stub for accessing the publisher service. def publisher_stub(opts) address = "#{opts.host}:#{opts.port}" stub_clz = Tech::Pubsub::PublisherService::Stub # shorter GRPC.logger.info("... access PublisherService at #{address}") call_creds = GRPC::Core::CallCredentials.new(auth_proc(opts)) combined_creds = ssl_creds.compose(call_creds) stub_clz.new(address, creds: combined_creds, GRPC::Core::Channel::SSL_TARGET => opts.host) end # Creates a stub for accessing the subscriber service. def subscriber_stub(opts) address = "#{opts.host}:#{opts.port}" stub_clz = Tech::Pubsub::SubscriberService::Stub # shorter GRPC.logger.info("... access SubscriberService at #{address}") call_creds = GRPC::Core::CallCredentials.new(auth_proc(opts)) combined_creds = ssl_creds.compose(call_creds) stub_clz.new(address, creds: combined_creds, GRPC::Core::Channel::SSL_TARGET => opts.host) end # defines methods corresponding to each interop test case. class NamedActions include Tech::Pubsub # Initializes NamedActions # # @param pub [Stub] a stub for accessing the publisher service # @param sub [Stub] a stub for accessing the publisher service # @param args [Args] provides access to the command line def initialize(pub, sub, args) @pub = pub @sub = sub @args = args end # Removes the test topic if it exists def remove_topic name = test_topic_name p "... removing Topic #{name}" @pub.delete_topic(DeleteTopicRequest.new(topic: name)) p "removed Topic: #{name} OK" rescue GRPC::BadStatus => e p "Could not delete a topics: rpc failed with '#{e}'" end # Creates a test topic def create_topic name = test_topic_name p "... creating Topic #{name}" resp = @pub.create_topic(Topic.new(name: name)) p "created Topic: #{resp.name} OK" rescue GRPC::BadStatus => e p "Could not create a topics: rpc failed with '#{e}'" end # Lists topics in the project def list_some_topics p 'Listing topics' p '-------------_' list_project_topics.topic.each { |t| p t.name } rescue GRPC::BadStatus => e p "Could not list topics: rpc failed with '#{e}'" end # Checks if a topics exists in a project def check_exists name = test_topic_name p "... checking for topic #{name}" exists = topic_exists?(name) p "#{name} is a topic" if exists p "#{name} is not a topic" unless exists rescue GRPC::BadStatus => e p "Could not check for a topics: rpc failed with '#{e}'" end # Publishes some messages def random_pub_sub topic_name, sub_name = test_topic_name, test_sub_name create_topic_if_needed(topic_name) @sub.create_subscription(Subscription.new(name: sub_name, topic: topic_name)) msg_count = rand(10..30) msg_count.times do |x| msg = PubsubMessage.new(data: "message #{x}") @pub.publish(PublishRequest.new(topic: topic_name, message: msg)) end p "Sent #{msg_count} messages to #{topic_name}, checking for them now." batch = @sub.pull_batch(PullBatchRequest.new(subscription: sub_name, max_events: msg_count)) ack_ids = batch.pull_responses.map { |x| x.ack_id } p "Got #{ack_ids.size} messages; acknowledging them.." @sub.acknowledge(AcknowledgeRequest.new(subscription: sub_name, ack_id: ack_ids)) p "Test messages were acknowledged OK, deleting the subscription" del_req = DeleteSubscriptionRequest.new(subscription: sub_name) @sub.delete_subscription(del_req) rescue GRPC::BadStatus => e p "Could not do random pub sub: rpc failed with '#{e}'" end private # test_topic_name is the topic name to use in this test. def test_topic_name unless @args.topic_name.nil? return "/topics/#{@args.project_id}/#{@args.topic_name}" end now_text = Time.now.utc.strftime('%Y%m%d%H%M%S%L') "/topics/#{@args.project_id}/#{ENV['USER']}-#{now_text}" end # test_sub_name is the subscription name to use in this test. def test_sub_name unless @args.sub_name.nil? return "/subscriptions/#{@args.project_id}/#{@args.sub_name}" end now_text = Time.now.utc.strftime('%Y%m%d%H%M%S%L') "/subscriptions/#{@args.project_id}/#{ENV['USER']}-#{now_text}" end # determines if the topic name exists def topic_exists?(name) topics = list_project_topics.topic.map { |t| t.name } topics.include?(name) end def create_topic_if_needed(name) return if topic_exists?(name) @pub.create_topic(Topic.new(name: name)) end def list_project_topics q = "cloud.googleapis.com/project in (/projects/#{@args.project_id})" @pub.list_topics(ListTopicsRequest.new(query: q)) end end # Args is used to hold the command line info. Args = Struct.new(:host, :port, :action, :project_id, :topic_name, :sub_name) # validates the command line options, returning them as an Arg. def parse_args args = Args.new('pubsub-staging.googleapis.com', 443, 'list_some_topics', 'stoked-keyword-656') OptionParser.new do |opts| opts.on('--server_host SERVER_HOST', 'server hostname') do |v| args.host = v end opts.on('--server_port SERVER_PORT', 'server port') do |v| args.port = v end # instance_methods(false) gives only the methods defined in that class. scenes = NamedActions.instance_methods(false).map { |t| t.to_s } scene_list = scenes.join(',') opts.on("--action CODE", scenes, {}, 'pick a demo action', " (#{scene_list})") do |v| args.action = v end # Set the remaining values. %w(project_id topic_name sub_name).each do |o| opts.on("--#{o} VALUE", "#{o}") do |v| args[o] = v end end end.parse! _check_args(args) end def _check_args(args) %w(host port action).each do |a| if args[a].nil? raise OptionParser::MissingArgument.new("please specify --#{a}") end end args end def main args = parse_args pub, sub = publisher_stub(args), subscriber_stub(args) NamedActions.new(pub, sub, args).method(args.action).call end main grpc-1.30.2/examples/ruby/pubsub/tech/000077500000000000000000000000001370425124100175515ustar00rootroot00000000000000grpc-1.30.2/examples/ruby/pubsub/tech/pubsub/000077500000000000000000000000001370425124100210515ustar00rootroot00000000000000grpc-1.30.2/examples/ruby/pubsub/tech/pubsub/proto/000077500000000000000000000000001370425124100222145ustar00rootroot00000000000000grpc-1.30.2/examples/ruby/pubsub/tech/pubsub/proto/pubsub.rb000066400000000000000000000171101370425124100240410ustar00rootroot00000000000000# Copyright 2015 gRPC 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 # # 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. # Generated by the protocol buffer compiler. DO NOT EDIT! # source: tech/pubsub/proto/pubsub.proto require 'google/protobuf' require 'google/protobuf/empty' Google::Protobuf::DescriptorPool.generated_pool.build do add_message "tech.pubsub.Topic" do optional :name, :string, 1 end add_message "tech.pubsub.PubsubMessage" do optional :data, :string, 1 optional :message_id, :string, 3 end add_message "tech.pubsub.GetTopicRequest" do optional :topic, :string, 1 end add_message "tech.pubsub.PublishRequest" do optional :topic, :string, 1 optional :message, :message, 2, "tech.pubsub.PubsubMessage" end add_message "tech.pubsub.PublishBatchRequest" do optional :topic, :string, 1 repeated :messages, :message, 2, "tech.pubsub.PubsubMessage" end add_message "tech.pubsub.PublishBatchResponse" do repeated :message_ids, :string, 1 end add_message "tech.pubsub.ListTopicsRequest" do optional :query, :string, 1 optional :max_results, :int32, 2 optional :page_token, :string, 3 end add_message "tech.pubsub.ListTopicsResponse" do repeated :topic, :message, 1, "tech.pubsub.Topic" optional :next_page_token, :string, 2 end add_message "tech.pubsub.DeleteTopicRequest" do optional :topic, :string, 1 end add_message "tech.pubsub.Subscription" do optional :name, :string, 1 optional :topic, :string, 2 optional :query, :string, 3 optional :truncation_policy, :message, 4, "tech.pubsub.Subscription.TruncationPolicy" optional :push_config, :message, 5, "tech.pubsub.PushConfig" optional :ack_deadline_seconds, :int32, 6 optional :garbage_collect_seconds, :int64, 7 end add_message "tech.pubsub.Subscription.TruncationPolicy" do optional :max_bytes, :int64, 1 optional :max_age_seconds, :int64, 2 end add_message "tech.pubsub.PushConfig" do optional :push_endpoint, :string, 1 end add_message "tech.pubsub.PubsubEvent" do optional :subscription, :string, 1 optional :message, :message, 2, "tech.pubsub.PubsubMessage" optional :truncated, :bool, 3 optional :deleted, :bool, 4 end add_message "tech.pubsub.GetSubscriptionRequest" do optional :subscription, :string, 1 end add_message "tech.pubsub.ListSubscriptionsRequest" do optional :query, :string, 1 optional :max_results, :int32, 3 optional :page_token, :string, 4 end add_message "tech.pubsub.ListSubscriptionsResponse" do repeated :subscription, :message, 1, "tech.pubsub.Subscription" optional :next_page_token, :string, 2 end add_message "tech.pubsub.TruncateSubscriptionRequest" do optional :subscription, :string, 1 end add_message "tech.pubsub.DeleteSubscriptionRequest" do optional :subscription, :string, 1 end add_message "tech.pubsub.ModifyPushConfigRequest" do optional :subscription, :string, 1 optional :push_config, :message, 2, "tech.pubsub.PushConfig" end add_message "tech.pubsub.PullRequest" do optional :subscription, :string, 1 optional :return_immediately, :bool, 2 end add_message "tech.pubsub.PullResponse" do optional :ack_id, :string, 1 optional :pubsub_event, :message, 2, "tech.pubsub.PubsubEvent" end add_message "tech.pubsub.PullBatchRequest" do optional :subscription, :string, 1 optional :return_immediately, :bool, 2 optional :max_events, :int32, 3 end add_message "tech.pubsub.PullBatchResponse" do repeated :pull_responses, :message, 2, "tech.pubsub.PullResponse" end add_message "tech.pubsub.ModifyAckDeadlineRequest" do optional :subscription, :string, 1 optional :ack_id, :string, 2 optional :ack_deadline_seconds, :int32, 3 end add_message "tech.pubsub.AcknowledgeRequest" do optional :subscription, :string, 1 repeated :ack_id, :string, 2 end add_message "tech.pubsub.NackRequest" do optional :subscription, :string, 1 repeated :ack_id, :string, 2 end end module Tech module Pubsub Topic = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.Topic").msgclass PubsubMessage = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.PubsubMessage").msgclass GetTopicRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.GetTopicRequest").msgclass PublishRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.PublishRequest").msgclass PublishBatchRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.PublishBatchRequest").msgclass PublishBatchResponse = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.PublishBatchResponse").msgclass ListTopicsRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.ListTopicsRequest").msgclass ListTopicsResponse = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.ListTopicsResponse").msgclass DeleteTopicRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.DeleteTopicRequest").msgclass Subscription = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.Subscription").msgclass Subscription::TruncationPolicy = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.Subscription.TruncationPolicy").msgclass PushConfig = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.PushConfig").msgclass PubsubEvent = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.PubsubEvent").msgclass GetSubscriptionRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.GetSubscriptionRequest").msgclass ListSubscriptionsRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.ListSubscriptionsRequest").msgclass ListSubscriptionsResponse = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.ListSubscriptionsResponse").msgclass TruncateSubscriptionRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.TruncateSubscriptionRequest").msgclass DeleteSubscriptionRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.DeleteSubscriptionRequest").msgclass ModifyPushConfigRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.ModifyPushConfigRequest").msgclass PullRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.PullRequest").msgclass PullResponse = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.PullResponse").msgclass PullBatchRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.PullBatchRequest").msgclass PullBatchResponse = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.PullBatchResponse").msgclass ModifyAckDeadlineRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.ModifyAckDeadlineRequest").msgclass AcknowledgeRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.AcknowledgeRequest").msgclass NackRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("tech.pubsub.NackRequest").msgclass end end grpc-1.30.2/examples/ruby/pubsub/tech/pubsub/proto/pubsub_services.rb000066400000000000000000000057641370425124100257600ustar00rootroot00000000000000# Copyright 2015 gRPC 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 # # 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. # Generated by the protocol buffer compiler. DO NOT EDIT! # Source: tech/pubsub/proto/pubsub.proto for package 'tech.pubsub' require 'grpc' require 'google/protobuf/empty' require 'tech/pubsub/proto/pubsub' module Tech module Pubsub module PublisherService # TODO: add proto service documentation here class Service include GRPC::GenericService self.marshal_class_method = :encode self.unmarshal_class_method = :decode self.service_name = 'tech.pubsub.PublisherService' rpc :CreateTopic, Topic, Topic rpc :Publish, PublishRequest, Google::Protobuf::Empty rpc :PublishBatch, PublishBatchRequest, PublishBatchResponse rpc :GetTopic, GetTopicRequest, Topic rpc :ListTopics, ListTopicsRequest, ListTopicsResponse rpc :DeleteTopic, DeleteTopicRequest, Google::Protobuf::Empty end Stub = Service.rpc_stub_class end module SubscriberService # TODO: add proto service documentation here class Service include GRPC::GenericService self.marshal_class_method = :encode self.unmarshal_class_method = :decode self.service_name = 'tech.pubsub.SubscriberService' rpc :CreateSubscription, Subscription, Subscription rpc :GetSubscription, GetSubscriptionRequest, Subscription rpc :ListSubscriptions, ListSubscriptionsRequest, ListSubscriptionsResponse rpc :DeleteSubscription, DeleteSubscriptionRequest, Google::Protobuf::Empty rpc :TruncateSubscription, TruncateSubscriptionRequest, Google::Protobuf::Empty rpc :ModifyPushConfig, ModifyPushConfigRequest, Google::Protobuf::Empty rpc :Pull, PullRequest, PullResponse rpc :PullBatch, PullBatchRequest, PullBatchResponse rpc :ModifyAckDeadline, ModifyAckDeadlineRequest, Google::Protobuf::Empty rpc :Acknowledge, AcknowledgeRequest, Google::Protobuf::Empty rpc :Nack, NackRequest, Google::Protobuf::Empty end Stub = Service.rpc_stub_class end module PushEndpointService # TODO: add proto service documentation here class Service include GRPC::GenericService self.marshal_class_method = :encode self.unmarshal_class_method = :decode self.service_name = 'tech.pubsub.PushEndpointService' rpc :HandlePubsubEvent, PubsubEvent, Google::Protobuf::Empty end Stub = Service.rpc_stub_class end end end grpc-1.30.2/examples/ruby/route_guide/000077500000000000000000000000001370425124100176415ustar00rootroot00000000000000grpc-1.30.2/examples/ruby/route_guide/README.md000066400000000000000000000003311370425124100211150ustar00rootroot00000000000000# gRPC Basics: Ruby sample code The files in this folder are the samples used in [gRPC Basics: Ruby][], a detailed tutorial for using gRPC in Ruby. [gRPC Basics: Ruby]:https://grpc.io/docs/tutorials/basic/ruby.html grpc-1.30.2/examples/ruby/route_guide/route_guide_client.rb000077500000000000000000000112301370425124100240370ustar00rootroot00000000000000#!/usr/bin/env ruby # Copyright 2015 gRPC 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 # # 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. # Sample app that connects to a Route Guide service. # # Usage: $ path/to/route_guide_client.rb path/to/route_guide_db.json & this_dir = File.expand_path(File.dirname(__FILE__)) lib_dir = File.join(File.dirname(this_dir), 'lib') $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir) require 'grpc' require 'multi_json' require 'route_guide_services_pb' include Routeguide GET_FEATURE_POINTS = [ Point.new(latitude: 409_146_138, longitude: -746_188_906), Point.new(latitude: 0, longitude: 0) ] # runs a GetFeature rpc. # # - once with a point known to be present in the sample route database # - once with a point that is not in the sample database def run_get_feature(stub) p 'GetFeature' p '----------' GET_FEATURE_POINTS.each do |pt| resp = stub.get_feature(pt) if resp.name != '' p "- found '#{resp.name}' at #{pt.inspect}" else p "- found nothing at #{pt.inspect}" end end end LIST_FEATURES_RECT = Rectangle.new( lo: Point.new(latitude: 400_000_000, longitude: -750_000_000), hi: Point.new(latitude: 420_000_000, longitude: -730_000_000)) # runs a ListFeatures rpc. # # - the rectangle to chosen to include most of the known features # in the sample db. def run_list_features(stub) p 'ListFeatures' p '------------' resps = stub.list_features(LIST_FEATURES_RECT) resps.each do |r| p "- found '#{r.name}' at #{r.location.inspect}" end end # RandomRoute provides an Enumerable that yields a random 'route' of points # from a list of Features. class RandomRoute def initialize(features, size) @features = features @size = size end # yields a point, waiting between 0 and 1 seconds between each yield # # @return an Enumerable that yields a random point def each return enum_for(:each) unless block_given? @size.times do json_feature = @features[rand(0..@features.length)] next if json_feature.nil? location = json_feature['location'] pt = Point.new( Hash[location.each_pair.map { |k, v| [k.to_sym, v] }]) p "- next point is #{pt.inspect}" yield pt sleep(rand(0..1)) end end end # runs a RecordRoute rpc. # # - the rectangle to chosen to include most of the known features # in the sample db. def run_record_route(stub, features) p 'RecordRoute' p '-----------' points_on_route = 10 # arbitrary reqs = RandomRoute.new(features, points_on_route) resp = stub.record_route(reqs.each) p "summary: #{resp.inspect}" end ROUTE_CHAT_NOTES = [ RouteNote.new(message: 'doh - a deer', location: Point.new(latitude: 0, longitude: 0)), RouteNote.new(message: 'ray - a drop of golden sun', location: Point.new(latitude: 0, longitude: 1)), RouteNote.new(message: 'me - the name I call myself', location: Point.new(latitude: 1, longitude: 0)), RouteNote.new(message: 'fa - a longer way to run', location: Point.new(latitude: 1, longitude: 1)), RouteNote.new(message: 'soh - with needle and a thread', location: Point.new(latitude: 0, longitude: 1)) ] # runs a RouteChat rpc. # # sends a canned set of route notes and prints out the responses. def run_route_chat(stub) p 'Route Chat' p '----------' sleeping_enumerator = SleepingEnumerator.new(ROUTE_CHAT_NOTES, 1) stub.route_chat(sleeping_enumerator.each_item) { |r| p "received #{r.inspect}" } end # SleepingEnumerator yields through items, and sleeps between each one class SleepingEnumerator def initialize(items, delay) @items = items @delay = delay end def each_item return enum_for(:each_item) unless block_given? @items.each do |item| sleep @delay p "next item to send is #{item.inspect}" yield item end end end def main stub = RouteGuide::Stub.new('localhost:50051', :this_channel_is_insecure) run_get_feature(stub) run_list_features(stub) run_route_chat(stub) if ARGV.length == 0 p 'no feature database; skipping record_route' exit end raw_data = [] File.open(ARGV[0]) do |f| raw_data = MultiJson.load(f.read) end run_record_route(stub, raw_data) end main grpc-1.30.2/examples/ruby/route_guide/route_guide_server.rb000077500000000000000000000130621370425124100240740ustar00rootroot00000000000000#!/usr/bin/env ruby # -*- coding: utf-8 -*- # Copyright 2015 gRPC 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 # # 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. # Sample app that connects to a Route Guide service. # # Usage: $ path/to/route_guide_server.rb path/to/route_guide_db.json & this_dir = File.expand_path(File.dirname(__FILE__)) lib_dir = File.join(File.dirname(this_dir), 'lib') $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir) require 'grpc' require 'multi_json' require 'route_guide_services_pb' include Routeguide COORD_FACTOR = 1e7 RADIUS = 637_100 # Determines the distance between two points. # The formula is based on http://mathforum.org/library/drmath/view/51879.html. def calculate_distance(point_a, point_b) to_radians = proc { |x| x * Math::PI / 180 } lat_a = to_radians.call(point_a.latitude / COORD_FACTOR) lat_b = to_radians.call(point_b.latitude / COORD_FACTOR) lon_a = to_radians.call(point_a.longitude / COORD_FACTOR) lon_b = to_radians.call(point_b.longitude / COORD_FACTOR) delta_lat = lat_a - lat_b delta_lon = lon_a - lon_b a = Math.sin(delta_lat / 2)**2 + Math.cos(lat_a) * Math.cos(lat_b) + Math.sin(delta_lon / 2)**2 (2 * RADIUS * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))).to_i end # RectangleEnum provides an Enumerator of the points in a feature_db within a # given Rectangle. class RectangleEnum # @param [Hash] feature_db # @param [Rectangle] bounds def initialize(feature_db, bounds) @feature_db = feature_db @bounds = bounds lats = [@bounds.lo.latitude, @bounds.hi.latitude] longs = [@bounds.lo.longitude, @bounds.hi.longitude] @lo_lat, @hi_lat = lats.min, lats.max @lo_long, @hi_long = longs.min, longs.max end # in? determines if location lies within the bounds of this instances # Rectangle. def in?(location) location['longitude'] >= @lo_long && location['longitude'] <= @hi_long && location['latitude'] >= @lo_lat && location['latitude'] <= @hi_lat end # each yields the features in the instances feature_db that lie within the # instance rectangle. def each return enum_for(:each) unless block_given? @feature_db.each_pair do |location, name| next unless in?(location) next if name.nil? || name == '' pt = Point.new( Hash[location.each_pair.map { |k, v| [k.to_sym, v] }]) yield Feature.new(location: pt, name: name) end end end # ServerImpl provides an implementation of the RouteGuide service. class ServerImpl < RouteGuide::Service # @param [Hash] feature_db {location => name} def initialize(feature_db) @feature_db = feature_db @received_notes = Hash.new { |h, k| h[k] = [] } end def get_feature(point, _call) name = @feature_db[{ 'longitude' => point.longitude, 'latitude' => point.latitude }] || '' Feature.new(location: point, name: name) end def list_features(rectangle, _call) RectangleEnum.new(@feature_db, rectangle).each end def record_route(call) started, elapsed_time = 0, 0 distance, count, features, last = 0, 0, 0, nil call.each_remote_read do |point| count += 1 name = @feature_db[{ 'longitude' => point.longitude, 'latitude' => point.latitude }] || '' features += 1 unless name == '' if last.nil? last = point started = Time.now.to_i next end elapsed_time = Time.now.to_i - started distance += calculate_distance(point, last) last = point end RouteSummary.new(point_count: count, feature_count: features, distance: distance, elapsed_time: elapsed_time) end def route_chat(notes) RouteChatEnumerator.new(notes, @received_notes).each_item end end class RouteChatEnumerator def initialize(notes, received_notes) @notes = notes @received_notes = received_notes end def each_item return enum_for(:each_item) unless block_given? begin @notes.each do |n| key = { 'latitude' => n.location.latitude, 'longitude' => n.location.longitude } earlier_msgs = @received_notes[key] @received_notes[key] << n.message # send back the earlier messages at this point earlier_msgs.each do |r| yield RouteNote.new(location: n.location, message: r) end end rescue StandardError => e fail e # signal completion via an error end end end def main if ARGV.length == 0 fail 'Please specify the path to the route_guide json database' end raw_data = [] File.open(ARGV[0]) do |f| raw_data = MultiJson.load(f.read) end feature_db = Hash[raw_data.map { |x| [x['location'], x['name']] }] port = '0.0.0.0:50051' s = GRPC::RpcServer.new s.add_http2_port(port, :this_port_is_insecure) GRPC.logger.info("... running insecurely on #{port}") s.handle(ServerImpl.new(feature_db)) # Runs the server with SIGHUP, SIGINT and SIGQUIT signal handlers to # gracefully shutdown. # User could also choose to run server via call to run_till_terminated s.run_till_terminated_or_interrupted([1, 'int', 'SIGQUIT']) end main grpc-1.30.2/examples/ruby/without_protobuf/000077500000000000000000000000001370425124100207515ustar00rootroot00000000000000grpc-1.30.2/examples/ruby/without_protobuf/README.md000066400000000000000000000003201370425124100222230ustar00rootroot00000000000000gRPC (Ruby) without protobuf ======================== This directory contains a simple example of using gRPC without protobuf. This is mainly intended to show basic usage of the GRPC::GenericService module grpc-1.30.2/examples/ruby/without_protobuf/echo_client.rb000077500000000000000000000020731370425124100235570ustar00rootroot00000000000000#!/usr/bin/env ruby # Copyright 2015 gRPC 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 # # 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. # Sample app that connects to a 'EchoWithoutProtobuf' service. # # Usage: $ path/to/echo_client.rb this_dir = File.expand_path(File.dirname(__FILE__)) $LOAD_PATH.unshift(this_dir) unless $LOAD_PATH.include?(this_dir) require 'grpc' require 'echo_services_noprotobuf' def main stub = EchoWithoutProtobuf::Stub.new('localhost:50051', :this_channel_is_insecure) user = ARGV.size > 0 ? ARGV[0] : 'world' message = stub.echo("hello #{user}") p "Response: #{message}" end main grpc-1.30.2/examples/ruby/without_protobuf/echo_server.rb000077500000000000000000000025421370425124100236100ustar00rootroot00000000000000#!/usr/bin/env ruby # Copyright 2015 gRPC 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 # # 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. # Sample gRPC server that implements the EchoWithoutProtobuf service. # # Usage: $ path/to/echo_server.rb this_dir = File.expand_path(File.dirname(__FILE__)) $LOAD_PATH.unshift(this_dir) unless $LOAD_PATH.include?(this_dir) require 'grpc' require 'echo_services_noprotobuf' # EchoServer is simple server that implements the EchoWithoutProtobuf server. class EchoServer < EchoWithoutProtobuf::Service # echo implements the EchoWithoutProtobuf 'Echo' rpc method. def echo(echo_req, _unused_call) echo_req end end # main starts an RpcServer that receives requests to EchoWithoutProtobuf at the sample # server port. def main s = GRPC::RpcServer.new s.add_http2_port('0.0.0.0:50051', :this_port_is_insecure) s.handle(EchoServer) s.run_till_terminated end main grpc-1.30.2/examples/ruby/without_protobuf/echo_services_noprotobuf.rb000066400000000000000000000017611370425124100264010ustar00rootroot00000000000000# Original file comments: # Copyright 2015 gRPC 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 # # 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. # require 'grpc' module EchoWithoutProtobuf # The 'echo without protobuf' service definition. class Service include GRPC::GenericService self.marshal_class_method = :try_convert self.unmarshal_class_method = :try_convert self.service_name = 'EchoWithoutProtobuf' # Request and response are plain strings rpc :Echo, String, String end Stub = Service.rpc_stub_class end grpc-1.30.2/gRPC-C++.podspec000066400000000000000000002350711370425124100152170ustar00rootroot00000000000000# This file has been automatically generated from a template file. # Please make modifications to `templates/gRPC-C++.podspec.template` # instead. This file can be regenerated from the template by running # `tools/buildgen/generate_projects.sh`. # gRPC C++ CocoaPods podspec # # Copyright 2017 gRPC 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 # # 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. Pod::Spec.new do |s| s.name = 'gRPC-C++' # TODO (mxyan): use version that match gRPC version when pod is stabilized version = '1.30.2' s.version = version s.summary = 'gRPC C++ library' s.homepage = 'https://grpc.io' s.license = 'Apache License, Version 2.0' s.authors = { 'The gRPC contributors' => 'grpc-packages@google.com' } s.source = { :git => 'https://github.com/grpc/grpc.git', :tag => "v#{version}", } s.ios.deployment_target = '7.0' s.osx.deployment_target = '10.9' s.tvos.deployment_target = '10.0' s.requires_arc = false name = 'grpcpp' # Use `grpcpp` as framework name so that `#include ` works when built as # framework. s.module_name = name # Add include prefix `grpcpp` so that `#include ` works when built as static # library. s.header_dir = name s.pod_target_xcconfig = { 'HEADER_SEARCH_PATHS' => '"$(inherited)" "$(PODS_TARGET_SRCROOT)/include"', 'USER_HEADER_SEARCH_PATHS' => '"$(PODS_TARGET_SRCROOT)"', 'GCC_PREPROCESSOR_DEFINITIONS' => '"$(inherited)" "COCOAPODS=1"', 'CLANG_WARN_STRICT_PROTOTYPES' => 'NO', 'CLANG_WARN_DOCUMENTATION_COMMENTS' => 'NO', # If we don't set these two settings, `include/grpc/support/time.h` and # `src/core/lib/support/string.h` shadow the system `` and ``, breaking the # build. 'USE_HEADERMAP' => 'NO', 'ALWAYS_SEARCH_USER_PATHS' => 'NO', } s.libraries = 'c++' s.compiler_flags = '-Wno-comma' s.default_subspecs = 'Interface', 'Implementation' # Certificates, to be able to establish TLS connections: s.resource_bundles = { 'gRPCCertificates-Cpp' => ['etc/roots.pem'] } s.header_mappings_dir = 'include/grpcpp' s.subspec 'Interface' do |ss| ss.header_mappings_dir = 'include/grpcpp' ss.source_files = 'include/grpcpp/alarm.h', 'include/grpcpp/alarm_impl.h', 'include/grpcpp/channel.h', 'include/grpcpp/channel_impl.h', 'include/grpcpp/client_context.h', 'include/grpcpp/completion_queue.h', 'include/grpcpp/completion_queue_impl.h', 'include/grpcpp/create_channel.h', 'include/grpcpp/create_channel_impl.h', 'include/grpcpp/create_channel_posix.h', 'include/grpcpp/create_channel_posix_impl.h', 'include/grpcpp/ext/health_check_service_server_builder_option.h', 'include/grpcpp/generic/async_generic_service.h', 'include/grpcpp/generic/generic_stub.h', 'include/grpcpp/generic/generic_stub_impl.h', 'include/grpcpp/grpcpp.h', 'include/grpcpp/health_check_service_interface.h', 'include/grpcpp/health_check_service_interface_impl.h', 'include/grpcpp/impl/call.h', 'include/grpcpp/impl/channel_argument_option.h', 'include/grpcpp/impl/client_unary_call.h', 'include/grpcpp/impl/codegen/async_generic_service.h', 'include/grpcpp/impl/codegen/async_stream.h', 'include/grpcpp/impl/codegen/async_stream_impl.h', 'include/grpcpp/impl/codegen/async_unary_call.h', 'include/grpcpp/impl/codegen/async_unary_call_impl.h', 'include/grpcpp/impl/codegen/byte_buffer.h', 'include/grpcpp/impl/codegen/call.h', 'include/grpcpp/impl/codegen/call_hook.h', 'include/grpcpp/impl/codegen/call_op_set.h', 'include/grpcpp/impl/codegen/call_op_set_interface.h', 'include/grpcpp/impl/codegen/callback_common.h', 'include/grpcpp/impl/codegen/channel_interface.h', 'include/grpcpp/impl/codegen/client_callback.h', 'include/grpcpp/impl/codegen/client_callback_impl.h', 'include/grpcpp/impl/codegen/client_context.h', 'include/grpcpp/impl/codegen/client_context_impl.h', 'include/grpcpp/impl/codegen/client_interceptor.h', 'include/grpcpp/impl/codegen/client_unary_call.h', 'include/grpcpp/impl/codegen/completion_queue.h', 'include/grpcpp/impl/codegen/completion_queue_impl.h', 'include/grpcpp/impl/codegen/completion_queue_tag.h', 'include/grpcpp/impl/codegen/config.h', 'include/grpcpp/impl/codegen/core_codegen.h', 'include/grpcpp/impl/codegen/core_codegen_interface.h', 'include/grpcpp/impl/codegen/create_auth_context.h', 'include/grpcpp/impl/codegen/delegating_channel.h', 'include/grpcpp/impl/codegen/grpc_library.h', 'include/grpcpp/impl/codegen/intercepted_channel.h', 'include/grpcpp/impl/codegen/interceptor.h', 'include/grpcpp/impl/codegen/interceptor_common.h', 'include/grpcpp/impl/codegen/message_allocator.h', 'include/grpcpp/impl/codegen/metadata_map.h', 'include/grpcpp/impl/codegen/method_handler.h', 'include/grpcpp/impl/codegen/method_handler_impl.h', 'include/grpcpp/impl/codegen/rpc_method.h', 'include/grpcpp/impl/codegen/rpc_service_method.h', 'include/grpcpp/impl/codegen/security/auth_context.h', 'include/grpcpp/impl/codegen/serialization_traits.h', 'include/grpcpp/impl/codegen/server_callback.h', 'include/grpcpp/impl/codegen/server_callback_handlers.h', 'include/grpcpp/impl/codegen/server_callback_impl.h', 'include/grpcpp/impl/codegen/server_context.h', 'include/grpcpp/impl/codegen/server_context_impl.h', 'include/grpcpp/impl/codegen/server_interceptor.h', 'include/grpcpp/impl/codegen/server_interface.h', 'include/grpcpp/impl/codegen/service_type.h', 'include/grpcpp/impl/codegen/slice.h', 'include/grpcpp/impl/codegen/status.h', 'include/grpcpp/impl/codegen/status_code_enum.h', 'include/grpcpp/impl/codegen/string_ref.h', 'include/grpcpp/impl/codegen/stub_options.h', 'include/grpcpp/impl/codegen/sync.h', 'include/grpcpp/impl/codegen/sync_stream.h', 'include/grpcpp/impl/codegen/sync_stream_impl.h', 'include/grpcpp/impl/codegen/time.h', 'include/grpcpp/impl/grpc_library.h', 'include/grpcpp/impl/method_handler_impl.h', 'include/grpcpp/impl/rpc_method.h', 'include/grpcpp/impl/rpc_service_method.h', 'include/grpcpp/impl/serialization_traits.h', 'include/grpcpp/impl/server_builder_option.h', 'include/grpcpp/impl/server_builder_option_impl.h', 'include/grpcpp/impl/server_builder_plugin.h', 'include/grpcpp/impl/server_initializer.h', 'include/grpcpp/impl/server_initializer_impl.h', 'include/grpcpp/impl/service_type.h', 'include/grpcpp/resource_quota.h', 'include/grpcpp/resource_quota_impl.h', 'include/grpcpp/security/auth_context.h', 'include/grpcpp/security/auth_metadata_processor.h', 'include/grpcpp/security/auth_metadata_processor_impl.h', 'include/grpcpp/security/credentials.h', 'include/grpcpp/security/credentials_impl.h', 'include/grpcpp/security/server_credentials.h', 'include/grpcpp/security/server_credentials_impl.h', 'include/grpcpp/security/tls_credentials_options.h', 'include/grpcpp/server.h', 'include/grpcpp/server_builder.h', 'include/grpcpp/server_builder_impl.h', 'include/grpcpp/server_context.h', 'include/grpcpp/server_impl.h', 'include/grpcpp/server_posix.h', 'include/grpcpp/server_posix_impl.h', 'include/grpcpp/support/async_stream.h', 'include/grpcpp/support/async_stream_impl.h', 'include/grpcpp/support/async_unary_call.h', 'include/grpcpp/support/async_unary_call_impl.h', 'include/grpcpp/support/byte_buffer.h', 'include/grpcpp/support/channel_arguments.h', 'include/grpcpp/support/channel_arguments_impl.h', 'include/grpcpp/support/client_callback.h', 'include/grpcpp/support/client_callback_impl.h', 'include/grpcpp/support/client_interceptor.h', 'include/grpcpp/support/config.h', 'include/grpcpp/support/interceptor.h', 'include/grpcpp/support/message_allocator.h', 'include/grpcpp/support/method_handler.h', 'include/grpcpp/support/proto_buffer_reader.h', 'include/grpcpp/support/proto_buffer_writer.h', 'include/grpcpp/support/server_callback.h', 'include/grpcpp/support/server_callback_impl.h', 'include/grpcpp/support/server_interceptor.h', 'include/grpcpp/support/slice.h', 'include/grpcpp/support/status.h', 'include/grpcpp/support/status_code_enum.h', 'include/grpcpp/support/string_ref.h', 'include/grpcpp/support/stub_options.h', 'include/grpcpp/support/sync_stream.h', 'include/grpcpp/support/sync_stream_impl.h', 'include/grpcpp/support/time.h', 'include/grpcpp/support/validate_service_config.h' end s.subspec 'Implementation' do |ss| ss.header_mappings_dir = '.' ss.dependency "#{s.name}/Interface", version ss.dependency 'gRPC-Core', version abseil_version = '1.20200225.0' ss.dependency 'abseil/container/inlined_vector', abseil_version ss.dependency 'abseil/memory/memory', abseil_version ss.dependency 'abseil/strings/str_format', abseil_version ss.dependency 'abseil/strings/strings', abseil_version ss.dependency 'abseil/time/time', abseil_version ss.dependency 'abseil/types/optional', abseil_version ss.source_files = 'src/core/ext/filters/client_channel/backend_metric.h', 'src/core/ext/filters/client_channel/backup_poller.h', 'src/core/ext/filters/client_channel/client_channel.h', 'src/core/ext/filters/client_channel/client_channel_channelz.h', 'src/core/ext/filters/client_channel/client_channel_factory.h', 'src/core/ext/filters/client_channel/connector.h', 'src/core/ext/filters/client_channel/global_subchannel_pool.h', 'src/core/ext/filters/client_channel/health/health_check_client.h', 'src/core/ext/filters/client_channel/http_connect_handshaker.h', 'src/core/ext/filters/client_channel/http_proxy.h', 'src/core/ext/filters/client_channel/lb_policy.h', 'src/core/ext/filters/client_channel/lb_policy/address_filtering.h', 'src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h', 'src/core/ext/filters/client_channel/lb_policy/subchannel_list.h', 'src/core/ext/filters/client_channel/lb_policy/xds/xds.h', 'src/core/ext/filters/client_channel/lb_policy_factory.h', 'src/core/ext/filters/client_channel/lb_policy_registry.h', 'src/core/ext/filters/client_channel/local_subchannel_pool.h', 'src/core/ext/filters/client_channel/parse_address.h', 'src/core/ext/filters/client_channel/proxy_mapper.h', 'src/core/ext/filters/client_channel/proxy_mapper_registry.h', 'src/core/ext/filters/client_channel/resolver.h', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h', 'src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h', 'src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h', 'src/core/ext/filters/client_channel/resolver_factory.h', 'src/core/ext/filters/client_channel/resolver_registry.h', 'src/core/ext/filters/client_channel/resolver_result_parsing.h', 'src/core/ext/filters/client_channel/resolving_lb_policy.h', 'src/core/ext/filters/client_channel/retry_throttle.h', 'src/core/ext/filters/client_channel/server_address.h', 'src/core/ext/filters/client_channel/service_config.h', 'src/core/ext/filters/client_channel/service_config_call_data.h', 'src/core/ext/filters/client_channel/service_config_parser.h', 'src/core/ext/filters/client_channel/subchannel.h', 'src/core/ext/filters/client_channel/subchannel_interface.h', 'src/core/ext/filters/client_channel/subchannel_pool_interface.h', 'src/core/ext/filters/client_channel/xds/xds_api.h', 'src/core/ext/filters/client_channel/xds/xds_bootstrap.h', 'src/core/ext/filters/client_channel/xds/xds_channel.h', 'src/core/ext/filters/client_channel/xds/xds_channel_args.h', 'src/core/ext/filters/client_channel/xds/xds_client.h', 'src/core/ext/filters/client_channel/xds/xds_client_stats.h', 'src/core/ext/filters/deadline/deadline_filter.h', 'src/core/ext/filters/http/client/http_client_filter.h', 'src/core/ext/filters/http/client_authority_filter.h', 'src/core/ext/filters/http/message_compress/message_compress_filter.h', 'src/core/ext/filters/http/message_compress/message_decompress_filter.h', 'src/core/ext/filters/http/server/http_server_filter.h', 'src/core/ext/filters/max_age/max_age_filter.h', 'src/core/ext/filters/message_size/message_size_filter.h', 'src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h', 'src/core/ext/filters/workarounds/workaround_utils.h', 'src/core/ext/transport/chttp2/alpn/alpn.h', 'src/core/ext/transport/chttp2/client/authority.h', 'src/core/ext/transport/chttp2/client/chttp2_connector.h', 'src/core/ext/transport/chttp2/server/chttp2_server.h', 'src/core/ext/transport/chttp2/transport/bin_decoder.h', 'src/core/ext/transport/chttp2/transport/bin_encoder.h', 'src/core/ext/transport/chttp2/transport/chttp2_transport.h', 'src/core/ext/transport/chttp2/transport/context_list.h', 'src/core/ext/transport/chttp2/transport/flow_control.h', 'src/core/ext/transport/chttp2/transport/frame.h', 'src/core/ext/transport/chttp2/transport/frame_data.h', 'src/core/ext/transport/chttp2/transport/frame_goaway.h', 'src/core/ext/transport/chttp2/transport/frame_ping.h', 'src/core/ext/transport/chttp2/transport/frame_rst_stream.h', 'src/core/ext/transport/chttp2/transport/frame_settings.h', 'src/core/ext/transport/chttp2/transport/frame_window_update.h', 'src/core/ext/transport/chttp2/transport/hpack_encoder.h', 'src/core/ext/transport/chttp2/transport/hpack_parser.h', 'src/core/ext/transport/chttp2/transport/hpack_table.h', 'src/core/ext/transport/chttp2/transport/http2_settings.h', 'src/core/ext/transport/chttp2/transport/huffsyms.h', 'src/core/ext/transport/chttp2/transport/incoming_metadata.h', 'src/core/ext/transport/chttp2/transport/internal.h', 'src/core/ext/transport/chttp2/transport/stream_map.h', 'src/core/ext/transport/chttp2/transport/varint.h', 'src/core/ext/transport/inproc/inproc_transport.h', 'src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h', 'src/core/ext/upb-generated/envoy/annotations/resource.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/cds.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/eds.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/lds.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/listener.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/rds.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/route.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/srds.upb.h', 'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h', 'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h', 'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h', 'src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h', 'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h', 'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h', 'src/core/ext/upb-generated/envoy/type/http.upb.h', 'src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h', 'src/core/ext/upb-generated/envoy/type/matcher/string.upb.h', 'src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h', 'src/core/ext/upb-generated/envoy/type/percent.upb.h', 'src/core/ext/upb-generated/envoy/type/range.upb.h', 'src/core/ext/upb-generated/envoy/type/semantic_version.upb.h', 'src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h', 'src/core/ext/upb-generated/gogoproto/gogo.upb.h', 'src/core/ext/upb-generated/google/api/annotations.upb.h', 'src/core/ext/upb-generated/google/api/http.upb.h', 'src/core/ext/upb-generated/google/protobuf/any.upb.h', 'src/core/ext/upb-generated/google/protobuf/descriptor.upb.h', 'src/core/ext/upb-generated/google/protobuf/duration.upb.h', 'src/core/ext/upb-generated/google/protobuf/empty.upb.h', 'src/core/ext/upb-generated/google/protobuf/struct.upb.h', 'src/core/ext/upb-generated/google/protobuf/timestamp.upb.h', 'src/core/ext/upb-generated/google/protobuf/wrappers.upb.h', 'src/core/ext/upb-generated/google/rpc/status.upb.h', 'src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h', 'src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h', 'src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h', 'src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h', 'src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h', 'src/core/ext/upb-generated/udpa/annotations/migrate.upb.h', 'src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h', 'src/core/ext/upb-generated/udpa/annotations/status.upb.h', 'src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h', 'src/core/ext/upb-generated/validate/validate.upb.h', 'src/core/lib/avl/avl.h', 'src/core/lib/backoff/backoff.h', 'src/core/lib/channel/channel_args.h', 'src/core/lib/channel/channel_stack.h', 'src/core/lib/channel/channel_stack_builder.h', 'src/core/lib/channel/channel_trace.h', 'src/core/lib/channel/channelz.h', 'src/core/lib/channel/channelz_registry.h', 'src/core/lib/channel/connected_channel.h', 'src/core/lib/channel/context.h', 'src/core/lib/channel/handshaker.h', 'src/core/lib/channel/handshaker_factory.h', 'src/core/lib/channel/handshaker_registry.h', 'src/core/lib/channel/status_util.h', 'src/core/lib/compression/algorithm_metadata.h', 'src/core/lib/compression/compression_args.h', 'src/core/lib/compression/compression_internal.h', 'src/core/lib/compression/message_compress.h', 'src/core/lib/compression/stream_compression.h', 'src/core/lib/compression/stream_compression_gzip.h', 'src/core/lib/compression/stream_compression_identity.h', 'src/core/lib/debug/stats.h', 'src/core/lib/debug/stats_data.h', 'src/core/lib/debug/trace.h', 'src/core/lib/gpr/alloc.h', 'src/core/lib/gpr/arena.h', 'src/core/lib/gpr/env.h', 'src/core/lib/gpr/murmur_hash.h', 'src/core/lib/gpr/spinlock.h', 'src/core/lib/gpr/string.h', 'src/core/lib/gpr/string_windows.h', 'src/core/lib/gpr/time_precise.h', 'src/core/lib/gpr/tls.h', 'src/core/lib/gpr/tls_gcc.h', 'src/core/lib/gpr/tls_msvc.h', 'src/core/lib/gpr/tls_pthread.h', 'src/core/lib/gpr/tmpfile.h', 'src/core/lib/gpr/useful.h', 'src/core/lib/gprpp/arena.h', 'src/core/lib/gprpp/atomic.h', 'src/core/lib/gprpp/debug_location.h', 'src/core/lib/gprpp/fork.h', 'src/core/lib/gprpp/global_config.h', 'src/core/lib/gprpp/global_config_custom.h', 'src/core/lib/gprpp/global_config_env.h', 'src/core/lib/gprpp/global_config_generic.h', 'src/core/lib/gprpp/host_port.h', 'src/core/lib/gprpp/manual_constructor.h', 'src/core/lib/gprpp/map.h', 'src/core/lib/gprpp/memory.h', 'src/core/lib/gprpp/mpscq.h', 'src/core/lib/gprpp/orphanable.h', 'src/core/lib/gprpp/ref_counted.h', 'src/core/lib/gprpp/ref_counted_ptr.h', 'src/core/lib/gprpp/sync.h', 'src/core/lib/gprpp/thd.h', 'src/core/lib/http/format_request.h', 'src/core/lib/http/httpcli.h', 'src/core/lib/http/parser.h', 'src/core/lib/iomgr/block_annotate.h', 'src/core/lib/iomgr/buffer_list.h', 'src/core/lib/iomgr/call_combiner.h', 'src/core/lib/iomgr/cfstream_handle.h', 'src/core/lib/iomgr/closure.h', 'src/core/lib/iomgr/combiner.h', 'src/core/lib/iomgr/dynamic_annotations.h', 'src/core/lib/iomgr/endpoint.h', 'src/core/lib/iomgr/endpoint_cfstream.h', 'src/core/lib/iomgr/endpoint_pair.h', 'src/core/lib/iomgr/error.h', 'src/core/lib/iomgr/error_cfstream.h', 'src/core/lib/iomgr/error_internal.h', 'src/core/lib/iomgr/ev_apple.h', 'src/core/lib/iomgr/ev_epoll1_linux.h', 'src/core/lib/iomgr/ev_epollex_linux.h', 'src/core/lib/iomgr/ev_poll_posix.h', 'src/core/lib/iomgr/ev_posix.h', 'src/core/lib/iomgr/exec_ctx.h', 'src/core/lib/iomgr/executor.h', 'src/core/lib/iomgr/executor/mpmcqueue.h', 'src/core/lib/iomgr/executor/threadpool.h', 'src/core/lib/iomgr/gethostname.h', 'src/core/lib/iomgr/grpc_if_nametoindex.h', 'src/core/lib/iomgr/internal_errqueue.h', 'src/core/lib/iomgr/iocp_windows.h', 'src/core/lib/iomgr/iomgr.h', 'src/core/lib/iomgr/iomgr_custom.h', 'src/core/lib/iomgr/iomgr_internal.h', 'src/core/lib/iomgr/iomgr_posix.h', 'src/core/lib/iomgr/is_epollexclusive_available.h', 'src/core/lib/iomgr/load_file.h', 'src/core/lib/iomgr/lockfree_event.h', 'src/core/lib/iomgr/nameser.h', 'src/core/lib/iomgr/poller/eventmanager_libuv.h', 'src/core/lib/iomgr/polling_entity.h', 'src/core/lib/iomgr/pollset.h', 'src/core/lib/iomgr/pollset_custom.h', 'src/core/lib/iomgr/pollset_set.h', 'src/core/lib/iomgr/pollset_set_custom.h', 'src/core/lib/iomgr/pollset_set_windows.h', 'src/core/lib/iomgr/pollset_uv.h', 'src/core/lib/iomgr/pollset_windows.h', 'src/core/lib/iomgr/port.h', 'src/core/lib/iomgr/python_util.h', 'src/core/lib/iomgr/resolve_address.h', 'src/core/lib/iomgr/resolve_address_custom.h', 'src/core/lib/iomgr/resource_quota.h', 'src/core/lib/iomgr/sockaddr.h', 'src/core/lib/iomgr/sockaddr_custom.h', 'src/core/lib/iomgr/sockaddr_posix.h', 'src/core/lib/iomgr/sockaddr_utils.h', 'src/core/lib/iomgr/sockaddr_windows.h', 'src/core/lib/iomgr/socket_factory_posix.h', 'src/core/lib/iomgr/socket_mutator.h', 'src/core/lib/iomgr/socket_utils.h', 'src/core/lib/iomgr/socket_utils_posix.h', 'src/core/lib/iomgr/socket_windows.h', 'src/core/lib/iomgr/sys_epoll_wrapper.h', 'src/core/lib/iomgr/tcp_client.h', 'src/core/lib/iomgr/tcp_client_posix.h', 'src/core/lib/iomgr/tcp_custom.h', 'src/core/lib/iomgr/tcp_posix.h', 'src/core/lib/iomgr/tcp_server.h', 'src/core/lib/iomgr/tcp_server_utils_posix.h', 'src/core/lib/iomgr/tcp_windows.h', 'src/core/lib/iomgr/time_averaged_stats.h', 'src/core/lib/iomgr/timer.h', 'src/core/lib/iomgr/timer_custom.h', 'src/core/lib/iomgr/timer_generic.h', 'src/core/lib/iomgr/timer_heap.h', 'src/core/lib/iomgr/timer_manager.h', 'src/core/lib/iomgr/udp_server.h', 'src/core/lib/iomgr/unix_sockets_posix.h', 'src/core/lib/iomgr/wakeup_fd_pipe.h', 'src/core/lib/iomgr/wakeup_fd_posix.h', 'src/core/lib/iomgr/work_serializer.h', 'src/core/lib/json/json.h', 'src/core/lib/profiling/timers.h', 'src/core/lib/security/context/security_context.h', 'src/core/lib/security/credentials/alts/alts_credentials.h', 'src/core/lib/security/credentials/alts/check_gcp_environment.h', 'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h', 'src/core/lib/security/credentials/composite/composite_credentials.h', 'src/core/lib/security/credentials/credentials.h', 'src/core/lib/security/credentials/fake/fake_credentials.h', 'src/core/lib/security/credentials/google_default/google_default_credentials.h', 'src/core/lib/security/credentials/iam/iam_credentials.h', 'src/core/lib/security/credentials/jwt/json_token.h', 'src/core/lib/security/credentials/jwt/jwt_credentials.h', 'src/core/lib/security/credentials/jwt/jwt_verifier.h', 'src/core/lib/security/credentials/local/local_credentials.h', 'src/core/lib/security/credentials/oauth2/oauth2_credentials.h', 'src/core/lib/security/credentials/plugin/plugin_credentials.h', 'src/core/lib/security/credentials/ssl/ssl_credentials.h', 'src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h', 'src/core/lib/security/credentials/tls/tls_credentials.h', 'src/core/lib/security/security_connector/alts/alts_security_connector.h', 'src/core/lib/security/security_connector/fake/fake_security_connector.h', 'src/core/lib/security/security_connector/load_system_roots.h', 'src/core/lib/security/security_connector/load_system_roots_linux.h', 'src/core/lib/security/security_connector/local/local_security_connector.h', 'src/core/lib/security/security_connector/security_connector.h', 'src/core/lib/security/security_connector/ssl/ssl_security_connector.h', 'src/core/lib/security/security_connector/ssl_utils.h', 'src/core/lib/security/security_connector/ssl_utils_config.h', 'src/core/lib/security/security_connector/tls/tls_security_connector.h', 'src/core/lib/security/transport/auth_filters.h', 'src/core/lib/security/transport/secure_endpoint.h', 'src/core/lib/security/transport/security_handshaker.h', 'src/core/lib/security/transport/target_authority_table.h', 'src/core/lib/security/transport/tsi_error.h', 'src/core/lib/security/util/json_util.h', 'src/core/lib/slice/b64.h', 'src/core/lib/slice/percent_encoding.h', 'src/core/lib/slice/slice_hash_table.h', 'src/core/lib/slice/slice_internal.h', 'src/core/lib/slice/slice_string_helpers.h', 'src/core/lib/slice/slice_utils.h', 'src/core/lib/slice/slice_weak_hash_table.h', 'src/core/lib/surface/api_trace.h', 'src/core/lib/surface/call.h', 'src/core/lib/surface/call_test_only.h', 'src/core/lib/surface/channel.h', 'src/core/lib/surface/channel_init.h', 'src/core/lib/surface/channel_stack_type.h', 'src/core/lib/surface/completion_queue.h', 'src/core/lib/surface/completion_queue_factory.h', 'src/core/lib/surface/event_string.h', 'src/core/lib/surface/init.h', 'src/core/lib/surface/lame_client.h', 'src/core/lib/surface/server.h', 'src/core/lib/surface/validate_metadata.h', 'src/core/lib/transport/bdp_estimator.h', 'src/core/lib/transport/byte_stream.h', 'src/core/lib/transport/connectivity_state.h', 'src/core/lib/transport/error_utils.h', 'src/core/lib/transport/http2_errors.h', 'src/core/lib/transport/metadata.h', 'src/core/lib/transport/metadata_batch.h', 'src/core/lib/transport/pid_controller.h', 'src/core/lib/transport/static_metadata.h', 'src/core/lib/transport/status_conversion.h', 'src/core/lib/transport/status_metadata.h', 'src/core/lib/transport/timeout_encoding.h', 'src/core/lib/transport/transport.h', 'src/core/lib/transport/transport_impl.h', 'src/core/lib/uri/uri_parser.h', 'src/core/tsi/alts/crypt/gsec.h', 'src/core/tsi/alts/frame_protector/alts_counter.h', 'src/core/tsi/alts/frame_protector/alts_crypter.h', 'src/core/tsi/alts/frame_protector/alts_frame_protector.h', 'src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h', 'src/core/tsi/alts/frame_protector/frame_handler.h', 'src/core/tsi/alts/handshaker/alts_handshaker_client.h', 'src/core/tsi/alts/handshaker/alts_shared_resource.h', 'src/core/tsi/alts/handshaker/alts_tsi_handshaker.h', 'src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h', 'src/core/tsi/alts/handshaker/alts_tsi_utils.h', 'src/core/tsi/alts/handshaker/transport_security_common_api.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h', 'src/core/tsi/fake_transport_security.h', 'src/core/tsi/local_transport_security.h', 'src/core/tsi/ssl/session_cache/ssl_session.h', 'src/core/tsi/ssl/session_cache/ssl_session_cache.h', 'src/core/tsi/ssl_transport_security.h', 'src/core/tsi/ssl_types.h', 'src/core/tsi/transport_security.h', 'src/core/tsi/transport_security_grpc.h', 'src/core/tsi/transport_security_interface.h', 'src/cpp/client/channel_cc.cc', 'src/cpp/client/client_context.cc', 'src/cpp/client/client_interceptor.cc', 'src/cpp/client/create_channel.cc', 'src/cpp/client/create_channel_internal.cc', 'src/cpp/client/create_channel_internal.h', 'src/cpp/client/create_channel_posix.cc', 'src/cpp/client/credentials_cc.cc', 'src/cpp/client/insecure_credentials.cc', 'src/cpp/client/secure_credentials.cc', 'src/cpp/client/secure_credentials.h', 'src/cpp/codegen/codegen_init.cc', 'src/cpp/common/alarm.cc', 'src/cpp/common/auth_property_iterator.cc', 'src/cpp/common/channel_arguments.cc', 'src/cpp/common/channel_filter.cc', 'src/cpp/common/channel_filter.h', 'src/cpp/common/completion_queue_cc.cc', 'src/cpp/common/core_codegen.cc', 'src/cpp/common/resource_quota_cc.cc', 'src/cpp/common/rpc_method.cc', 'src/cpp/common/secure_auth_context.cc', 'src/cpp/common/secure_auth_context.h', 'src/cpp/common/secure_channel_arguments.cc', 'src/cpp/common/secure_create_auth_context.cc', 'src/cpp/common/tls_credentials_options.cc', 'src/cpp/common/tls_credentials_options_util.cc', 'src/cpp/common/tls_credentials_options_util.h', 'src/cpp/common/validate_service_config.cc', 'src/cpp/common/version_cc.cc', 'src/cpp/server/async_generic_service.cc', 'src/cpp/server/channel_argument_option.cc', 'src/cpp/server/create_default_thread_pool.cc', 'src/cpp/server/dynamic_thread_pool.cc', 'src/cpp/server/dynamic_thread_pool.h', 'src/cpp/server/external_connection_acceptor_impl.cc', 'src/cpp/server/external_connection_acceptor_impl.h', 'src/cpp/server/health/default_health_check_service.cc', 'src/cpp/server/health/default_health_check_service.h', 'src/cpp/server/health/health_check_service.cc', 'src/cpp/server/health/health_check_service_server_builder_option.cc', 'src/cpp/server/insecure_server_credentials.cc', 'src/cpp/server/secure_server_credentials.cc', 'src/cpp/server/secure_server_credentials.h', 'src/cpp/server/server_builder.cc', 'src/cpp/server/server_callback.cc', 'src/cpp/server/server_cc.cc', 'src/cpp/server/server_context.cc', 'src/cpp/server/server_credentials.cc', 'src/cpp/server/server_posix.cc', 'src/cpp/server/thread_pool_interface.h', 'src/cpp/thread_manager/thread_manager.cc', 'src/cpp/thread_manager/thread_manager.h', 'src/cpp/util/byte_buffer_cc.cc', 'src/cpp/util/status.cc', 'src/cpp/util/string_ref.cc', 'src/cpp/util/time_cc.cc', 'third_party/upb/upb/decode.h', 'third_party/upb/upb/encode.h', 'third_party/upb/upb/generated_util.h', 'third_party/upb/upb/msg.h', 'third_party/upb/upb/port_def.inc', 'third_party/upb/upb/port_undef.inc', 'third_party/upb/upb/table.int.h', 'third_party/upb/upb/upb.h' ss.private_header_files = 'src/core/ext/filters/client_channel/backend_metric.h', 'src/core/ext/filters/client_channel/backup_poller.h', 'src/core/ext/filters/client_channel/client_channel.h', 'src/core/ext/filters/client_channel/client_channel_channelz.h', 'src/core/ext/filters/client_channel/client_channel_factory.h', 'src/core/ext/filters/client_channel/connector.h', 'src/core/ext/filters/client_channel/global_subchannel_pool.h', 'src/core/ext/filters/client_channel/health/health_check_client.h', 'src/core/ext/filters/client_channel/http_connect_handshaker.h', 'src/core/ext/filters/client_channel/http_proxy.h', 'src/core/ext/filters/client_channel/lb_policy.h', 'src/core/ext/filters/client_channel/lb_policy/address_filtering.h', 'src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h', 'src/core/ext/filters/client_channel/lb_policy/subchannel_list.h', 'src/core/ext/filters/client_channel/lb_policy/xds/xds.h', 'src/core/ext/filters/client_channel/lb_policy_factory.h', 'src/core/ext/filters/client_channel/lb_policy_registry.h', 'src/core/ext/filters/client_channel/local_subchannel_pool.h', 'src/core/ext/filters/client_channel/parse_address.h', 'src/core/ext/filters/client_channel/proxy_mapper.h', 'src/core/ext/filters/client_channel/proxy_mapper_registry.h', 'src/core/ext/filters/client_channel/resolver.h', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h', 'src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h', 'src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h', 'src/core/ext/filters/client_channel/resolver_factory.h', 'src/core/ext/filters/client_channel/resolver_registry.h', 'src/core/ext/filters/client_channel/resolver_result_parsing.h', 'src/core/ext/filters/client_channel/resolving_lb_policy.h', 'src/core/ext/filters/client_channel/retry_throttle.h', 'src/core/ext/filters/client_channel/server_address.h', 'src/core/ext/filters/client_channel/service_config.h', 'src/core/ext/filters/client_channel/service_config_call_data.h', 'src/core/ext/filters/client_channel/service_config_parser.h', 'src/core/ext/filters/client_channel/subchannel.h', 'src/core/ext/filters/client_channel/subchannel_interface.h', 'src/core/ext/filters/client_channel/subchannel_pool_interface.h', 'src/core/ext/filters/client_channel/xds/xds_api.h', 'src/core/ext/filters/client_channel/xds/xds_bootstrap.h', 'src/core/ext/filters/client_channel/xds/xds_channel.h', 'src/core/ext/filters/client_channel/xds/xds_channel_args.h', 'src/core/ext/filters/client_channel/xds/xds_client.h', 'src/core/ext/filters/client_channel/xds/xds_client_stats.h', 'src/core/ext/filters/deadline/deadline_filter.h', 'src/core/ext/filters/http/client/http_client_filter.h', 'src/core/ext/filters/http/client_authority_filter.h', 'src/core/ext/filters/http/message_compress/message_compress_filter.h', 'src/core/ext/filters/http/message_compress/message_decompress_filter.h', 'src/core/ext/filters/http/server/http_server_filter.h', 'src/core/ext/filters/max_age/max_age_filter.h', 'src/core/ext/filters/message_size/message_size_filter.h', 'src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h', 'src/core/ext/filters/workarounds/workaround_utils.h', 'src/core/ext/transport/chttp2/alpn/alpn.h', 'src/core/ext/transport/chttp2/client/authority.h', 'src/core/ext/transport/chttp2/client/chttp2_connector.h', 'src/core/ext/transport/chttp2/server/chttp2_server.h', 'src/core/ext/transport/chttp2/transport/bin_decoder.h', 'src/core/ext/transport/chttp2/transport/bin_encoder.h', 'src/core/ext/transport/chttp2/transport/chttp2_transport.h', 'src/core/ext/transport/chttp2/transport/context_list.h', 'src/core/ext/transport/chttp2/transport/flow_control.h', 'src/core/ext/transport/chttp2/transport/frame.h', 'src/core/ext/transport/chttp2/transport/frame_data.h', 'src/core/ext/transport/chttp2/transport/frame_goaway.h', 'src/core/ext/transport/chttp2/transport/frame_ping.h', 'src/core/ext/transport/chttp2/transport/frame_rst_stream.h', 'src/core/ext/transport/chttp2/transport/frame_settings.h', 'src/core/ext/transport/chttp2/transport/frame_window_update.h', 'src/core/ext/transport/chttp2/transport/hpack_encoder.h', 'src/core/ext/transport/chttp2/transport/hpack_parser.h', 'src/core/ext/transport/chttp2/transport/hpack_table.h', 'src/core/ext/transport/chttp2/transport/http2_settings.h', 'src/core/ext/transport/chttp2/transport/huffsyms.h', 'src/core/ext/transport/chttp2/transport/incoming_metadata.h', 'src/core/ext/transport/chttp2/transport/internal.h', 'src/core/ext/transport/chttp2/transport/stream_map.h', 'src/core/ext/transport/chttp2/transport/varint.h', 'src/core/ext/transport/inproc/inproc_transport.h', 'src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h', 'src/core/ext/upb-generated/envoy/annotations/resource.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/cds.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/eds.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/lds.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/listener.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/rds.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/route.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/srds.upb.h', 'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h', 'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h', 'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h', 'src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h', 'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h', 'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h', 'src/core/ext/upb-generated/envoy/type/http.upb.h', 'src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h', 'src/core/ext/upb-generated/envoy/type/matcher/string.upb.h', 'src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h', 'src/core/ext/upb-generated/envoy/type/percent.upb.h', 'src/core/ext/upb-generated/envoy/type/range.upb.h', 'src/core/ext/upb-generated/envoy/type/semantic_version.upb.h', 'src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h', 'src/core/ext/upb-generated/gogoproto/gogo.upb.h', 'src/core/ext/upb-generated/google/api/annotations.upb.h', 'src/core/ext/upb-generated/google/api/http.upb.h', 'src/core/ext/upb-generated/google/protobuf/any.upb.h', 'src/core/ext/upb-generated/google/protobuf/descriptor.upb.h', 'src/core/ext/upb-generated/google/protobuf/duration.upb.h', 'src/core/ext/upb-generated/google/protobuf/empty.upb.h', 'src/core/ext/upb-generated/google/protobuf/struct.upb.h', 'src/core/ext/upb-generated/google/protobuf/timestamp.upb.h', 'src/core/ext/upb-generated/google/protobuf/wrappers.upb.h', 'src/core/ext/upb-generated/google/rpc/status.upb.h', 'src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h', 'src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h', 'src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h', 'src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h', 'src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h', 'src/core/ext/upb-generated/udpa/annotations/migrate.upb.h', 'src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h', 'src/core/ext/upb-generated/udpa/annotations/status.upb.h', 'src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h', 'src/core/ext/upb-generated/validate/validate.upb.h', 'src/core/lib/avl/avl.h', 'src/core/lib/backoff/backoff.h', 'src/core/lib/channel/channel_args.h', 'src/core/lib/channel/channel_stack.h', 'src/core/lib/channel/channel_stack_builder.h', 'src/core/lib/channel/channel_trace.h', 'src/core/lib/channel/channelz.h', 'src/core/lib/channel/channelz_registry.h', 'src/core/lib/channel/connected_channel.h', 'src/core/lib/channel/context.h', 'src/core/lib/channel/handshaker.h', 'src/core/lib/channel/handshaker_factory.h', 'src/core/lib/channel/handshaker_registry.h', 'src/core/lib/channel/status_util.h', 'src/core/lib/compression/algorithm_metadata.h', 'src/core/lib/compression/compression_args.h', 'src/core/lib/compression/compression_internal.h', 'src/core/lib/compression/message_compress.h', 'src/core/lib/compression/stream_compression.h', 'src/core/lib/compression/stream_compression_gzip.h', 'src/core/lib/compression/stream_compression_identity.h', 'src/core/lib/debug/stats.h', 'src/core/lib/debug/stats_data.h', 'src/core/lib/debug/trace.h', 'src/core/lib/gpr/alloc.h', 'src/core/lib/gpr/arena.h', 'src/core/lib/gpr/env.h', 'src/core/lib/gpr/murmur_hash.h', 'src/core/lib/gpr/spinlock.h', 'src/core/lib/gpr/string.h', 'src/core/lib/gpr/string_windows.h', 'src/core/lib/gpr/time_precise.h', 'src/core/lib/gpr/tls.h', 'src/core/lib/gpr/tls_gcc.h', 'src/core/lib/gpr/tls_msvc.h', 'src/core/lib/gpr/tls_pthread.h', 'src/core/lib/gpr/tmpfile.h', 'src/core/lib/gpr/useful.h', 'src/core/lib/gprpp/arena.h', 'src/core/lib/gprpp/atomic.h', 'src/core/lib/gprpp/debug_location.h', 'src/core/lib/gprpp/fork.h', 'src/core/lib/gprpp/global_config.h', 'src/core/lib/gprpp/global_config_custom.h', 'src/core/lib/gprpp/global_config_env.h', 'src/core/lib/gprpp/global_config_generic.h', 'src/core/lib/gprpp/host_port.h', 'src/core/lib/gprpp/manual_constructor.h', 'src/core/lib/gprpp/map.h', 'src/core/lib/gprpp/memory.h', 'src/core/lib/gprpp/mpscq.h', 'src/core/lib/gprpp/orphanable.h', 'src/core/lib/gprpp/ref_counted.h', 'src/core/lib/gprpp/ref_counted_ptr.h', 'src/core/lib/gprpp/sync.h', 'src/core/lib/gprpp/thd.h', 'src/core/lib/http/format_request.h', 'src/core/lib/http/httpcli.h', 'src/core/lib/http/parser.h', 'src/core/lib/iomgr/block_annotate.h', 'src/core/lib/iomgr/buffer_list.h', 'src/core/lib/iomgr/call_combiner.h', 'src/core/lib/iomgr/cfstream_handle.h', 'src/core/lib/iomgr/closure.h', 'src/core/lib/iomgr/combiner.h', 'src/core/lib/iomgr/dynamic_annotations.h', 'src/core/lib/iomgr/endpoint.h', 'src/core/lib/iomgr/endpoint_cfstream.h', 'src/core/lib/iomgr/endpoint_pair.h', 'src/core/lib/iomgr/error.h', 'src/core/lib/iomgr/error_cfstream.h', 'src/core/lib/iomgr/error_internal.h', 'src/core/lib/iomgr/ev_apple.h', 'src/core/lib/iomgr/ev_epoll1_linux.h', 'src/core/lib/iomgr/ev_epollex_linux.h', 'src/core/lib/iomgr/ev_poll_posix.h', 'src/core/lib/iomgr/ev_posix.h', 'src/core/lib/iomgr/exec_ctx.h', 'src/core/lib/iomgr/executor.h', 'src/core/lib/iomgr/executor/mpmcqueue.h', 'src/core/lib/iomgr/executor/threadpool.h', 'src/core/lib/iomgr/gethostname.h', 'src/core/lib/iomgr/grpc_if_nametoindex.h', 'src/core/lib/iomgr/internal_errqueue.h', 'src/core/lib/iomgr/iocp_windows.h', 'src/core/lib/iomgr/iomgr.h', 'src/core/lib/iomgr/iomgr_custom.h', 'src/core/lib/iomgr/iomgr_internal.h', 'src/core/lib/iomgr/iomgr_posix.h', 'src/core/lib/iomgr/is_epollexclusive_available.h', 'src/core/lib/iomgr/load_file.h', 'src/core/lib/iomgr/lockfree_event.h', 'src/core/lib/iomgr/nameser.h', 'src/core/lib/iomgr/poller/eventmanager_libuv.h', 'src/core/lib/iomgr/polling_entity.h', 'src/core/lib/iomgr/pollset.h', 'src/core/lib/iomgr/pollset_custom.h', 'src/core/lib/iomgr/pollset_set.h', 'src/core/lib/iomgr/pollset_set_custom.h', 'src/core/lib/iomgr/pollset_set_windows.h', 'src/core/lib/iomgr/pollset_uv.h', 'src/core/lib/iomgr/pollset_windows.h', 'src/core/lib/iomgr/port.h', 'src/core/lib/iomgr/python_util.h', 'src/core/lib/iomgr/resolve_address.h', 'src/core/lib/iomgr/resolve_address_custom.h', 'src/core/lib/iomgr/resource_quota.h', 'src/core/lib/iomgr/sockaddr.h', 'src/core/lib/iomgr/sockaddr_custom.h', 'src/core/lib/iomgr/sockaddr_posix.h', 'src/core/lib/iomgr/sockaddr_utils.h', 'src/core/lib/iomgr/sockaddr_windows.h', 'src/core/lib/iomgr/socket_factory_posix.h', 'src/core/lib/iomgr/socket_mutator.h', 'src/core/lib/iomgr/socket_utils.h', 'src/core/lib/iomgr/socket_utils_posix.h', 'src/core/lib/iomgr/socket_windows.h', 'src/core/lib/iomgr/sys_epoll_wrapper.h', 'src/core/lib/iomgr/tcp_client.h', 'src/core/lib/iomgr/tcp_client_posix.h', 'src/core/lib/iomgr/tcp_custom.h', 'src/core/lib/iomgr/tcp_posix.h', 'src/core/lib/iomgr/tcp_server.h', 'src/core/lib/iomgr/tcp_server_utils_posix.h', 'src/core/lib/iomgr/tcp_windows.h', 'src/core/lib/iomgr/time_averaged_stats.h', 'src/core/lib/iomgr/timer.h', 'src/core/lib/iomgr/timer_custom.h', 'src/core/lib/iomgr/timer_generic.h', 'src/core/lib/iomgr/timer_heap.h', 'src/core/lib/iomgr/timer_manager.h', 'src/core/lib/iomgr/udp_server.h', 'src/core/lib/iomgr/unix_sockets_posix.h', 'src/core/lib/iomgr/wakeup_fd_pipe.h', 'src/core/lib/iomgr/wakeup_fd_posix.h', 'src/core/lib/iomgr/work_serializer.h', 'src/core/lib/json/json.h', 'src/core/lib/profiling/timers.h', 'src/core/lib/security/context/security_context.h', 'src/core/lib/security/credentials/alts/alts_credentials.h', 'src/core/lib/security/credentials/alts/check_gcp_environment.h', 'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h', 'src/core/lib/security/credentials/composite/composite_credentials.h', 'src/core/lib/security/credentials/credentials.h', 'src/core/lib/security/credentials/fake/fake_credentials.h', 'src/core/lib/security/credentials/google_default/google_default_credentials.h', 'src/core/lib/security/credentials/iam/iam_credentials.h', 'src/core/lib/security/credentials/jwt/json_token.h', 'src/core/lib/security/credentials/jwt/jwt_credentials.h', 'src/core/lib/security/credentials/jwt/jwt_verifier.h', 'src/core/lib/security/credentials/local/local_credentials.h', 'src/core/lib/security/credentials/oauth2/oauth2_credentials.h', 'src/core/lib/security/credentials/plugin/plugin_credentials.h', 'src/core/lib/security/credentials/ssl/ssl_credentials.h', 'src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h', 'src/core/lib/security/credentials/tls/tls_credentials.h', 'src/core/lib/security/security_connector/alts/alts_security_connector.h', 'src/core/lib/security/security_connector/fake/fake_security_connector.h', 'src/core/lib/security/security_connector/load_system_roots.h', 'src/core/lib/security/security_connector/load_system_roots_linux.h', 'src/core/lib/security/security_connector/local/local_security_connector.h', 'src/core/lib/security/security_connector/security_connector.h', 'src/core/lib/security/security_connector/ssl/ssl_security_connector.h', 'src/core/lib/security/security_connector/ssl_utils.h', 'src/core/lib/security/security_connector/ssl_utils_config.h', 'src/core/lib/security/security_connector/tls/tls_security_connector.h', 'src/core/lib/security/transport/auth_filters.h', 'src/core/lib/security/transport/secure_endpoint.h', 'src/core/lib/security/transport/security_handshaker.h', 'src/core/lib/security/transport/target_authority_table.h', 'src/core/lib/security/transport/tsi_error.h', 'src/core/lib/security/util/json_util.h', 'src/core/lib/slice/b64.h', 'src/core/lib/slice/percent_encoding.h', 'src/core/lib/slice/slice_hash_table.h', 'src/core/lib/slice/slice_internal.h', 'src/core/lib/slice/slice_string_helpers.h', 'src/core/lib/slice/slice_utils.h', 'src/core/lib/slice/slice_weak_hash_table.h', 'src/core/lib/surface/api_trace.h', 'src/core/lib/surface/call.h', 'src/core/lib/surface/call_test_only.h', 'src/core/lib/surface/channel.h', 'src/core/lib/surface/channel_init.h', 'src/core/lib/surface/channel_stack_type.h', 'src/core/lib/surface/completion_queue.h', 'src/core/lib/surface/completion_queue_factory.h', 'src/core/lib/surface/event_string.h', 'src/core/lib/surface/init.h', 'src/core/lib/surface/lame_client.h', 'src/core/lib/surface/server.h', 'src/core/lib/surface/validate_metadata.h', 'src/core/lib/transport/bdp_estimator.h', 'src/core/lib/transport/byte_stream.h', 'src/core/lib/transport/connectivity_state.h', 'src/core/lib/transport/error_utils.h', 'src/core/lib/transport/http2_errors.h', 'src/core/lib/transport/metadata.h', 'src/core/lib/transport/metadata_batch.h', 'src/core/lib/transport/pid_controller.h', 'src/core/lib/transport/static_metadata.h', 'src/core/lib/transport/status_conversion.h', 'src/core/lib/transport/status_metadata.h', 'src/core/lib/transport/timeout_encoding.h', 'src/core/lib/transport/transport.h', 'src/core/lib/transport/transport_impl.h', 'src/core/lib/uri/uri_parser.h', 'src/core/tsi/alts/crypt/gsec.h', 'src/core/tsi/alts/frame_protector/alts_counter.h', 'src/core/tsi/alts/frame_protector/alts_crypter.h', 'src/core/tsi/alts/frame_protector/alts_frame_protector.h', 'src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h', 'src/core/tsi/alts/frame_protector/frame_handler.h', 'src/core/tsi/alts/handshaker/alts_handshaker_client.h', 'src/core/tsi/alts/handshaker/alts_shared_resource.h', 'src/core/tsi/alts/handshaker/alts_tsi_handshaker.h', 'src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h', 'src/core/tsi/alts/handshaker/alts_tsi_utils.h', 'src/core/tsi/alts/handshaker/transport_security_common_api.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h', 'src/core/tsi/fake_transport_security.h', 'src/core/tsi/local_transport_security.h', 'src/core/tsi/ssl/session_cache/ssl_session.h', 'src/core/tsi/ssl/session_cache/ssl_session_cache.h', 'src/core/tsi/ssl_transport_security.h', 'src/core/tsi/ssl_types.h', 'src/core/tsi/transport_security.h', 'src/core/tsi/transport_security_grpc.h', 'src/core/tsi/transport_security_interface.h', 'src/cpp/client/create_channel_internal.h', 'src/cpp/client/secure_credentials.h', 'src/cpp/common/channel_filter.h', 'src/cpp/common/secure_auth_context.h', 'src/cpp/common/tls_credentials_options_util.h', 'src/cpp/server/dynamic_thread_pool.h', 'src/cpp/server/external_connection_acceptor_impl.h', 'src/cpp/server/health/default_health_check_service.h', 'src/cpp/server/secure_server_credentials.h', 'src/cpp/server/thread_pool_interface.h', 'src/cpp/thread_manager/thread_manager.h', 'third_party/upb/upb/decode.h', 'third_party/upb/upb/encode.h', 'third_party/upb/upb/generated_util.h', 'third_party/upb/upb/msg.h', 'third_party/upb/upb/port_def.inc', 'third_party/upb/upb/port_undef.inc', 'third_party/upb/upb/table.int.h', 'third_party/upb/upb/upb.h' end s.subspec 'Protobuf' do |ss| ss.header_mappings_dir = 'include/grpcpp' ss.dependency "#{s.name}/Interface", version ss.source_files = 'include/grpcpp/impl/codegen/config_protobuf.h', 'include/grpcpp/impl/codegen/proto_buffer_reader.h', 'include/grpcpp/impl/codegen/proto_buffer_writer.h', 'include/grpcpp/impl/codegen/proto_utils.h' end s.subspec 'Cronet-Interface' do |ss| ss.header_mappings_dir = 'include/grpcpp' ss.public_header_files = "include/grpcpp/security/cronet_credentials.h", "include/grpcpp/security/cronet_credentials_impl.h" ss.source_files = "include/grpcpp/security/cronet_credentials.h", "include/grpcpp/security/cronet_credentials_impl.h" end s.subspec 'Cronet-Implementation' do |ss| ss.header_mappings_dir = '.' ss.dependency "#{s.name}/Cronet-Interface", version ss.dependency "#{s.name}/Implementation", version ss.dependency 'gRPC-Core/Cronet-Implementation', version ss.source_files = "src/cpp/client/cronet_credentials.cc" end s.prepare_command = <<-END_OF_COMMAND sed -E -i '' 's;#include ;#if COCOAPODS==1\\\n #include \\\n#else\\\n #include \\\n#endif;g' $(find src/core -type f \\( -path '*.h' -or -path '*.cc' \\) -print | xargs grep -H -c '#include 'grpc-packages@google.com' } s.source = { :git => 'https://github.com/grpc/grpc.git', :tag => "v#{version}", :submodules => true, } # gRPC podspecs depend on fix for https://github.com/CocoaPods/CocoaPods/issues/6024, # which was released in Cocoapods v1.2.0. s.cocoapods_version = '>= 1.2.0' s.ios.deployment_target = '7.0' s.osx.deployment_target = '10.9' s.tvos.deployment_target = '10.0' s.watchos.deployment_target = '4.0' s.requires_arc = false name = 'grpc' # When creating a dynamic framework, name it grpc.framework instead of gRPC-Core.framework. # This lets users write their includes like `#include ` as opposed to `#include # `. s.module_name = name # When creating a dynamic framework, copy the headers under `include/grpc/` into the root of # the `Headers/` directory of the framework (i.e., not under `Headers/include/grpc`). # # TODO(jcanizales): Debug why this doesn't work on macOS. s.header_mappings_dir = 'include/grpc' # The above has an undesired effect when creating a static library: It forces users to write # includes like `#include `. `s.header_dir` adds a path prefix to that, and # because Cocoapods lets omit the pod name when including headers of static libraries, the # following lets users write `#include `. s.header_dir = name # The module map created automatically by Cocoapods doesn't work for C libraries like gRPC-Core. s.module_map = 'include/grpc/module.modulemap' # To compile the library, we need the user headers search path (quoted includes) to point to the # root of the repo, and the system headers search path (angled includes) to point to `include/`. # Cocoapods effectively clones the repo under `/Pods/gRPC-Core/`, and sets a build # variable called `$(PODS_ROOT)` to `/Pods/`, so we use that. # # Relying on the file structure under $(PODS_ROOT) isn't officially supported in Cocoapods, as it # is taken as an implementation detail. We've asked for an alternative, and have been told that # what we're doing should keep working: https://github.com/CocoaPods/CocoaPods/issues/4386 # # The `src_root` value of `$(PODS_ROOT)/gRPC-Core` assumes Cocoapods is installing this pod from # its remote repo. For local development of this library, enabled by using `:path` in the Podfile, # that assumption is wrong. In such case, the following settings need to be reset with the # appropriate value of `src_root`. This can be accomplished in the `pre_install` hook of the # Podfile; see `src/objective-c/tests/Podfile` for an example. src_root = '$(PODS_ROOT)/gRPC-Core' s.pod_target_xcconfig = { 'GRPC_SRC_ROOT' => src_root, 'HEADER_SEARCH_PATHS' => '"$(inherited)" "$(GRPC_SRC_ROOT)/include"', 'USER_HEADER_SEARCH_PATHS' => '"$(GRPC_SRC_ROOT)"', # If we don't set these two settings, `include/grpc/support/time.h` and # `src/core/lib/gpr/string.h` shadow the system `` and ``, breaking the # build. 'USE_HEADERMAP' => 'NO', 'ALWAYS_SEARCH_USER_PATHS' => 'NO', 'GCC_PREPROCESSOR_DEFINITIONS' => '"$(inherited)" "COCOAPODS=1"', 'CLANG_WARN_STRICT_PROTOTYPES' => 'NO', } s.default_subspecs = 'Interface', 'Implementation' s.compiler_flags = '-DGRPC_ARES=0 -Wno-comma' s.libraries = 'c++' # Like many other C libraries, gRPC-Core has its public headers under `include//` and its # sources and private headers in other directories outside `include/`. Cocoapods' linter doesn't # allow any header to be listed outside the `header_mappings_dir` (even though doing so works in # practice). Because we need our `header_mappings_dir` to be `include/grpc/` for the reason # mentioned above, we work around the linter limitation by dividing the pod into two subspecs, one # for public headers and the other for implementation. Each gets its own `header_mappings_dir`, # making the linter happy. # # The list of source files is generated by a template: `templates/gRPC-Core.podspec.template`. It # can be regenerated from the template by running `tools/buildgen/generate_projects.sh`. s.subspec 'Interface' do |ss| ss.header_mappings_dir = 'include/grpc' ss.source_files = 'include/grpc/byte_buffer.h', 'include/grpc/byte_buffer_reader.h', 'include/grpc/census.h', 'include/grpc/compression.h', 'include/grpc/fork.h', 'include/grpc/grpc.h', 'include/grpc/grpc_posix.h', 'include/grpc/grpc_security.h', 'include/grpc/grpc_security_constants.h', 'include/grpc/impl/codegen/atm.h', 'include/grpc/impl/codegen/atm_gcc_atomic.h', 'include/grpc/impl/codegen/atm_gcc_sync.h', 'include/grpc/impl/codegen/atm_windows.h', 'include/grpc/impl/codegen/byte_buffer.h', 'include/grpc/impl/codegen/byte_buffer_reader.h', 'include/grpc/impl/codegen/compression_types.h', 'include/grpc/impl/codegen/connectivity_state.h', 'include/grpc/impl/codegen/fork.h', 'include/grpc/impl/codegen/gpr_slice.h', 'include/grpc/impl/codegen/gpr_types.h', 'include/grpc/impl/codegen/grpc_types.h', 'include/grpc/impl/codegen/log.h', 'include/grpc/impl/codegen/port_platform.h', 'include/grpc/impl/codegen/propagation_bits.h', 'include/grpc/impl/codegen/slice.h', 'include/grpc/impl/codegen/status.h', 'include/grpc/impl/codegen/sync.h', 'include/grpc/impl/codegen/sync_abseil.h', 'include/grpc/impl/codegen/sync_custom.h', 'include/grpc/impl/codegen/sync_generic.h', 'include/grpc/impl/codegen/sync_posix.h', 'include/grpc/impl/codegen/sync_windows.h', 'include/grpc/load_reporting.h', 'include/grpc/slice.h', 'include/grpc/slice_buffer.h', 'include/grpc/status.h', 'include/grpc/support/alloc.h', 'include/grpc/support/atm.h', 'include/grpc/support/atm_gcc_atomic.h', 'include/grpc/support/atm_gcc_sync.h', 'include/grpc/support/atm_windows.h', 'include/grpc/support/cpu.h', 'include/grpc/support/log.h', 'include/grpc/support/log_windows.h', 'include/grpc/support/port_platform.h', 'include/grpc/support/string_util.h', 'include/grpc/support/sync.h', 'include/grpc/support/sync_abseil.h', 'include/grpc/support/sync_custom.h', 'include/grpc/support/sync_generic.h', 'include/grpc/support/sync_posix.h', 'include/grpc/support/sync_windows.h', 'include/grpc/support/thd_id.h', 'include/grpc/support/time.h', 'include/grpc/support/workaround_list.h' end s.subspec 'Implementation' do |ss| ss.header_mappings_dir = '.' ss.libraries = 'z' ss.dependency "#{s.name}/Interface", version ss.dependency 'BoringSSL-GRPC', '0.0.9' abseil_version = '1.20200225.0' ss.dependency 'abseil/container/inlined_vector', abseil_version ss.dependency 'abseil/memory/memory', abseil_version ss.dependency 'abseil/strings/str_format', abseil_version ss.dependency 'abseil/strings/strings', abseil_version ss.dependency 'abseil/time/time', abseil_version ss.dependency 'abseil/types/optional', abseil_version ss.compiler_flags = '-DBORINGSSL_PREFIX=GRPC' ss.source_files = 'src/core/ext/filters/census/grpc_context.cc', 'src/core/ext/filters/client_channel/backend_metric.cc', 'src/core/ext/filters/client_channel/backend_metric.h', 'src/core/ext/filters/client_channel/backup_poller.cc', 'src/core/ext/filters/client_channel/backup_poller.h', 'src/core/ext/filters/client_channel/channel_connectivity.cc', 'src/core/ext/filters/client_channel/client_channel.cc', 'src/core/ext/filters/client_channel/client_channel.h', 'src/core/ext/filters/client_channel/client_channel_channelz.cc', 'src/core/ext/filters/client_channel/client_channel_channelz.h', 'src/core/ext/filters/client_channel/client_channel_factory.cc', 'src/core/ext/filters/client_channel/client_channel_factory.h', 'src/core/ext/filters/client_channel/client_channel_plugin.cc', 'src/core/ext/filters/client_channel/connector.h', 'src/core/ext/filters/client_channel/global_subchannel_pool.cc', 'src/core/ext/filters/client_channel/global_subchannel_pool.h', 'src/core/ext/filters/client_channel/health/health_check_client.cc', 'src/core/ext/filters/client_channel/health/health_check_client.h', 'src/core/ext/filters/client_channel/http_connect_handshaker.cc', 'src/core/ext/filters/client_channel/http_connect_handshaker.h', 'src/core/ext/filters/client_channel/http_proxy.cc', 'src/core/ext/filters/client_channel/http_proxy.h', 'src/core/ext/filters/client_channel/lb_policy.cc', 'src/core/ext/filters/client_channel/lb_policy.h', 'src/core/ext/filters/client_channel/lb_policy/address_filtering.cc', 'src/core/ext/filters/client_channel/lb_policy/address_filtering.h', 'src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc', 'src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h', 'src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc', 'src/core/ext/filters/client_channel/lb_policy/priority/priority.cc', 'src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc', 'src/core/ext/filters/client_channel/lb_policy/subchannel_list.h', 'src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc', 'src/core/ext/filters/client_channel/lb_policy/xds/cds.cc', 'src/core/ext/filters/client_channel/lb_policy/xds/eds.cc', 'src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc', 'src/core/ext/filters/client_channel/lb_policy/xds/xds.h', 'src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc', 'src/core/ext/filters/client_channel/lb_policy_factory.h', 'src/core/ext/filters/client_channel/lb_policy_registry.cc', 'src/core/ext/filters/client_channel/lb_policy_registry.h', 'src/core/ext/filters/client_channel/local_subchannel_pool.cc', 'src/core/ext/filters/client_channel/local_subchannel_pool.h', 'src/core/ext/filters/client_channel/parse_address.cc', 'src/core/ext/filters/client_channel/parse_address.h', 'src/core/ext/filters/client_channel/proxy_mapper.h', 'src/core/ext/filters/client_channel/proxy_mapper_registry.cc', 'src/core/ext/filters/client_channel/proxy_mapper_registry.h', 'src/core/ext/filters/client_channel/resolver.cc', 'src/core/ext/filters/client_channel/resolver.h', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc', 'src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc', 'src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h', 'src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc', 'src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc', 'src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h', 'src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc', 'src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc', 'src/core/ext/filters/client_channel/resolver_factory.h', 'src/core/ext/filters/client_channel/resolver_registry.cc', 'src/core/ext/filters/client_channel/resolver_registry.h', 'src/core/ext/filters/client_channel/resolver_result_parsing.cc', 'src/core/ext/filters/client_channel/resolver_result_parsing.h', 'src/core/ext/filters/client_channel/resolving_lb_policy.cc', 'src/core/ext/filters/client_channel/resolving_lb_policy.h', 'src/core/ext/filters/client_channel/retry_throttle.cc', 'src/core/ext/filters/client_channel/retry_throttle.h', 'src/core/ext/filters/client_channel/server_address.cc', 'src/core/ext/filters/client_channel/server_address.h', 'src/core/ext/filters/client_channel/service_config.cc', 'src/core/ext/filters/client_channel/service_config.h', 'src/core/ext/filters/client_channel/service_config_call_data.h', 'src/core/ext/filters/client_channel/service_config_parser.cc', 'src/core/ext/filters/client_channel/service_config_parser.h', 'src/core/ext/filters/client_channel/subchannel.cc', 'src/core/ext/filters/client_channel/subchannel.h', 'src/core/ext/filters/client_channel/subchannel_interface.h', 'src/core/ext/filters/client_channel/subchannel_pool_interface.cc', 'src/core/ext/filters/client_channel/subchannel_pool_interface.h', 'src/core/ext/filters/client_channel/xds/xds_api.cc', 'src/core/ext/filters/client_channel/xds/xds_api.h', 'src/core/ext/filters/client_channel/xds/xds_bootstrap.cc', 'src/core/ext/filters/client_channel/xds/xds_bootstrap.h', 'src/core/ext/filters/client_channel/xds/xds_channel.h', 'src/core/ext/filters/client_channel/xds/xds_channel_args.h', 'src/core/ext/filters/client_channel/xds/xds_channel_secure.cc', 'src/core/ext/filters/client_channel/xds/xds_client.cc', 'src/core/ext/filters/client_channel/xds/xds_client.h', 'src/core/ext/filters/client_channel/xds/xds_client_stats.cc', 'src/core/ext/filters/client_channel/xds/xds_client_stats.h', 'src/core/ext/filters/client_idle/client_idle_filter.cc', 'src/core/ext/filters/deadline/deadline_filter.cc', 'src/core/ext/filters/deadline/deadline_filter.h', 'src/core/ext/filters/http/client/http_client_filter.cc', 'src/core/ext/filters/http/client/http_client_filter.h', 'src/core/ext/filters/http/client_authority_filter.cc', 'src/core/ext/filters/http/client_authority_filter.h', 'src/core/ext/filters/http/http_filters_plugin.cc', 'src/core/ext/filters/http/message_compress/message_compress_filter.cc', 'src/core/ext/filters/http/message_compress/message_compress_filter.h', 'src/core/ext/filters/http/message_compress/message_decompress_filter.cc', 'src/core/ext/filters/http/message_compress/message_decompress_filter.h', 'src/core/ext/filters/http/server/http_server_filter.cc', 'src/core/ext/filters/http/server/http_server_filter.h', 'src/core/ext/filters/max_age/max_age_filter.cc', 'src/core/ext/filters/max_age/max_age_filter.h', 'src/core/ext/filters/message_size/message_size_filter.cc', 'src/core/ext/filters/message_size/message_size_filter.h', 'src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc', 'src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h', 'src/core/ext/filters/workarounds/workaround_utils.cc', 'src/core/ext/filters/workarounds/workaround_utils.h', 'src/core/ext/transport/chttp2/alpn/alpn.cc', 'src/core/ext/transport/chttp2/alpn/alpn.h', 'src/core/ext/transport/chttp2/client/authority.cc', 'src/core/ext/transport/chttp2/client/authority.h', 'src/core/ext/transport/chttp2/client/chttp2_connector.cc', 'src/core/ext/transport/chttp2/client/chttp2_connector.h', 'src/core/ext/transport/chttp2/client/insecure/channel_create.cc', 'src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc', 'src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc', 'src/core/ext/transport/chttp2/server/chttp2_server.cc', 'src/core/ext/transport/chttp2/server/chttp2_server.h', 'src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc', 'src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc', 'src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc', 'src/core/ext/transport/chttp2/transport/bin_decoder.cc', 'src/core/ext/transport/chttp2/transport/bin_decoder.h', 'src/core/ext/transport/chttp2/transport/bin_encoder.cc', 'src/core/ext/transport/chttp2/transport/bin_encoder.h', 'src/core/ext/transport/chttp2/transport/chttp2_plugin.cc', 'src/core/ext/transport/chttp2/transport/chttp2_transport.cc', 'src/core/ext/transport/chttp2/transport/chttp2_transport.h', 'src/core/ext/transport/chttp2/transport/context_list.cc', 'src/core/ext/transport/chttp2/transport/context_list.h', 'src/core/ext/transport/chttp2/transport/flow_control.cc', 'src/core/ext/transport/chttp2/transport/flow_control.h', 'src/core/ext/transport/chttp2/transport/frame.h', 'src/core/ext/transport/chttp2/transport/frame_data.cc', 'src/core/ext/transport/chttp2/transport/frame_data.h', 'src/core/ext/transport/chttp2/transport/frame_goaway.cc', 'src/core/ext/transport/chttp2/transport/frame_goaway.h', 'src/core/ext/transport/chttp2/transport/frame_ping.cc', 'src/core/ext/transport/chttp2/transport/frame_ping.h', 'src/core/ext/transport/chttp2/transport/frame_rst_stream.cc', 'src/core/ext/transport/chttp2/transport/frame_rst_stream.h', 'src/core/ext/transport/chttp2/transport/frame_settings.cc', 'src/core/ext/transport/chttp2/transport/frame_settings.h', 'src/core/ext/transport/chttp2/transport/frame_window_update.cc', 'src/core/ext/transport/chttp2/transport/frame_window_update.h', 'src/core/ext/transport/chttp2/transport/hpack_encoder.cc', 'src/core/ext/transport/chttp2/transport/hpack_encoder.h', 'src/core/ext/transport/chttp2/transport/hpack_parser.cc', 'src/core/ext/transport/chttp2/transport/hpack_parser.h', 'src/core/ext/transport/chttp2/transport/hpack_table.cc', 'src/core/ext/transport/chttp2/transport/hpack_table.h', 'src/core/ext/transport/chttp2/transport/http2_settings.cc', 'src/core/ext/transport/chttp2/transport/http2_settings.h', 'src/core/ext/transport/chttp2/transport/huffsyms.cc', 'src/core/ext/transport/chttp2/transport/huffsyms.h', 'src/core/ext/transport/chttp2/transport/incoming_metadata.cc', 'src/core/ext/transport/chttp2/transport/incoming_metadata.h', 'src/core/ext/transport/chttp2/transport/internal.h', 'src/core/ext/transport/chttp2/transport/parsing.cc', 'src/core/ext/transport/chttp2/transport/stream_lists.cc', 'src/core/ext/transport/chttp2/transport/stream_map.cc', 'src/core/ext/transport/chttp2/transport/stream_map.h', 'src/core/ext/transport/chttp2/transport/varint.cc', 'src/core/ext/transport/chttp2/transport/varint.h', 'src/core/ext/transport/chttp2/transport/writing.cc', 'src/core/ext/transport/inproc/inproc_plugin.cc', 'src/core/ext/transport/inproc/inproc_transport.cc', 'src/core/ext/transport/inproc/inproc_transport.h', 'src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c', 'src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h', 'src/core/ext/upb-generated/envoy/annotations/resource.upb.c', 'src/core/ext/upb-generated/envoy/annotations/resource.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/cds.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/cds.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/eds.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/eds.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/lds.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/lds.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/listener.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/listener.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/rds.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/rds.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/route.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/route.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/srds.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/srds.upb.h', 'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c', 'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h', 'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c', 'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h', 'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c', 'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h', 'src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c', 'src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h', 'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c', 'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h', 'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c', 'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h', 'src/core/ext/upb-generated/envoy/type/http.upb.c', 'src/core/ext/upb-generated/envoy/type/http.upb.h', 'src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c', 'src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h', 'src/core/ext/upb-generated/envoy/type/matcher/string.upb.c', 'src/core/ext/upb-generated/envoy/type/matcher/string.upb.h', 'src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c', 'src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h', 'src/core/ext/upb-generated/envoy/type/percent.upb.c', 'src/core/ext/upb-generated/envoy/type/percent.upb.h', 'src/core/ext/upb-generated/envoy/type/range.upb.c', 'src/core/ext/upb-generated/envoy/type/range.upb.h', 'src/core/ext/upb-generated/envoy/type/semantic_version.upb.c', 'src/core/ext/upb-generated/envoy/type/semantic_version.upb.h', 'src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c', 'src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h', 'src/core/ext/upb-generated/gogoproto/gogo.upb.c', 'src/core/ext/upb-generated/gogoproto/gogo.upb.h', 'src/core/ext/upb-generated/google/api/annotations.upb.c', 'src/core/ext/upb-generated/google/api/annotations.upb.h', 'src/core/ext/upb-generated/google/api/http.upb.c', 'src/core/ext/upb-generated/google/api/http.upb.h', 'src/core/ext/upb-generated/google/protobuf/any.upb.c', 'src/core/ext/upb-generated/google/protobuf/any.upb.h', 'src/core/ext/upb-generated/google/protobuf/descriptor.upb.c', 'src/core/ext/upb-generated/google/protobuf/descriptor.upb.h', 'src/core/ext/upb-generated/google/protobuf/duration.upb.c', 'src/core/ext/upb-generated/google/protobuf/duration.upb.h', 'src/core/ext/upb-generated/google/protobuf/empty.upb.c', 'src/core/ext/upb-generated/google/protobuf/empty.upb.h', 'src/core/ext/upb-generated/google/protobuf/struct.upb.c', 'src/core/ext/upb-generated/google/protobuf/struct.upb.h', 'src/core/ext/upb-generated/google/protobuf/timestamp.upb.c', 'src/core/ext/upb-generated/google/protobuf/timestamp.upb.h', 'src/core/ext/upb-generated/google/protobuf/wrappers.upb.c', 'src/core/ext/upb-generated/google/protobuf/wrappers.upb.h', 'src/core/ext/upb-generated/google/rpc/status.upb.c', 'src/core/ext/upb-generated/google/rpc/status.upb.h', 'src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c', 'src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h', 'src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c', 'src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h', 'src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c', 'src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h', 'src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c', 'src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h', 'src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c', 'src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h', 'src/core/ext/upb-generated/udpa/annotations/migrate.upb.c', 'src/core/ext/upb-generated/udpa/annotations/migrate.upb.h', 'src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c', 'src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h', 'src/core/ext/upb-generated/udpa/annotations/status.upb.c', 'src/core/ext/upb-generated/udpa/annotations/status.upb.h', 'src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c', 'src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h', 'src/core/ext/upb-generated/validate/validate.upb.c', 'src/core/ext/upb-generated/validate/validate.upb.h', 'src/core/lib/avl/avl.cc', 'src/core/lib/avl/avl.h', 'src/core/lib/backoff/backoff.cc', 'src/core/lib/backoff/backoff.h', 'src/core/lib/channel/channel_args.cc', 'src/core/lib/channel/channel_args.h', 'src/core/lib/channel/channel_stack.cc', 'src/core/lib/channel/channel_stack.h', 'src/core/lib/channel/channel_stack_builder.cc', 'src/core/lib/channel/channel_stack_builder.h', 'src/core/lib/channel/channel_trace.cc', 'src/core/lib/channel/channel_trace.h', 'src/core/lib/channel/channelz.cc', 'src/core/lib/channel/channelz.h', 'src/core/lib/channel/channelz_registry.cc', 'src/core/lib/channel/channelz_registry.h', 'src/core/lib/channel/connected_channel.cc', 'src/core/lib/channel/connected_channel.h', 'src/core/lib/channel/context.h', 'src/core/lib/channel/handshaker.cc', 'src/core/lib/channel/handshaker.h', 'src/core/lib/channel/handshaker_factory.h', 'src/core/lib/channel/handshaker_registry.cc', 'src/core/lib/channel/handshaker_registry.h', 'src/core/lib/channel/status_util.cc', 'src/core/lib/channel/status_util.h', 'src/core/lib/compression/algorithm_metadata.h', 'src/core/lib/compression/compression.cc', 'src/core/lib/compression/compression_args.cc', 'src/core/lib/compression/compression_args.h', 'src/core/lib/compression/compression_internal.cc', 'src/core/lib/compression/compression_internal.h', 'src/core/lib/compression/message_compress.cc', 'src/core/lib/compression/message_compress.h', 'src/core/lib/compression/stream_compression.cc', 'src/core/lib/compression/stream_compression.h', 'src/core/lib/compression/stream_compression_gzip.cc', 'src/core/lib/compression/stream_compression_gzip.h', 'src/core/lib/compression/stream_compression_identity.cc', 'src/core/lib/compression/stream_compression_identity.h', 'src/core/lib/debug/stats.cc', 'src/core/lib/debug/stats.h', 'src/core/lib/debug/stats_data.cc', 'src/core/lib/debug/stats_data.h', 'src/core/lib/debug/trace.cc', 'src/core/lib/debug/trace.h', 'src/core/lib/gpr/alloc.cc', 'src/core/lib/gpr/alloc.h', 'src/core/lib/gpr/arena.h', 'src/core/lib/gpr/atm.cc', 'src/core/lib/gpr/cpu_iphone.cc', 'src/core/lib/gpr/cpu_linux.cc', 'src/core/lib/gpr/cpu_posix.cc', 'src/core/lib/gpr/cpu_windows.cc', 'src/core/lib/gpr/env.h', 'src/core/lib/gpr/env_linux.cc', 'src/core/lib/gpr/env_posix.cc', 'src/core/lib/gpr/env_windows.cc', 'src/core/lib/gpr/log.cc', 'src/core/lib/gpr/log_android.cc', 'src/core/lib/gpr/log_linux.cc', 'src/core/lib/gpr/log_posix.cc', 'src/core/lib/gpr/log_windows.cc', 'src/core/lib/gpr/murmur_hash.cc', 'src/core/lib/gpr/murmur_hash.h', 'src/core/lib/gpr/spinlock.h', 'src/core/lib/gpr/string.cc', 'src/core/lib/gpr/string.h', 'src/core/lib/gpr/string_posix.cc', 'src/core/lib/gpr/string_util_windows.cc', 'src/core/lib/gpr/string_windows.cc', 'src/core/lib/gpr/string_windows.h', 'src/core/lib/gpr/sync.cc', 'src/core/lib/gpr/sync_abseil.cc', 'src/core/lib/gpr/sync_posix.cc', 'src/core/lib/gpr/sync_windows.cc', 'src/core/lib/gpr/time.cc', 'src/core/lib/gpr/time_posix.cc', 'src/core/lib/gpr/time_precise.cc', 'src/core/lib/gpr/time_precise.h', 'src/core/lib/gpr/time_windows.cc', 'src/core/lib/gpr/tls.h', 'src/core/lib/gpr/tls_gcc.h', 'src/core/lib/gpr/tls_msvc.h', 'src/core/lib/gpr/tls_pthread.cc', 'src/core/lib/gpr/tls_pthread.h', 'src/core/lib/gpr/tmpfile.h', 'src/core/lib/gpr/tmpfile_msys.cc', 'src/core/lib/gpr/tmpfile_posix.cc', 'src/core/lib/gpr/tmpfile_windows.cc', 'src/core/lib/gpr/useful.h', 'src/core/lib/gpr/wrap_memcpy.cc', 'src/core/lib/gprpp/arena.cc', 'src/core/lib/gprpp/arena.h', 'src/core/lib/gprpp/atomic.h', 'src/core/lib/gprpp/debug_location.h', 'src/core/lib/gprpp/fork.cc', 'src/core/lib/gprpp/fork.h', 'src/core/lib/gprpp/global_config.h', 'src/core/lib/gprpp/global_config_custom.h', 'src/core/lib/gprpp/global_config_env.cc', 'src/core/lib/gprpp/global_config_env.h', 'src/core/lib/gprpp/global_config_generic.h', 'src/core/lib/gprpp/host_port.cc', 'src/core/lib/gprpp/host_port.h', 'src/core/lib/gprpp/manual_constructor.h', 'src/core/lib/gprpp/map.h', 'src/core/lib/gprpp/memory.h', 'src/core/lib/gprpp/mpscq.cc', 'src/core/lib/gprpp/mpscq.h', 'src/core/lib/gprpp/orphanable.h', 'src/core/lib/gprpp/ref_counted.h', 'src/core/lib/gprpp/ref_counted_ptr.h', 'src/core/lib/gprpp/sync.h', 'src/core/lib/gprpp/thd.h', 'src/core/lib/gprpp/thd_posix.cc', 'src/core/lib/gprpp/thd_windows.cc', 'src/core/lib/http/format_request.cc', 'src/core/lib/http/format_request.h', 'src/core/lib/http/httpcli.cc', 'src/core/lib/http/httpcli.h', 'src/core/lib/http/httpcli_security_connector.cc', 'src/core/lib/http/parser.cc', 'src/core/lib/http/parser.h', 'src/core/lib/iomgr/block_annotate.h', 'src/core/lib/iomgr/buffer_list.cc', 'src/core/lib/iomgr/buffer_list.h', 'src/core/lib/iomgr/call_combiner.cc', 'src/core/lib/iomgr/call_combiner.h', 'src/core/lib/iomgr/cfstream_handle.cc', 'src/core/lib/iomgr/cfstream_handle.h', 'src/core/lib/iomgr/closure.h', 'src/core/lib/iomgr/combiner.cc', 'src/core/lib/iomgr/combiner.h', 'src/core/lib/iomgr/dualstack_socket_posix.cc', 'src/core/lib/iomgr/dynamic_annotations.h', 'src/core/lib/iomgr/endpoint.cc', 'src/core/lib/iomgr/endpoint.h', 'src/core/lib/iomgr/endpoint_cfstream.cc', 'src/core/lib/iomgr/endpoint_cfstream.h', 'src/core/lib/iomgr/endpoint_pair.h', 'src/core/lib/iomgr/endpoint_pair_posix.cc', 'src/core/lib/iomgr/endpoint_pair_uv.cc', 'src/core/lib/iomgr/endpoint_pair_windows.cc', 'src/core/lib/iomgr/error.cc', 'src/core/lib/iomgr/error.h', 'src/core/lib/iomgr/error_cfstream.cc', 'src/core/lib/iomgr/error_cfstream.h', 'src/core/lib/iomgr/error_internal.h', 'src/core/lib/iomgr/ev_apple.cc', 'src/core/lib/iomgr/ev_apple.h', 'src/core/lib/iomgr/ev_epoll1_linux.cc', 'src/core/lib/iomgr/ev_epoll1_linux.h', 'src/core/lib/iomgr/ev_epollex_linux.cc', 'src/core/lib/iomgr/ev_epollex_linux.h', 'src/core/lib/iomgr/ev_poll_posix.cc', 'src/core/lib/iomgr/ev_poll_posix.h', 'src/core/lib/iomgr/ev_posix.cc', 'src/core/lib/iomgr/ev_posix.h', 'src/core/lib/iomgr/ev_windows.cc', 'src/core/lib/iomgr/exec_ctx.cc', 'src/core/lib/iomgr/exec_ctx.h', 'src/core/lib/iomgr/executor.cc', 'src/core/lib/iomgr/executor.h', 'src/core/lib/iomgr/executor/mpmcqueue.cc', 'src/core/lib/iomgr/executor/mpmcqueue.h', 'src/core/lib/iomgr/executor/threadpool.cc', 'src/core/lib/iomgr/executor/threadpool.h', 'src/core/lib/iomgr/fork_posix.cc', 'src/core/lib/iomgr/fork_windows.cc', 'src/core/lib/iomgr/gethostname.h', 'src/core/lib/iomgr/gethostname_fallback.cc', 'src/core/lib/iomgr/gethostname_host_name_max.cc', 'src/core/lib/iomgr/gethostname_sysconf.cc', 'src/core/lib/iomgr/grpc_if_nametoindex.h', 'src/core/lib/iomgr/grpc_if_nametoindex_posix.cc', 'src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc', 'src/core/lib/iomgr/internal_errqueue.cc', 'src/core/lib/iomgr/internal_errqueue.h', 'src/core/lib/iomgr/iocp_windows.cc', 'src/core/lib/iomgr/iocp_windows.h', 'src/core/lib/iomgr/iomgr.cc', 'src/core/lib/iomgr/iomgr.h', 'src/core/lib/iomgr/iomgr_custom.cc', 'src/core/lib/iomgr/iomgr_custom.h', 'src/core/lib/iomgr/iomgr_internal.cc', 'src/core/lib/iomgr/iomgr_internal.h', 'src/core/lib/iomgr/iomgr_posix.cc', 'src/core/lib/iomgr/iomgr_posix.h', 'src/core/lib/iomgr/iomgr_posix_cfstream.cc', 'src/core/lib/iomgr/iomgr_uv.cc', 'src/core/lib/iomgr/iomgr_windows.cc', 'src/core/lib/iomgr/is_epollexclusive_available.cc', 'src/core/lib/iomgr/is_epollexclusive_available.h', 'src/core/lib/iomgr/load_file.cc', 'src/core/lib/iomgr/load_file.h', 'src/core/lib/iomgr/lockfree_event.cc', 'src/core/lib/iomgr/lockfree_event.h', 'src/core/lib/iomgr/nameser.h', 'src/core/lib/iomgr/poller/eventmanager_libuv.cc', 'src/core/lib/iomgr/poller/eventmanager_libuv.h', 'src/core/lib/iomgr/polling_entity.cc', 'src/core/lib/iomgr/polling_entity.h', 'src/core/lib/iomgr/pollset.cc', 'src/core/lib/iomgr/pollset.h', 'src/core/lib/iomgr/pollset_custom.cc', 'src/core/lib/iomgr/pollset_custom.h', 'src/core/lib/iomgr/pollset_set.cc', 'src/core/lib/iomgr/pollset_set.h', 'src/core/lib/iomgr/pollset_set_custom.cc', 'src/core/lib/iomgr/pollset_set_custom.h', 'src/core/lib/iomgr/pollset_set_windows.cc', 'src/core/lib/iomgr/pollset_set_windows.h', 'src/core/lib/iomgr/pollset_uv.cc', 'src/core/lib/iomgr/pollset_uv.h', 'src/core/lib/iomgr/pollset_windows.cc', 'src/core/lib/iomgr/pollset_windows.h', 'src/core/lib/iomgr/port.h', 'src/core/lib/iomgr/python_util.h', 'src/core/lib/iomgr/resolve_address.cc', 'src/core/lib/iomgr/resolve_address.h', 'src/core/lib/iomgr/resolve_address_custom.cc', 'src/core/lib/iomgr/resolve_address_custom.h', 'src/core/lib/iomgr/resolve_address_posix.cc', 'src/core/lib/iomgr/resolve_address_windows.cc', 'src/core/lib/iomgr/resource_quota.cc', 'src/core/lib/iomgr/resource_quota.h', 'src/core/lib/iomgr/sockaddr.h', 'src/core/lib/iomgr/sockaddr_custom.h', 'src/core/lib/iomgr/sockaddr_posix.h', 'src/core/lib/iomgr/sockaddr_utils.cc', 'src/core/lib/iomgr/sockaddr_utils.h', 'src/core/lib/iomgr/sockaddr_windows.h', 'src/core/lib/iomgr/socket_factory_posix.cc', 'src/core/lib/iomgr/socket_factory_posix.h', 'src/core/lib/iomgr/socket_mutator.cc', 'src/core/lib/iomgr/socket_mutator.h', 'src/core/lib/iomgr/socket_utils.h', 'src/core/lib/iomgr/socket_utils_common_posix.cc', 'src/core/lib/iomgr/socket_utils_linux.cc', 'src/core/lib/iomgr/socket_utils_posix.cc', 'src/core/lib/iomgr/socket_utils_posix.h', 'src/core/lib/iomgr/socket_utils_uv.cc', 'src/core/lib/iomgr/socket_utils_windows.cc', 'src/core/lib/iomgr/socket_windows.cc', 'src/core/lib/iomgr/socket_windows.h', 'src/core/lib/iomgr/sys_epoll_wrapper.h', 'src/core/lib/iomgr/tcp_client.cc', 'src/core/lib/iomgr/tcp_client.h', 'src/core/lib/iomgr/tcp_client_cfstream.cc', 'src/core/lib/iomgr/tcp_client_custom.cc', 'src/core/lib/iomgr/tcp_client_posix.cc', 'src/core/lib/iomgr/tcp_client_posix.h', 'src/core/lib/iomgr/tcp_client_windows.cc', 'src/core/lib/iomgr/tcp_custom.cc', 'src/core/lib/iomgr/tcp_custom.h', 'src/core/lib/iomgr/tcp_posix.cc', 'src/core/lib/iomgr/tcp_posix.h', 'src/core/lib/iomgr/tcp_server.cc', 'src/core/lib/iomgr/tcp_server.h', 'src/core/lib/iomgr/tcp_server_custom.cc', 'src/core/lib/iomgr/tcp_server_posix.cc', 'src/core/lib/iomgr/tcp_server_utils_posix.h', 'src/core/lib/iomgr/tcp_server_utils_posix_common.cc', 'src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc', 'src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc', 'src/core/lib/iomgr/tcp_server_windows.cc', 'src/core/lib/iomgr/tcp_uv.cc', 'src/core/lib/iomgr/tcp_windows.cc', 'src/core/lib/iomgr/tcp_windows.h', 'src/core/lib/iomgr/time_averaged_stats.cc', 'src/core/lib/iomgr/time_averaged_stats.h', 'src/core/lib/iomgr/timer.cc', 'src/core/lib/iomgr/timer.h', 'src/core/lib/iomgr/timer_custom.cc', 'src/core/lib/iomgr/timer_custom.h', 'src/core/lib/iomgr/timer_generic.cc', 'src/core/lib/iomgr/timer_generic.h', 'src/core/lib/iomgr/timer_heap.cc', 'src/core/lib/iomgr/timer_heap.h', 'src/core/lib/iomgr/timer_manager.cc', 'src/core/lib/iomgr/timer_manager.h', 'src/core/lib/iomgr/timer_uv.cc', 'src/core/lib/iomgr/udp_server.cc', 'src/core/lib/iomgr/udp_server.h', 'src/core/lib/iomgr/unix_sockets_posix.cc', 'src/core/lib/iomgr/unix_sockets_posix.h', 'src/core/lib/iomgr/unix_sockets_posix_noop.cc', 'src/core/lib/iomgr/wakeup_fd_eventfd.cc', 'src/core/lib/iomgr/wakeup_fd_nospecial.cc', 'src/core/lib/iomgr/wakeup_fd_pipe.cc', 'src/core/lib/iomgr/wakeup_fd_pipe.h', 'src/core/lib/iomgr/wakeup_fd_posix.cc', 'src/core/lib/iomgr/wakeup_fd_posix.h', 'src/core/lib/iomgr/work_serializer.cc', 'src/core/lib/iomgr/work_serializer.h', 'src/core/lib/json/json.h', 'src/core/lib/json/json_reader.cc', 'src/core/lib/json/json_writer.cc', 'src/core/lib/profiling/basic_timers.cc', 'src/core/lib/profiling/stap_timers.cc', 'src/core/lib/profiling/timers.h', 'src/core/lib/security/context/security_context.cc', 'src/core/lib/security/context/security_context.h', 'src/core/lib/security/credentials/alts/alts_credentials.cc', 'src/core/lib/security/credentials/alts/alts_credentials.h', 'src/core/lib/security/credentials/alts/check_gcp_environment.cc', 'src/core/lib/security/credentials/alts/check_gcp_environment.h', 'src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc', 'src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc', 'src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc', 'src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc', 'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc', 'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h', 'src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc', 'src/core/lib/security/credentials/composite/composite_credentials.cc', 'src/core/lib/security/credentials/composite/composite_credentials.h', 'src/core/lib/security/credentials/credentials.cc', 'src/core/lib/security/credentials/credentials.h', 'src/core/lib/security/credentials/credentials_metadata.cc', 'src/core/lib/security/credentials/fake/fake_credentials.cc', 'src/core/lib/security/credentials/fake/fake_credentials.h', 'src/core/lib/security/credentials/google_default/credentials_generic.cc', 'src/core/lib/security/credentials/google_default/google_default_credentials.cc', 'src/core/lib/security/credentials/google_default/google_default_credentials.h', 'src/core/lib/security/credentials/iam/iam_credentials.cc', 'src/core/lib/security/credentials/iam/iam_credentials.h', 'src/core/lib/security/credentials/jwt/json_token.cc', 'src/core/lib/security/credentials/jwt/json_token.h', 'src/core/lib/security/credentials/jwt/jwt_credentials.cc', 'src/core/lib/security/credentials/jwt/jwt_credentials.h', 'src/core/lib/security/credentials/jwt/jwt_verifier.cc', 'src/core/lib/security/credentials/jwt/jwt_verifier.h', 'src/core/lib/security/credentials/local/local_credentials.cc', 'src/core/lib/security/credentials/local/local_credentials.h', 'src/core/lib/security/credentials/oauth2/oauth2_credentials.cc', 'src/core/lib/security/credentials/oauth2/oauth2_credentials.h', 'src/core/lib/security/credentials/plugin/plugin_credentials.cc', 'src/core/lib/security/credentials/plugin/plugin_credentials.h', 'src/core/lib/security/credentials/ssl/ssl_credentials.cc', 'src/core/lib/security/credentials/ssl/ssl_credentials.h', 'src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc', 'src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h', 'src/core/lib/security/credentials/tls/tls_credentials.cc', 'src/core/lib/security/credentials/tls/tls_credentials.h', 'src/core/lib/security/security_connector/alts/alts_security_connector.cc', 'src/core/lib/security/security_connector/alts/alts_security_connector.h', 'src/core/lib/security/security_connector/fake/fake_security_connector.cc', 'src/core/lib/security/security_connector/fake/fake_security_connector.h', 'src/core/lib/security/security_connector/load_system_roots.h', 'src/core/lib/security/security_connector/load_system_roots_fallback.cc', 'src/core/lib/security/security_connector/load_system_roots_linux.cc', 'src/core/lib/security/security_connector/load_system_roots_linux.h', 'src/core/lib/security/security_connector/local/local_security_connector.cc', 'src/core/lib/security/security_connector/local/local_security_connector.h', 'src/core/lib/security/security_connector/security_connector.cc', 'src/core/lib/security/security_connector/security_connector.h', 'src/core/lib/security/security_connector/ssl/ssl_security_connector.cc', 'src/core/lib/security/security_connector/ssl/ssl_security_connector.h', 'src/core/lib/security/security_connector/ssl_utils.cc', 'src/core/lib/security/security_connector/ssl_utils.h', 'src/core/lib/security/security_connector/ssl_utils_config.cc', 'src/core/lib/security/security_connector/ssl_utils_config.h', 'src/core/lib/security/security_connector/tls/tls_security_connector.cc', 'src/core/lib/security/security_connector/tls/tls_security_connector.h', 'src/core/lib/security/transport/auth_filters.h', 'src/core/lib/security/transport/client_auth_filter.cc', 'src/core/lib/security/transport/secure_endpoint.cc', 'src/core/lib/security/transport/secure_endpoint.h', 'src/core/lib/security/transport/security_handshaker.cc', 'src/core/lib/security/transport/security_handshaker.h', 'src/core/lib/security/transport/server_auth_filter.cc', 'src/core/lib/security/transport/target_authority_table.cc', 'src/core/lib/security/transport/target_authority_table.h', 'src/core/lib/security/transport/tsi_error.cc', 'src/core/lib/security/transport/tsi_error.h', 'src/core/lib/security/util/json_util.cc', 'src/core/lib/security/util/json_util.h', 'src/core/lib/slice/b64.cc', 'src/core/lib/slice/b64.h', 'src/core/lib/slice/percent_encoding.cc', 'src/core/lib/slice/percent_encoding.h', 'src/core/lib/slice/slice.cc', 'src/core/lib/slice/slice_buffer.cc', 'src/core/lib/slice/slice_hash_table.h', 'src/core/lib/slice/slice_intern.cc', 'src/core/lib/slice/slice_internal.h', 'src/core/lib/slice/slice_string_helpers.cc', 'src/core/lib/slice/slice_string_helpers.h', 'src/core/lib/slice/slice_utils.h', 'src/core/lib/slice/slice_weak_hash_table.h', 'src/core/lib/surface/api_trace.cc', 'src/core/lib/surface/api_trace.h', 'src/core/lib/surface/byte_buffer.cc', 'src/core/lib/surface/byte_buffer_reader.cc', 'src/core/lib/surface/call.cc', 'src/core/lib/surface/call.h', 'src/core/lib/surface/call_details.cc', 'src/core/lib/surface/call_log_batch.cc', 'src/core/lib/surface/call_test_only.h', 'src/core/lib/surface/channel.cc', 'src/core/lib/surface/channel.h', 'src/core/lib/surface/channel_init.cc', 'src/core/lib/surface/channel_init.h', 'src/core/lib/surface/channel_ping.cc', 'src/core/lib/surface/channel_stack_type.cc', 'src/core/lib/surface/channel_stack_type.h', 'src/core/lib/surface/completion_queue.cc', 'src/core/lib/surface/completion_queue.h', 'src/core/lib/surface/completion_queue_factory.cc', 'src/core/lib/surface/completion_queue_factory.h', 'src/core/lib/surface/event_string.cc', 'src/core/lib/surface/event_string.h', 'src/core/lib/surface/init.cc', 'src/core/lib/surface/init.h', 'src/core/lib/surface/init_secure.cc', 'src/core/lib/surface/lame_client.cc', 'src/core/lib/surface/lame_client.h', 'src/core/lib/surface/metadata_array.cc', 'src/core/lib/surface/server.cc', 'src/core/lib/surface/server.h', 'src/core/lib/surface/validate_metadata.cc', 'src/core/lib/surface/validate_metadata.h', 'src/core/lib/surface/version.cc', 'src/core/lib/transport/bdp_estimator.cc', 'src/core/lib/transport/bdp_estimator.h', 'src/core/lib/transport/byte_stream.cc', 'src/core/lib/transport/byte_stream.h', 'src/core/lib/transport/connectivity_state.cc', 'src/core/lib/transport/connectivity_state.h', 'src/core/lib/transport/error_utils.cc', 'src/core/lib/transport/error_utils.h', 'src/core/lib/transport/http2_errors.h', 'src/core/lib/transport/metadata.cc', 'src/core/lib/transport/metadata.h', 'src/core/lib/transport/metadata_batch.cc', 'src/core/lib/transport/metadata_batch.h', 'src/core/lib/transport/pid_controller.cc', 'src/core/lib/transport/pid_controller.h', 'src/core/lib/transport/static_metadata.cc', 'src/core/lib/transport/static_metadata.h', 'src/core/lib/transport/status_conversion.cc', 'src/core/lib/transport/status_conversion.h', 'src/core/lib/transport/status_metadata.cc', 'src/core/lib/transport/status_metadata.h', 'src/core/lib/transport/timeout_encoding.cc', 'src/core/lib/transport/timeout_encoding.h', 'src/core/lib/transport/transport.cc', 'src/core/lib/transport/transport.h', 'src/core/lib/transport/transport_impl.h', 'src/core/lib/transport/transport_op_string.cc', 'src/core/lib/uri/uri_parser.cc', 'src/core/lib/uri/uri_parser.h', 'src/core/plugin_registry/grpc_plugin_registry.cc', 'src/core/tsi/alts/crypt/aes_gcm.cc', 'src/core/tsi/alts/crypt/gsec.cc', 'src/core/tsi/alts/crypt/gsec.h', 'src/core/tsi/alts/frame_protector/alts_counter.cc', 'src/core/tsi/alts/frame_protector/alts_counter.h', 'src/core/tsi/alts/frame_protector/alts_crypter.cc', 'src/core/tsi/alts/frame_protector/alts_crypter.h', 'src/core/tsi/alts/frame_protector/alts_frame_protector.cc', 'src/core/tsi/alts/frame_protector/alts_frame_protector.h', 'src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc', 'src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h', 'src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc', 'src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc', 'src/core/tsi/alts/frame_protector/frame_handler.cc', 'src/core/tsi/alts/frame_protector/frame_handler.h', 'src/core/tsi/alts/handshaker/alts_handshaker_client.cc', 'src/core/tsi/alts/handshaker/alts_handshaker_client.h', 'src/core/tsi/alts/handshaker/alts_shared_resource.cc', 'src/core/tsi/alts/handshaker/alts_shared_resource.h', 'src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc', 'src/core/tsi/alts/handshaker/alts_tsi_handshaker.h', 'src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h', 'src/core/tsi/alts/handshaker/alts_tsi_utils.cc', 'src/core/tsi/alts/handshaker/alts_tsi_utils.h', 'src/core/tsi/alts/handshaker/transport_security_common_api.cc', 'src/core/tsi/alts/handshaker/transport_security_common_api.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc', 'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc', 'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc', 'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc', 'src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc', 'src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h', 'src/core/tsi/fake_transport_security.cc', 'src/core/tsi/fake_transport_security.h', 'src/core/tsi/local_transport_security.cc', 'src/core/tsi/local_transport_security.h', 'src/core/tsi/ssl/session_cache/ssl_session.h', 'src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc', 'src/core/tsi/ssl/session_cache/ssl_session_cache.cc', 'src/core/tsi/ssl/session_cache/ssl_session_cache.h', 'src/core/tsi/ssl/session_cache/ssl_session_openssl.cc', 'src/core/tsi/ssl_transport_security.cc', 'src/core/tsi/ssl_transport_security.h', 'src/core/tsi/ssl_types.h', 'src/core/tsi/transport_security.cc', 'src/core/tsi/transport_security.h', 'src/core/tsi/transport_security_grpc.cc', 'src/core/tsi/transport_security_grpc.h', 'src/core/tsi/transport_security_interface.h', 'third_party/upb/upb/decode.c', 'third_party/upb/upb/decode.h', 'third_party/upb/upb/encode.c', 'third_party/upb/upb/encode.h', 'third_party/upb/upb/generated_util.h', 'third_party/upb/upb/msg.c', 'third_party/upb/upb/msg.h', 'third_party/upb/upb/port.c', 'third_party/upb/upb/port_def.inc', 'third_party/upb/upb/port_undef.inc', 'third_party/upb/upb/table.c', 'third_party/upb/upb/table.int.h', 'third_party/upb/upb/upb.c', 'third_party/upb/upb/upb.h' ss.private_header_files = 'src/core/ext/filters/client_channel/backend_metric.h', 'src/core/ext/filters/client_channel/backup_poller.h', 'src/core/ext/filters/client_channel/client_channel.h', 'src/core/ext/filters/client_channel/client_channel_channelz.h', 'src/core/ext/filters/client_channel/client_channel_factory.h', 'src/core/ext/filters/client_channel/connector.h', 'src/core/ext/filters/client_channel/global_subchannel_pool.h', 'src/core/ext/filters/client_channel/health/health_check_client.h', 'src/core/ext/filters/client_channel/http_connect_handshaker.h', 'src/core/ext/filters/client_channel/http_proxy.h', 'src/core/ext/filters/client_channel/lb_policy.h', 'src/core/ext/filters/client_channel/lb_policy/address_filtering.h', 'src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h', 'src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h', 'src/core/ext/filters/client_channel/lb_policy/subchannel_list.h', 'src/core/ext/filters/client_channel/lb_policy/xds/xds.h', 'src/core/ext/filters/client_channel/lb_policy_factory.h', 'src/core/ext/filters/client_channel/lb_policy_registry.h', 'src/core/ext/filters/client_channel/local_subchannel_pool.h', 'src/core/ext/filters/client_channel/parse_address.h', 'src/core/ext/filters/client_channel/proxy_mapper.h', 'src/core/ext/filters/client_channel/proxy_mapper_registry.h', 'src/core/ext/filters/client_channel/resolver.h', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h', 'src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h', 'src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h', 'src/core/ext/filters/client_channel/resolver_factory.h', 'src/core/ext/filters/client_channel/resolver_registry.h', 'src/core/ext/filters/client_channel/resolver_result_parsing.h', 'src/core/ext/filters/client_channel/resolving_lb_policy.h', 'src/core/ext/filters/client_channel/retry_throttle.h', 'src/core/ext/filters/client_channel/server_address.h', 'src/core/ext/filters/client_channel/service_config.h', 'src/core/ext/filters/client_channel/service_config_call_data.h', 'src/core/ext/filters/client_channel/service_config_parser.h', 'src/core/ext/filters/client_channel/subchannel.h', 'src/core/ext/filters/client_channel/subchannel_interface.h', 'src/core/ext/filters/client_channel/subchannel_pool_interface.h', 'src/core/ext/filters/client_channel/xds/xds_api.h', 'src/core/ext/filters/client_channel/xds/xds_bootstrap.h', 'src/core/ext/filters/client_channel/xds/xds_channel.h', 'src/core/ext/filters/client_channel/xds/xds_channel_args.h', 'src/core/ext/filters/client_channel/xds/xds_client.h', 'src/core/ext/filters/client_channel/xds/xds_client_stats.h', 'src/core/ext/filters/deadline/deadline_filter.h', 'src/core/ext/filters/http/client/http_client_filter.h', 'src/core/ext/filters/http/client_authority_filter.h', 'src/core/ext/filters/http/message_compress/message_compress_filter.h', 'src/core/ext/filters/http/message_compress/message_decompress_filter.h', 'src/core/ext/filters/http/server/http_server_filter.h', 'src/core/ext/filters/max_age/max_age_filter.h', 'src/core/ext/filters/message_size/message_size_filter.h', 'src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h', 'src/core/ext/filters/workarounds/workaround_utils.h', 'src/core/ext/transport/chttp2/alpn/alpn.h', 'src/core/ext/transport/chttp2/client/authority.h', 'src/core/ext/transport/chttp2/client/chttp2_connector.h', 'src/core/ext/transport/chttp2/server/chttp2_server.h', 'src/core/ext/transport/chttp2/transport/bin_decoder.h', 'src/core/ext/transport/chttp2/transport/bin_encoder.h', 'src/core/ext/transport/chttp2/transport/chttp2_transport.h', 'src/core/ext/transport/chttp2/transport/context_list.h', 'src/core/ext/transport/chttp2/transport/flow_control.h', 'src/core/ext/transport/chttp2/transport/frame.h', 'src/core/ext/transport/chttp2/transport/frame_data.h', 'src/core/ext/transport/chttp2/transport/frame_goaway.h', 'src/core/ext/transport/chttp2/transport/frame_ping.h', 'src/core/ext/transport/chttp2/transport/frame_rst_stream.h', 'src/core/ext/transport/chttp2/transport/frame_settings.h', 'src/core/ext/transport/chttp2/transport/frame_window_update.h', 'src/core/ext/transport/chttp2/transport/hpack_encoder.h', 'src/core/ext/transport/chttp2/transport/hpack_parser.h', 'src/core/ext/transport/chttp2/transport/hpack_table.h', 'src/core/ext/transport/chttp2/transport/http2_settings.h', 'src/core/ext/transport/chttp2/transport/huffsyms.h', 'src/core/ext/transport/chttp2/transport/incoming_metadata.h', 'src/core/ext/transport/chttp2/transport/internal.h', 'src/core/ext/transport/chttp2/transport/stream_map.h', 'src/core/ext/transport/chttp2/transport/varint.h', 'src/core/ext/transport/inproc/inproc_transport.h', 'src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h', 'src/core/ext/upb-generated/envoy/annotations/resource.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/cds.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/eds.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/lds.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/listener.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/rds.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/route.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h', 'src/core/ext/upb-generated/envoy/api/v2/srds.upb.h', 'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h', 'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h', 'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h', 'src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h', 'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h', 'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h', 'src/core/ext/upb-generated/envoy/type/http.upb.h', 'src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h', 'src/core/ext/upb-generated/envoy/type/matcher/string.upb.h', 'src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h', 'src/core/ext/upb-generated/envoy/type/percent.upb.h', 'src/core/ext/upb-generated/envoy/type/range.upb.h', 'src/core/ext/upb-generated/envoy/type/semantic_version.upb.h', 'src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h', 'src/core/ext/upb-generated/gogoproto/gogo.upb.h', 'src/core/ext/upb-generated/google/api/annotations.upb.h', 'src/core/ext/upb-generated/google/api/http.upb.h', 'src/core/ext/upb-generated/google/protobuf/any.upb.h', 'src/core/ext/upb-generated/google/protobuf/descriptor.upb.h', 'src/core/ext/upb-generated/google/protobuf/duration.upb.h', 'src/core/ext/upb-generated/google/protobuf/empty.upb.h', 'src/core/ext/upb-generated/google/protobuf/struct.upb.h', 'src/core/ext/upb-generated/google/protobuf/timestamp.upb.h', 'src/core/ext/upb-generated/google/protobuf/wrappers.upb.h', 'src/core/ext/upb-generated/google/rpc/status.upb.h', 'src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h', 'src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h', 'src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h', 'src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h', 'src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h', 'src/core/ext/upb-generated/udpa/annotations/migrate.upb.h', 'src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h', 'src/core/ext/upb-generated/udpa/annotations/status.upb.h', 'src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h', 'src/core/ext/upb-generated/validate/validate.upb.h', 'src/core/lib/avl/avl.h', 'src/core/lib/backoff/backoff.h', 'src/core/lib/channel/channel_args.h', 'src/core/lib/channel/channel_stack.h', 'src/core/lib/channel/channel_stack_builder.h', 'src/core/lib/channel/channel_trace.h', 'src/core/lib/channel/channelz.h', 'src/core/lib/channel/channelz_registry.h', 'src/core/lib/channel/connected_channel.h', 'src/core/lib/channel/context.h', 'src/core/lib/channel/handshaker.h', 'src/core/lib/channel/handshaker_factory.h', 'src/core/lib/channel/handshaker_registry.h', 'src/core/lib/channel/status_util.h', 'src/core/lib/compression/algorithm_metadata.h', 'src/core/lib/compression/compression_args.h', 'src/core/lib/compression/compression_internal.h', 'src/core/lib/compression/message_compress.h', 'src/core/lib/compression/stream_compression.h', 'src/core/lib/compression/stream_compression_gzip.h', 'src/core/lib/compression/stream_compression_identity.h', 'src/core/lib/debug/stats.h', 'src/core/lib/debug/stats_data.h', 'src/core/lib/debug/trace.h', 'src/core/lib/gpr/alloc.h', 'src/core/lib/gpr/arena.h', 'src/core/lib/gpr/env.h', 'src/core/lib/gpr/murmur_hash.h', 'src/core/lib/gpr/spinlock.h', 'src/core/lib/gpr/string.h', 'src/core/lib/gpr/string_windows.h', 'src/core/lib/gpr/time_precise.h', 'src/core/lib/gpr/tls.h', 'src/core/lib/gpr/tls_gcc.h', 'src/core/lib/gpr/tls_msvc.h', 'src/core/lib/gpr/tls_pthread.h', 'src/core/lib/gpr/tmpfile.h', 'src/core/lib/gpr/useful.h', 'src/core/lib/gprpp/arena.h', 'src/core/lib/gprpp/atomic.h', 'src/core/lib/gprpp/debug_location.h', 'src/core/lib/gprpp/fork.h', 'src/core/lib/gprpp/global_config.h', 'src/core/lib/gprpp/global_config_custom.h', 'src/core/lib/gprpp/global_config_env.h', 'src/core/lib/gprpp/global_config_generic.h', 'src/core/lib/gprpp/host_port.h', 'src/core/lib/gprpp/manual_constructor.h', 'src/core/lib/gprpp/map.h', 'src/core/lib/gprpp/memory.h', 'src/core/lib/gprpp/mpscq.h', 'src/core/lib/gprpp/orphanable.h', 'src/core/lib/gprpp/ref_counted.h', 'src/core/lib/gprpp/ref_counted_ptr.h', 'src/core/lib/gprpp/sync.h', 'src/core/lib/gprpp/thd.h', 'src/core/lib/http/format_request.h', 'src/core/lib/http/httpcli.h', 'src/core/lib/http/parser.h', 'src/core/lib/iomgr/block_annotate.h', 'src/core/lib/iomgr/buffer_list.h', 'src/core/lib/iomgr/call_combiner.h', 'src/core/lib/iomgr/cfstream_handle.h', 'src/core/lib/iomgr/closure.h', 'src/core/lib/iomgr/combiner.h', 'src/core/lib/iomgr/dynamic_annotations.h', 'src/core/lib/iomgr/endpoint.h', 'src/core/lib/iomgr/endpoint_cfstream.h', 'src/core/lib/iomgr/endpoint_pair.h', 'src/core/lib/iomgr/error.h', 'src/core/lib/iomgr/error_cfstream.h', 'src/core/lib/iomgr/error_internal.h', 'src/core/lib/iomgr/ev_apple.h', 'src/core/lib/iomgr/ev_epoll1_linux.h', 'src/core/lib/iomgr/ev_epollex_linux.h', 'src/core/lib/iomgr/ev_poll_posix.h', 'src/core/lib/iomgr/ev_posix.h', 'src/core/lib/iomgr/exec_ctx.h', 'src/core/lib/iomgr/executor.h', 'src/core/lib/iomgr/executor/mpmcqueue.h', 'src/core/lib/iomgr/executor/threadpool.h', 'src/core/lib/iomgr/gethostname.h', 'src/core/lib/iomgr/grpc_if_nametoindex.h', 'src/core/lib/iomgr/internal_errqueue.h', 'src/core/lib/iomgr/iocp_windows.h', 'src/core/lib/iomgr/iomgr.h', 'src/core/lib/iomgr/iomgr_custom.h', 'src/core/lib/iomgr/iomgr_internal.h', 'src/core/lib/iomgr/iomgr_posix.h', 'src/core/lib/iomgr/is_epollexclusive_available.h', 'src/core/lib/iomgr/load_file.h', 'src/core/lib/iomgr/lockfree_event.h', 'src/core/lib/iomgr/nameser.h', 'src/core/lib/iomgr/poller/eventmanager_libuv.h', 'src/core/lib/iomgr/polling_entity.h', 'src/core/lib/iomgr/pollset.h', 'src/core/lib/iomgr/pollset_custom.h', 'src/core/lib/iomgr/pollset_set.h', 'src/core/lib/iomgr/pollset_set_custom.h', 'src/core/lib/iomgr/pollset_set_windows.h', 'src/core/lib/iomgr/pollset_uv.h', 'src/core/lib/iomgr/pollset_windows.h', 'src/core/lib/iomgr/port.h', 'src/core/lib/iomgr/python_util.h', 'src/core/lib/iomgr/resolve_address.h', 'src/core/lib/iomgr/resolve_address_custom.h', 'src/core/lib/iomgr/resource_quota.h', 'src/core/lib/iomgr/sockaddr.h', 'src/core/lib/iomgr/sockaddr_custom.h', 'src/core/lib/iomgr/sockaddr_posix.h', 'src/core/lib/iomgr/sockaddr_utils.h', 'src/core/lib/iomgr/sockaddr_windows.h', 'src/core/lib/iomgr/socket_factory_posix.h', 'src/core/lib/iomgr/socket_mutator.h', 'src/core/lib/iomgr/socket_utils.h', 'src/core/lib/iomgr/socket_utils_posix.h', 'src/core/lib/iomgr/socket_windows.h', 'src/core/lib/iomgr/sys_epoll_wrapper.h', 'src/core/lib/iomgr/tcp_client.h', 'src/core/lib/iomgr/tcp_client_posix.h', 'src/core/lib/iomgr/tcp_custom.h', 'src/core/lib/iomgr/tcp_posix.h', 'src/core/lib/iomgr/tcp_server.h', 'src/core/lib/iomgr/tcp_server_utils_posix.h', 'src/core/lib/iomgr/tcp_windows.h', 'src/core/lib/iomgr/time_averaged_stats.h', 'src/core/lib/iomgr/timer.h', 'src/core/lib/iomgr/timer_custom.h', 'src/core/lib/iomgr/timer_generic.h', 'src/core/lib/iomgr/timer_heap.h', 'src/core/lib/iomgr/timer_manager.h', 'src/core/lib/iomgr/udp_server.h', 'src/core/lib/iomgr/unix_sockets_posix.h', 'src/core/lib/iomgr/wakeup_fd_pipe.h', 'src/core/lib/iomgr/wakeup_fd_posix.h', 'src/core/lib/iomgr/work_serializer.h', 'src/core/lib/json/json.h', 'src/core/lib/profiling/timers.h', 'src/core/lib/security/context/security_context.h', 'src/core/lib/security/credentials/alts/alts_credentials.h', 'src/core/lib/security/credentials/alts/check_gcp_environment.h', 'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h', 'src/core/lib/security/credentials/composite/composite_credentials.h', 'src/core/lib/security/credentials/credentials.h', 'src/core/lib/security/credentials/fake/fake_credentials.h', 'src/core/lib/security/credentials/google_default/google_default_credentials.h', 'src/core/lib/security/credentials/iam/iam_credentials.h', 'src/core/lib/security/credentials/jwt/json_token.h', 'src/core/lib/security/credentials/jwt/jwt_credentials.h', 'src/core/lib/security/credentials/jwt/jwt_verifier.h', 'src/core/lib/security/credentials/local/local_credentials.h', 'src/core/lib/security/credentials/oauth2/oauth2_credentials.h', 'src/core/lib/security/credentials/plugin/plugin_credentials.h', 'src/core/lib/security/credentials/ssl/ssl_credentials.h', 'src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h', 'src/core/lib/security/credentials/tls/tls_credentials.h', 'src/core/lib/security/security_connector/alts/alts_security_connector.h', 'src/core/lib/security/security_connector/fake/fake_security_connector.h', 'src/core/lib/security/security_connector/load_system_roots.h', 'src/core/lib/security/security_connector/load_system_roots_linux.h', 'src/core/lib/security/security_connector/local/local_security_connector.h', 'src/core/lib/security/security_connector/security_connector.h', 'src/core/lib/security/security_connector/ssl/ssl_security_connector.h', 'src/core/lib/security/security_connector/ssl_utils.h', 'src/core/lib/security/security_connector/ssl_utils_config.h', 'src/core/lib/security/security_connector/tls/tls_security_connector.h', 'src/core/lib/security/transport/auth_filters.h', 'src/core/lib/security/transport/secure_endpoint.h', 'src/core/lib/security/transport/security_handshaker.h', 'src/core/lib/security/transport/target_authority_table.h', 'src/core/lib/security/transport/tsi_error.h', 'src/core/lib/security/util/json_util.h', 'src/core/lib/slice/b64.h', 'src/core/lib/slice/percent_encoding.h', 'src/core/lib/slice/slice_hash_table.h', 'src/core/lib/slice/slice_internal.h', 'src/core/lib/slice/slice_string_helpers.h', 'src/core/lib/slice/slice_utils.h', 'src/core/lib/slice/slice_weak_hash_table.h', 'src/core/lib/surface/api_trace.h', 'src/core/lib/surface/call.h', 'src/core/lib/surface/call_test_only.h', 'src/core/lib/surface/channel.h', 'src/core/lib/surface/channel_init.h', 'src/core/lib/surface/channel_stack_type.h', 'src/core/lib/surface/completion_queue.h', 'src/core/lib/surface/completion_queue_factory.h', 'src/core/lib/surface/event_string.h', 'src/core/lib/surface/init.h', 'src/core/lib/surface/lame_client.h', 'src/core/lib/surface/server.h', 'src/core/lib/surface/validate_metadata.h', 'src/core/lib/transport/bdp_estimator.h', 'src/core/lib/transport/byte_stream.h', 'src/core/lib/transport/connectivity_state.h', 'src/core/lib/transport/error_utils.h', 'src/core/lib/transport/http2_errors.h', 'src/core/lib/transport/metadata.h', 'src/core/lib/transport/metadata_batch.h', 'src/core/lib/transport/pid_controller.h', 'src/core/lib/transport/static_metadata.h', 'src/core/lib/transport/status_conversion.h', 'src/core/lib/transport/status_metadata.h', 'src/core/lib/transport/timeout_encoding.h', 'src/core/lib/transport/transport.h', 'src/core/lib/transport/transport_impl.h', 'src/core/lib/uri/uri_parser.h', 'src/core/tsi/alts/crypt/gsec.h', 'src/core/tsi/alts/frame_protector/alts_counter.h', 'src/core/tsi/alts/frame_protector/alts_crypter.h', 'src/core/tsi/alts/frame_protector/alts_frame_protector.h', 'src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h', 'src/core/tsi/alts/frame_protector/frame_handler.h', 'src/core/tsi/alts/handshaker/alts_handshaker_client.h', 'src/core/tsi/alts/handshaker/alts_shared_resource.h', 'src/core/tsi/alts/handshaker/alts_tsi_handshaker.h', 'src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h', 'src/core/tsi/alts/handshaker/alts_tsi_utils.h', 'src/core/tsi/alts/handshaker/transport_security_common_api.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h', 'src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h', 'src/core/tsi/fake_transport_security.h', 'src/core/tsi/local_transport_security.h', 'src/core/tsi/ssl/session_cache/ssl_session.h', 'src/core/tsi/ssl/session_cache/ssl_session_cache.h', 'src/core/tsi/ssl_transport_security.h', 'src/core/tsi/ssl_types.h', 'src/core/tsi/transport_security.h', 'src/core/tsi/transport_security_grpc.h', 'src/core/tsi/transport_security_interface.h', 'third_party/upb/upb/decode.h', 'third_party/upb/upb/encode.h', 'third_party/upb/upb/generated_util.h', 'third_party/upb/upb/msg.h', 'third_party/upb/upb/port_def.inc', 'third_party/upb/upb/port_undef.inc', 'third_party/upb/upb/table.int.h', 'third_party/upb/upb/upb.h' end # CFStream is now default. Leaving this subspec only for compatibility purpose. s.subspec 'CFStream-Implementation' do |ss| ss.dependency "#{s.name}/Implementation", version end s.subspec 'Cronet-Interface' do |ss| ss.header_mappings_dir = 'include/grpc' ss.source_files = 'include/grpc/grpc_cronet.h' end s.subspec 'Cronet-Implementation' do |ss| ss.header_mappings_dir = '.' ss.dependency "#{s.name}/Interface", version ss.dependency "#{s.name}/Implementation", version ss.dependency "#{s.name}/Cronet-Interface", version ss.source_files = 'src/core/ext/transport/cronet/client/secure/cronet_channel_create.cc', 'src/core/ext/transport/cronet/client/secure/cronet_channel_create.h', 'src/core/ext/transport/cronet/transport/cronet_transport.cc', 'src/core/ext/transport/cronet/transport/cronet_transport.h', 'third_party/objective_c/Cronet/bidirectional_stream_c.h' end s.subspec 'Tests' do |ss| ss.header_mappings_dir = '.' ss.dependency "#{s.name}/Interface", version ss.dependency "#{s.name}/Implementation", version ss.source_files = 'test/core/end2end/cq_verifier.cc', 'test/core/end2end/cq_verifier.h', 'test/core/end2end/data/client_certs.cc', 'test/core/end2end/data/server1_cert.cc', 'test/core/end2end/data/server1_key.cc', 'test/core/end2end/data/ssl_test_data.h', 'test/core/end2end/data/test_root_cert.cc', 'test/core/end2end/end2end_test_utils.cc', 'test/core/end2end/end2end_tests.cc', 'test/core/end2end/end2end_tests.h', 'test/core/end2end/fixtures/http_proxy_fixture.cc', 'test/core/end2end/fixtures/http_proxy_fixture.h', 'test/core/end2end/fixtures/local_util.cc', 'test/core/end2end/fixtures/local_util.h', 'test/core/end2end/fixtures/proxy.cc', 'test/core/end2end/fixtures/proxy.h', 'test/core/end2end/tests/authority_not_supported.cc', 'test/core/end2end/tests/bad_hostname.cc', 'test/core/end2end/tests/bad_ping.cc', 'test/core/end2end/tests/binary_metadata.cc', 'test/core/end2end/tests/call_creds.cc', 'test/core/end2end/tests/call_host_override.cc', 'test/core/end2end/tests/cancel_after_accept.cc', 'test/core/end2end/tests/cancel_after_client_done.cc', 'test/core/end2end/tests/cancel_after_invoke.cc', 'test/core/end2end/tests/cancel_after_round_trip.cc', 'test/core/end2end/tests/cancel_before_invoke.cc', 'test/core/end2end/tests/cancel_in_a_vacuum.cc', 'test/core/end2end/tests/cancel_test_helpers.h', 'test/core/end2end/tests/cancel_with_status.cc', 'test/core/end2end/tests/channelz.cc', 'test/core/end2end/tests/client_streaming.cc', 'test/core/end2end/tests/compressed_payload.cc', 'test/core/end2end/tests/connectivity.cc', 'test/core/end2end/tests/default_host.cc', 'test/core/end2end/tests/disappearing_server.cc', 'test/core/end2end/tests/empty_batch.cc', 'test/core/end2end/tests/filter_call_init_fails.cc', 'test/core/end2end/tests/filter_causes_close.cc', 'test/core/end2end/tests/filter_context.cc', 'test/core/end2end/tests/filter_latency.cc', 'test/core/end2end/tests/filter_status_code.cc', 'test/core/end2end/tests/graceful_server_shutdown.cc', 'test/core/end2end/tests/high_initial_seqno.cc', 'test/core/end2end/tests/hpack_size.cc', 'test/core/end2end/tests/idempotent_request.cc', 'test/core/end2end/tests/invoke_large_request.cc', 'test/core/end2end/tests/keepalive_timeout.cc', 'test/core/end2end/tests/large_metadata.cc', 'test/core/end2end/tests/max_concurrent_streams.cc', 'test/core/end2end/tests/max_connection_age.cc', 'test/core/end2end/tests/max_connection_idle.cc', 'test/core/end2end/tests/max_message_length.cc', 'test/core/end2end/tests/negative_deadline.cc', 'test/core/end2end/tests/no_error_on_hotpath.cc', 'test/core/end2end/tests/no_logging.cc', 'test/core/end2end/tests/no_op.cc', 'test/core/end2end/tests/payload.cc', 'test/core/end2end/tests/ping.cc', 'test/core/end2end/tests/ping_pong_streaming.cc', 'test/core/end2end/tests/proxy_auth.cc', 'test/core/end2end/tests/registered_call.cc', 'test/core/end2end/tests/request_with_flags.cc', 'test/core/end2end/tests/request_with_payload.cc', 'test/core/end2end/tests/resource_quota_server.cc', 'test/core/end2end/tests/retry.cc', 'test/core/end2end/tests/retry_cancellation.cc', 'test/core/end2end/tests/retry_disabled.cc', 'test/core/end2end/tests/retry_exceeds_buffer_size_in_initial_batch.cc', 'test/core/end2end/tests/retry_exceeds_buffer_size_in_subsequent_batch.cc', 'test/core/end2end/tests/retry_non_retriable_status.cc', 'test/core/end2end/tests/retry_non_retriable_status_before_recv_trailing_metadata_started.cc', 'test/core/end2end/tests/retry_recv_initial_metadata.cc', 'test/core/end2end/tests/retry_recv_message.cc', 'test/core/end2end/tests/retry_server_pushback_delay.cc', 'test/core/end2end/tests/retry_server_pushback_disabled.cc', 'test/core/end2end/tests/retry_streaming.cc', 'test/core/end2end/tests/retry_streaming_after_commit.cc', 'test/core/end2end/tests/retry_streaming_succeeds_before_replay_finished.cc', 'test/core/end2end/tests/retry_throttled.cc', 'test/core/end2end/tests/retry_too_many_attempts.cc', 'test/core/end2end/tests/server_finishes_request.cc', 'test/core/end2end/tests/shutdown_finishes_calls.cc', 'test/core/end2end/tests/shutdown_finishes_tags.cc', 'test/core/end2end/tests/simple_cacheable_request.cc', 'test/core/end2end/tests/simple_delayed_request.cc', 'test/core/end2end/tests/simple_metadata.cc', 'test/core/end2end/tests/simple_request.cc', 'test/core/end2end/tests/stream_compression_compressed_payload.cc', 'test/core/end2end/tests/stream_compression_payload.cc', 'test/core/end2end/tests/stream_compression_ping_pong_streaming.cc', 'test/core/end2end/tests/streaming_error_response.cc', 'test/core/end2end/tests/trailing_metadata.cc', 'test/core/end2end/tests/workaround_cronet_compression.cc', 'test/core/end2end/tests/write_buffering.cc', 'test/core/end2end/tests/write_buffering_at_end.cc', 'test/core/util/cmdline.cc', 'test/core/util/cmdline.h', 'test/core/util/debugger_macros.cc', 'test/core/util/debugger_macros.h', 'test/core/util/fuzzer_util.cc', 'test/core/util/fuzzer_util.h', 'test/core/util/grpc_profiler.cc', 'test/core/util/grpc_profiler.h', 'test/core/util/histogram.cc', 'test/core/util/histogram.h', 'test/core/util/memory_counters.cc', 'test/core/util/memory_counters.h', 'test/core/util/mock_endpoint.cc', 'test/core/util/mock_endpoint.h', 'test/core/util/parse_hexstring.cc', 'test/core/util/parse_hexstring.h', 'test/core/util/passthru_endpoint.cc', 'test/core/util/passthru_endpoint.h', 'test/core/util/port.cc', 'test/core/util/port.h', 'test/core/util/port_isolated_runtime_environment.cc', 'test/core/util/port_server_client.cc', 'test/core/util/port_server_client.h', 'test/core/util/reconnect_server.cc', 'test/core/util/reconnect_server.h', 'test/core/util/slice_splitter.cc', 'test/core/util/slice_splitter.h', 'test/core/util/subprocess.h', 'test/core/util/subprocess_windows.cc', 'test/core/util/test_config.cc', 'test/core/util/test_config.h', 'test/core/util/test_tcp_server.cc', 'test/core/util/test_tcp_server.h', 'test/core/util/tracer_util.cc', 'test/core/util/tracer_util.h', 'test/core/util/trickle_endpoint.cc', 'test/core/util/trickle_endpoint.h' end # TODO (mxyan): Instead of this hack, add include path "third_party" to C core's include path? s.prepare_command = <<-END_OF_COMMAND sed -E -i '' 's;#include ;#if COCOAPODS==1\\\n #include \\\n#else\\\n #include \\\n#endif;g' $(find src/core -type f \\( -path '*.h' -or -path '*.cc' \\) -print | xargs grep -H -c '#include 'grpc-packages@google.com' } s.source = { :git => 'https://github.com/grpc/grpc.git', :tag => "v#{version}", } s.ios.deployment_target = '7.0' s.osx.deployment_target = '10.9' s.tvos.deployment_target = '10.0' s.watchos.deployment_target = '4.0' name = 'ProtoRPC' s.module_name = name s.header_dir = name s.default_subspec = 'Main', 'Legacy', 'Legacy-Header' s.subspec 'Legacy-Header' do |ss| ss.header_mappings_dir = "src/objective-c/ProtoRPC" ss.public_header_files = "src/objective-c/ProtoRPC/ProtoRPCLegacy.h" ss.source_files = "src/objective-c/ProtoRPC/ProtoRPCLegacy.h" end s.subspec 'Main' do |ss| ss.header_mappings_dir = "src/objective-c/ProtoRPC" ss.dependency "#{s.name}/Legacy-Header", version ss.dependency 'gRPC/Interface', version ss.dependency 'Protobuf', '~> 3.0' ss.source_files = "src/objective-c/ProtoRPC/ProtoMethod.{h,m}", "src/objective-c/ProtoRPC/ProtoRPC.{h,m}", "src/objective-c/ProtoRPC/ProtoService.{h,m}" end s.subspec 'Legacy' do |ss| ss.header_mappings_dir = "src/objective-c/ProtoRPC" ss.dependency "#{s.name}/Main", version ss.dependency "#{s.name}/Legacy-Header", version ss.dependency 'gRPC/GRPCCore', version ss.dependency 'gRPC-RxLibrary', version ss.dependency 'Protobuf', '~> 3.0' ss.source_files = "src/objective-c/ProtoRPC/ProtoRPCLegacy.m", "src/objective-c/ProtoRPC/ProtoServiceLegacy.m" end # CFStream is now default. Leaving this subspec only for compatibility purpose. s.subspec 'CFStream' do |ss| ss.dependency "#{s.name}/Legacy", version end s.pod_target_xcconfig = { # This is needed by all pods that depend on Protobuf: 'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1', # This is needed by all pods that depend on gRPC-RxLibrary: 'CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES' => 'YES', 'CLANG_WARN_STRICT_PROTOTYPES' => 'NO', } end grpc-1.30.2/gRPC-RxLibrary.podspec000066400000000000000000000042601370425124100166170ustar00rootroot00000000000000# This file has been automatically generated from a template file. # Please make modifications to # `templates/gRPC-RxLibrary.podspec.template` instead. This file can be # regenerated from the template by running # `tools/buildgen/generate_projects.sh`. # Copyright 2015 gRPC 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 # # 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. Pod::Spec.new do |s| s.name = 'gRPC-RxLibrary' version = '1.30.2' s.version = version s.summary = 'Reactive Extensions library for iOS/OSX.' s.homepage = 'https://grpc.io' s.license = 'Apache License, Version 2.0' s.authors = { 'The gRPC contributors' => 'grpc-packages@google.com' } s.source = { :git => 'https://github.com/grpc/grpc.git', :tag => "v#{version}", } s.ios.deployment_target = '7.0' s.osx.deployment_target = '10.9' s.tvos.deployment_target = '10.0' s.watchos.deployment_target = '4.0' name = 'RxLibrary' s.module_name = name s.header_dir = name s.default_subspec = 'Interface', 'Implementation' src_dir = 'src/objective-c/RxLibrary' s.subspec 'Interface' do |ss| ss.header_mappings_dir = "#{src_dir}" ss.source_files = "#{src_dir}/*.h" ss.public_header_files = "#{src_dir}/*.h" end s.subspec 'Implementation' do |ss| ss.header_mappings_dir = "#{src_dir}" ss.source_files = "#{src_dir}/*.m", "#{src_dir}/**/*.{h,m}" ss.private_header_files = "#{src_dir}/**/*.h" ss.dependency "#{s.name}/Interface" end src_dir = 'src/objective-c/RxLibrary' s.source_files = "#{src_dir}/*.{h,m}", "#{src_dir}/**/*.{h,m}" s.private_header_files = "#{src_dir}/private/*.h" s.header_mappings_dir = "#{src_dir}" s.pod_target_xcconfig = { 'CLANG_WARN_STRICT_PROTOTYPES' => 'NO', } end grpc-1.30.2/gRPC.podspec000066400000000000000000000200701370425124100147000ustar00rootroot00000000000000# This file has been automatically generated from a template file. # Please make modifications to `templates/gRPC.podspec.template` # instead. This file can be regenerated from the template by running # `tools/buildgen/generate_projects.sh`. # Copyright 2015 gRPC 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 # # 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. Pod::Spec.new do |s| s.name = 'gRPC' version = '1.30.2' s.version = version s.summary = 'gRPC client library for iOS/OSX' s.homepage = 'https://grpc.io' s.license = 'Apache License, Version 2.0' s.authors = { 'The gRPC contributors' => 'grpc-packages@google.com' } s.source = { :git => 'https://github.com/grpc/grpc.git', :tag => "v#{version}", } name = 'GRPCClient' s.module_name = name s.header_dir = name s.default_subspec = 'Interface', 'GRPCCore', 'Interface-Legacy' s.pod_target_xcconfig = { # This is needed by all pods that depend on gRPC-RxLibrary: 'CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES' => 'YES', 'CLANG_WARN_STRICT_PROTOTYPES' => 'NO', } s.ios.deployment_target = '7.0' s.osx.deployment_target = '10.9' s.tvos.deployment_target = '10.0' s.watchos.deployment_target = '4.0' s.subspec 'Interface-Legacy' do |ss| ss.header_mappings_dir = 'src/objective-c/GRPCClient' ss.public_header_files = "src/objective-c/GRPCClient/GRPCCall+ChannelArg.h", "src/objective-c/GRPCClient/GRPCCall+ChannelCredentials.h", "src/objective-c/GRPCClient/GRPCCall+Cronet.h", "src/objective-c/GRPCClient/GRPCCall+OAuth2.h", "src/objective-c/GRPCClient/GRPCCall+Tests.h", "src/objective-c/GRPCClient/GRPCCallLegacy.h", "src/objective-c/GRPCClient/GRPCTypes.h" ss.source_files = "src/objective-c/GRPCClient/GRPCCall+ChannelArg.h", "src/objective-c/GRPCClient/GRPCCall+ChannelCredentials.h", "src/objective-c/GRPCClient/GRPCCall+Cronet.h", "src/objective-c/GRPCClient/GRPCCall+OAuth2.h", "src/objective-c/GRPCClient/GRPCCall+Tests.h", "src/objective-c/GRPCClient/GRPCCallLegacy.h", "src/objective-c/GRPCClient/GRPCTypes.h", "src/objective-c/GRPCClient/GRPCTypes.m" ss.dependency "gRPC-RxLibrary/Interface", version ss.ios.deployment_target = '7.0' ss.osx.deployment_target = '10.9' ss.tvos.deployment_target = '10.0' ss.watchos.deployment_target = '4.0' end s.subspec 'Interface' do |ss| ss.header_mappings_dir = 'src/objective-c/GRPCClient' ss.public_header_files = 'src/objective-c/GRPCClient/GRPCCall.h', 'src/objective-c/GRPCClient/GRPCCall+Interceptor.h', 'src/objective-c/GRPCClient/GRPCCallOptions.h', 'src/objective-c/GRPCClient/GRPCInterceptor.h', 'src/objective-c/GRPCClient/GRPCTransport.h', 'src/objective-c/GRPCClient/GRPCDispatchable.h', 'src/objective-c/GRPCClient/version.h' ss.source_files = 'src/objective-c/GRPCClient/GRPCCall.h', 'src/objective-c/GRPCClient/GRPCCall.m', 'src/objective-c/GRPCClient/GRPCCall+Interceptor.h', 'src/objective-c/GRPCClient/GRPCCall+Interceptor.m', 'src/objective-c/GRPCClient/GRPCCallOptions.h', 'src/objective-c/GRPCClient/GRPCCallOptions.m', 'src/objective-c/GRPCClient/GRPCDispatchable.h', 'src/objective-c/GRPCClient/GRPCInterceptor.h', 'src/objective-c/GRPCClient/GRPCInterceptor.m', 'src/objective-c/GRPCClient/GRPCTransport.h', 'src/objective-c/GRPCClient/GRPCTransport.m', 'src/objective-c/GRPCClient/internal/*.h', 'src/objective-c/GRPCClient/private/GRPCTransport+Private.h', 'src/objective-c/GRPCClient/private/GRPCTransport+Private.m', 'src/objective-c/GRPCClient/version.h' ss.dependency "#{s.name}/Interface-Legacy", version ss.ios.deployment_target = '7.0' ss.osx.deployment_target = '10.9' ss.tvos.deployment_target = '10.0' ss.watchos.deployment_target = '4.0' end s.subspec 'GRPCCore' do |ss| ss.header_mappings_dir = 'src/objective-c/GRPCClient' ss.public_header_files = 'src/objective-c/GRPCClient/GRPCCall+ChannelCredentials.h', 'src/objective-c/GRPCClient/GRPCCall+Cronet.h', 'src/objective-c/GRPCClient/GRPCCall+OAuth2.h', 'src/objective-c/GRPCClient/GRPCCall+Tests.h', 'src/objective-c/GRPCClient/GRPCCall+ChannelArg.h' ss.private_header_files = 'src/objective-c/GRPCClient/private/GRPCCore/*.h' ss.source_files = 'src/objective-c/GRPCClient/private/GRPCCore/*.{h,m}', 'src/objective-c/GRPCClient/GRPCCall+ChannelArg.h', 'src/objective-c/GRPCClient/GRPCCall+ChannelArg.m', 'src/objective-c/GRPCClient/GRPCCall+ChannelCredentials.h', 'src/objective-c/GRPCClient/GRPCCall+ChannelCredentials.m', 'src/objective-c/GRPCClient/GRPCCall+Cronet.h', 'src/objective-c/GRPCClient/GRPCCall+Cronet.m', 'src/objective-c/GRPCClient/GRPCCall+OAuth2.h', 'src/objective-c/GRPCClient/GRPCCall+OAuth2.m', 'src/objective-c/GRPCClient/GRPCCall+Tests.h', 'src/objective-c/GRPCClient/GRPCCall+Tests.m', 'src/objective-c/GRPCClient/GRPCCallLegacy.m' # Certificates, to be able to establish TLS connections: ss.resource_bundles = { 'gRPCCertificates' => ['etc/roots.pem'] } ss.dependency "#{s.name}/Interface-Legacy", version ss.dependency "#{s.name}/Interface", version ss.dependency 'gRPC-Core', version ss.dependency 'gRPC-RxLibrary', version ss.ios.deployment_target = '7.0' ss.osx.deployment_target = '10.9' ss.tvos.deployment_target = '10.0' ss.watchos.deployment_target = '4.0' end s.subspec 'GRPCCoreCronet' do |ss| ss.header_mappings_dir = 'src/objective-c/GRPCClient' ss.source_files = 'src/objective-c/GRPCClient/GRPCCall+Cronet.h', 'src/objective-c/GRPCClient/GRPCCall+Cronet.m', 'src/objective-c/GRPCClient/private/GRPCCore/GRPCCoreCronet/*.{h,m}' ss.dependency "#{s.name}/GRPCCore", version ss.dependency 'gRPC-Core/Cronet-Implementation', version ss.dependency 'CronetFramework' ss.ios.deployment_target = '8.0' end # CFStream is now default. Leaving this subspec only for compatibility purpose. s.subspec 'CFStream' do |ss| ss.dependency "#{s.name}/GRPCCore", version ss.ios.deployment_target = '7.0' ss.osx.deployment_target = '10.9' ss.tvos.deployment_target = '10.0' ss.watchos.deployment_target = '4.0' end s.subspec 'InternalTesting' do |ss| ss.dependency "#{s.name}/GRPCCore", version ss.public_header_files = 'src/objective-c/GRPCClient/internal_testing/*.h' ss.source_files = 'src/objective-c/GRPCClient/internal_testing/*.{h,m}' ss.header_mappings_dir = 'src/objective-c/GRPCClient' ss.ios.deployment_target = '7.0' ss.osx.deployment_target = '10.9' ss.tvos.deployment_target = '10.0' ss.watchos.deployment_target = '4.0' end end grpc-1.30.2/grpc.bzl000066400000000000000000000072771370425124100142100ustar00rootroot00000000000000# Copyright 2015 gRPC 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 # # 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. """ Bazel macros to declare gRPC libraries automatically generated from proto files. This file declares two macros: - objc_proto_library - objc_grpc_library """ def _lower_underscore_to_upper_camel(str): humps = [] for hump in str.split("_"): humps += [hump[0].upper() + hump[1:]] return "".join(humps) def _file_to_upper_camel(src): elements = src.rpartition("/") upper_camel = _lower_underscore_to_upper_camel(elements[-1]) return "".join(elements[:-1] + [upper_camel]) def _file_with_extension(src, ext): elements = src.rpartition("/") basename = elements[-1].partition(".")[0] return "".join(elements[:-1] + [basename, ext]) def _protoc_invocation(srcs, flags): """Returns a command line to invoke protoc from a genrule, on the given sources, using the given flags. """ protoc_command = "$(location //external:protoc) -I . " srcs_params = "" for src in srcs: srcs_params += " $(location %s)" % (src) return protoc_command + flags + srcs_params def objc_proto_library(name, srcs, visibility = None): """Declares an objc_library for the code generated by protoc from the given proto sources. This generated code doesn't include proto services. """ h_files = [] m_files = [] for src in srcs: src = _file_to_upper_camel(src) h_files += [_file_with_extension(src, ".pbobjc.h")] m_files += [_file_with_extension(src, ".pbobjc.m")] protoc_flags = "--objc_out=$(GENDIR)" native.genrule( name = name + "_codegen", srcs = srcs + ["//external:protoc"], outs = h_files + m_files, cmd = _protoc_invocation(srcs, protoc_flags), ) native.objc_library( name = name, hdrs = h_files, includes = ["."], non_arc_srcs = m_files, deps = ["//external:protobuf_objc"], visibility = visibility, ) def objc_grpc_library(name, services, other_messages, visibility = None): """Declares an objc_library for the code generated by gRPC and protoc from the given proto sources (services and other_messages). The generated code doesn't include proto services of the files passed as other_messages. """ objc_proto_library(name + "_messages", services + other_messages) h_files = [] m_files = [] for src in services: src = _file_to_upper_camel(src) h_files += [_file_with_extension(src, ".pbrpc.h")] m_files += [_file_with_extension(src, ".pbrpc.m")] protoc_flags = ("--grpc_out=$(GENDIR) --plugin=" + "protoc-gen-grpc=$(location //external:grpc_protoc_plugin_objc)") native.genrule( name = name + "_codegen", srcs = services + [ "//external:grpc_protoc_plugin_objc", "//external:protoc", ], outs = h_files + m_files, cmd = _protoc_invocation(services, protoc_flags), ) native.objc_library( name = name, hdrs = h_files, includes = ["."], srcs = m_files, deps = [ ":" + name + "_messages", "//external:proto_objc_rpc", ], visibility = visibility, ) grpc-1.30.2/grpc.def000066400000000000000000000206321370425124100141450ustar00rootroot00000000000000EXPORTS grpc_compression_algorithm_is_message grpc_compression_algorithm_is_stream grpc_compression_algorithm_parse grpc_compression_algorithm_name grpc_compression_algorithm_for_level grpc_compression_options_init grpc_compression_options_enable_algorithm grpc_compression_options_disable_algorithm grpc_compression_options_is_algorithm_enabled grpc_metadata_array_init grpc_metadata_array_destroy grpc_call_details_init grpc_call_details_destroy grpc_register_plugin grpc_init grpc_shutdown grpc_is_initialized grpc_shutdown_blocking grpc_version_string grpc_g_stands_for grpc_completion_queue_factory_lookup grpc_completion_queue_create_for_next grpc_completion_queue_create_for_pluck grpc_completion_queue_create_for_callback grpc_completion_queue_create grpc_completion_queue_next grpc_completion_queue_pluck grpc_completion_queue_shutdown grpc_completion_queue_destroy grpc_completion_queue_thread_local_cache_init grpc_completion_queue_thread_local_cache_flush grpc_channel_check_connectivity_state grpc_channel_num_external_connectivity_watchers grpc_channel_watch_connectivity_state grpc_channel_support_connectivity_watcher grpc_channel_create_call grpc_channel_ping grpc_channel_register_call grpc_channel_create_registered_call grpc_call_arena_alloc grpc_call_start_batch grpc_call_get_peer grpc_census_call_set_context grpc_census_call_get_context grpc_channel_get_target grpc_channel_get_info grpc_channel_reset_connect_backoff grpc_insecure_channel_create grpc_lame_client_channel_create grpc_channel_destroy grpc_call_cancel grpc_call_cancel_with_status grpc_call_ref grpc_call_unref grpc_server_request_call grpc_server_register_method grpc_server_request_registered_call grpc_server_create grpc_server_register_completion_queue grpc_server_add_insecure_http2_port grpc_server_start grpc_server_shutdown_and_notify grpc_server_cancel_all_calls grpc_server_destroy grpc_tracer_set_enabled grpc_header_key_is_legal grpc_header_nonbin_value_is_legal grpc_is_binary_header grpc_call_error_to_string grpc_resource_quota_create grpc_resource_quota_ref grpc_resource_quota_unref grpc_resource_quota_resize grpc_resource_quota_set_max_threads grpc_resource_quota_arg_vtable grpc_channelz_get_top_channels grpc_channelz_get_servers grpc_channelz_get_server grpc_channelz_get_server_sockets grpc_channelz_get_channel grpc_channelz_get_subchannel grpc_channelz_get_socket grpc_insecure_channel_create_from_fd grpc_server_add_insecure_channel_from_fd grpc_auth_property_iterator_next grpc_auth_context_property_iterator grpc_auth_context_peer_identity grpc_auth_context_find_properties_by_name grpc_auth_context_peer_identity_property_name grpc_auth_context_peer_is_authenticated grpc_call_auth_context grpc_auth_context_release grpc_auth_context_add_property grpc_auth_context_add_cstring_property grpc_auth_context_set_peer_identity_property_name grpc_ssl_session_cache_create_lru grpc_ssl_session_cache_destroy grpc_ssl_session_cache_create_channel_arg grpc_channel_credentials_release grpc_google_default_credentials_create grpc_set_ssl_roots_override_callback grpc_ssl_credentials_create grpc_ssl_credentials_create_ex grpc_call_credentials_release grpc_composite_channel_credentials_create grpc_composite_call_credentials_create grpc_google_compute_engine_credentials_create grpc_max_auth_token_lifetime grpc_service_account_jwt_access_credentials_create grpc_google_refresh_token_credentials_create grpc_access_token_credentials_create grpc_google_iam_credentials_create grpc_sts_credentials_create grpc_auth_metadata_context_copy grpc_auth_metadata_context_reset grpc_metadata_credentials_create_from_plugin grpc_secure_channel_create grpc_server_credentials_release grpc_ssl_server_certificate_config_create grpc_ssl_server_certificate_config_destroy grpc_ssl_server_credentials_create grpc_ssl_server_credentials_create_ex grpc_ssl_server_credentials_create_options_using_config grpc_ssl_server_credentials_create_options_using_config_fetcher grpc_ssl_server_credentials_options_destroy grpc_ssl_server_credentials_create_with_options grpc_server_add_secure_http2_port grpc_call_set_credentials grpc_server_credentials_set_auth_metadata_processor grpc_alts_credentials_client_options_create grpc_alts_credentials_server_options_create grpc_alts_credentials_client_options_add_target_service_account grpc_alts_credentials_options_destroy grpc_alts_credentials_create grpc_alts_server_credentials_create grpc_local_credentials_create grpc_local_server_credentials_create grpc_tls_credentials_options_create grpc_tls_credentials_options_set_cert_request_type grpc_tls_credentials_options_set_server_verification_option grpc_tls_credentials_options_set_key_materials_config grpc_tls_credentials_options_set_credential_reload_config grpc_tls_credentials_options_set_server_authorization_check_config grpc_tls_key_materials_config_create grpc_tls_key_materials_config_set_key_materials grpc_tls_key_materials_config_set_version grpc_tls_key_materials_config_get_version grpc_tls_credential_reload_config_create grpc_tls_server_authorization_check_config_create grpc_raw_byte_buffer_create grpc_raw_compressed_byte_buffer_create grpc_byte_buffer_copy grpc_byte_buffer_length grpc_byte_buffer_destroy grpc_byte_buffer_reader_init grpc_byte_buffer_reader_destroy grpc_byte_buffer_reader_next grpc_byte_buffer_reader_peek grpc_byte_buffer_reader_readall grpc_raw_byte_buffer_from_reader gpr_log_severity_string gpr_log gpr_should_log gpr_log_message gpr_set_log_verbosity gpr_log_verbosity_init gpr_set_log_function grpc_slice_ref grpc_slice_unref grpc_slice_copy grpc_slice_new grpc_slice_new_with_user_data grpc_slice_new_with_len grpc_slice_malloc grpc_slice_malloc_large grpc_slice_intern grpc_slice_from_copied_string grpc_slice_from_copied_buffer grpc_slice_from_static_string grpc_slice_from_static_buffer grpc_slice_sub grpc_slice_sub_no_ref grpc_slice_split_tail grpc_slice_split_tail_maybe_ref grpc_slice_split_head grpc_empty_slice grpc_slice_default_hash_impl grpc_slice_default_eq_impl grpc_slice_eq grpc_slice_cmp grpc_slice_str_cmp grpc_slice_buf_start_eq grpc_slice_rchr grpc_slice_chr grpc_slice_slice grpc_slice_hash grpc_slice_is_equivalent grpc_slice_dup grpc_slice_to_c_string grpc_slice_buffer_init grpc_slice_buffer_destroy grpc_slice_buffer_add grpc_slice_buffer_add_indexed grpc_slice_buffer_addn grpc_slice_buffer_tiny_add grpc_slice_buffer_pop grpc_slice_buffer_reset_and_unref grpc_slice_buffer_swap grpc_slice_buffer_move_into grpc_slice_buffer_trim_end grpc_slice_buffer_move_first grpc_slice_buffer_move_first_no_ref grpc_slice_buffer_move_first_into_buffer grpc_slice_buffer_take_first grpc_slice_buffer_undo_take_first gpr_malloc gpr_zalloc gpr_free gpr_realloc gpr_malloc_aligned gpr_free_aligned gpr_cpu_num_cores gpr_cpu_current_cpu gpr_format_message gpr_strdup gpr_asprintf gpr_mu_init gpr_mu_destroy gpr_mu_lock gpr_mu_unlock gpr_mu_trylock gpr_cv_init gpr_cv_destroy gpr_cv_wait gpr_cv_signal gpr_cv_broadcast gpr_once_init gpr_event_init gpr_event_set gpr_event_get gpr_event_wait gpr_ref_init gpr_ref gpr_ref_non_zero gpr_refn gpr_unref gpr_ref_is_unique gpr_stats_init gpr_stats_inc gpr_stats_read gpr_thd_currentid gpr_time_0 gpr_inf_future gpr_inf_past gpr_time_init gpr_now gpr_convert_clock_type gpr_time_cmp gpr_time_max gpr_time_min gpr_time_add gpr_time_sub gpr_time_from_micros gpr_time_from_nanos gpr_time_from_millis gpr_time_from_seconds gpr_time_from_minutes gpr_time_from_hours gpr_time_to_millis gpr_time_similar gpr_sleep_until gpr_timespec_to_micros grpc-1.30.2/grpc.gemspec000066400000000000000000003502171370425124100150370ustar00rootroot00000000000000# -*- ruby -*- # encoding: utf-8 $LOAD_PATH.push File.expand_path('../src/ruby/lib', __FILE__) require 'grpc/version' Gem::Specification.new do |s| s.name = 'grpc' s.version = GRPC::VERSION s.authors = ['gRPC Authors'] s.email = 'grpc-io@googlegroups.com' s.homepage = 'https://github.com/google/grpc/tree/master/src/ruby' s.summary = 'GRPC system in Ruby' s.description = 'Send RPCs from Ruby using GRPC' s.license = 'Apache-2.0' s.required_ruby_version = '>= 2.3.0' s.files = %w( Makefile .yardopts ) s.files += %w( etc/roots.pem ) s.files += Dir.glob('src/ruby/bin/**/*') s.files += Dir.glob('src/ruby/ext/**/*') s.files += Dir.glob('src/ruby/lib/**/*').reject do |f| # Binaries are included by rake-compiler and would lead to circular dependencies here File.fnmatch("**/?.?/grpc_c.so", f) end s.files += Dir.glob('src/ruby/pb/**/*').reject do |f| f.match(%r{^src/ruby/pb/test}) end s.files += Dir.glob('include/grpc/**/*') s.test_files = Dir.glob('src/ruby/spec/**/*') s.bindir = 'src/ruby/bin' s.require_paths = %w( src/ruby/lib src/ruby/bin src/ruby/pb ) s.platform = Gem::Platform::RUBY s.add_dependency 'google-protobuf', '~> 3.12' s.add_dependency 'googleapis-common-protos-types', '~> 1.0' s.add_development_dependency 'bundler', '>= 1.9' s.add_development_dependency 'facter', '~> 2.4' s.add_development_dependency 'logging', '~> 2.0' s.add_development_dependency 'simplecov', '~> 0.14.1' s.add_development_dependency 'rake', '~> 13.0' s.add_development_dependency 'rake-compiler', '~> 1.1' s.add_development_dependency 'rake-compiler-dock', '~> 1.0' s.add_development_dependency 'rspec', '~> 3.6' s.add_development_dependency 'rubocop', '~> 0.49.1' s.add_development_dependency 'signet', '~> 0.7' s.add_development_dependency 'googleauth', '>= 0.5.1', '< 0.10' s.extensions = %w(src/ruby/ext/grpc/extconf.rb) s.files += %w( include/grpc/byte_buffer.h ) s.files += %w( include/grpc/byte_buffer_reader.h ) s.files += %w( include/grpc/census.h ) s.files += %w( include/grpc/compression.h ) s.files += %w( include/grpc/fork.h ) s.files += %w( include/grpc/grpc.h ) s.files += %w( include/grpc/grpc_posix.h ) s.files += %w( include/grpc/grpc_security.h ) s.files += %w( include/grpc/grpc_security_constants.h ) s.files += %w( include/grpc/impl/codegen/atm.h ) s.files += %w( include/grpc/impl/codegen/atm_gcc_atomic.h ) s.files += %w( include/grpc/impl/codegen/atm_gcc_sync.h ) s.files += %w( include/grpc/impl/codegen/atm_windows.h ) s.files += %w( include/grpc/impl/codegen/byte_buffer.h ) s.files += %w( include/grpc/impl/codegen/byte_buffer_reader.h ) s.files += %w( include/grpc/impl/codegen/compression_types.h ) s.files += %w( include/grpc/impl/codegen/connectivity_state.h ) s.files += %w( include/grpc/impl/codegen/fork.h ) s.files += %w( include/grpc/impl/codegen/gpr_slice.h ) s.files += %w( include/grpc/impl/codegen/gpr_types.h ) s.files += %w( include/grpc/impl/codegen/grpc_types.h ) s.files += %w( include/grpc/impl/codegen/log.h ) s.files += %w( include/grpc/impl/codegen/port_platform.h ) s.files += %w( include/grpc/impl/codegen/propagation_bits.h ) s.files += %w( include/grpc/impl/codegen/slice.h ) s.files += %w( include/grpc/impl/codegen/status.h ) s.files += %w( include/grpc/impl/codegen/sync.h ) s.files += %w( include/grpc/impl/codegen/sync_abseil.h ) s.files += %w( include/grpc/impl/codegen/sync_custom.h ) s.files += %w( include/grpc/impl/codegen/sync_generic.h ) s.files += %w( include/grpc/impl/codegen/sync_posix.h ) s.files += %w( include/grpc/impl/codegen/sync_windows.h ) s.files += %w( include/grpc/load_reporting.h ) s.files += %w( include/grpc/slice.h ) s.files += %w( include/grpc/slice_buffer.h ) s.files += %w( include/grpc/status.h ) s.files += %w( include/grpc/support/alloc.h ) s.files += %w( include/grpc/support/atm.h ) s.files += %w( include/grpc/support/atm_gcc_atomic.h ) s.files += %w( include/grpc/support/atm_gcc_sync.h ) s.files += %w( include/grpc/support/atm_windows.h ) s.files += %w( include/grpc/support/cpu.h ) s.files += %w( include/grpc/support/log.h ) s.files += %w( include/grpc/support/log_windows.h ) s.files += %w( include/grpc/support/port_platform.h ) s.files += %w( include/grpc/support/string_util.h ) s.files += %w( include/grpc/support/sync.h ) s.files += %w( include/grpc/support/sync_abseil.h ) s.files += %w( include/grpc/support/sync_custom.h ) s.files += %w( include/grpc/support/sync_generic.h ) s.files += %w( include/grpc/support/sync_posix.h ) s.files += %w( include/grpc/support/sync_windows.h ) s.files += %w( include/grpc/support/thd_id.h ) s.files += %w( include/grpc/support/time.h ) s.files += %w( include/grpc/support/workaround_list.h ) s.files += %w( src/core/ext/filters/census/grpc_context.cc ) s.files += %w( src/core/ext/filters/client_channel/backend_metric.cc ) s.files += %w( src/core/ext/filters/client_channel/backend_metric.h ) s.files += %w( src/core/ext/filters/client_channel/backup_poller.cc ) s.files += %w( src/core/ext/filters/client_channel/backup_poller.h ) s.files += %w( src/core/ext/filters/client_channel/channel_connectivity.cc ) s.files += %w( src/core/ext/filters/client_channel/client_channel.cc ) s.files += %w( src/core/ext/filters/client_channel/client_channel.h ) s.files += %w( src/core/ext/filters/client_channel/client_channel_channelz.cc ) s.files += %w( src/core/ext/filters/client_channel/client_channel_channelz.h ) s.files += %w( src/core/ext/filters/client_channel/client_channel_factory.cc ) s.files += %w( src/core/ext/filters/client_channel/client_channel_factory.h ) s.files += %w( src/core/ext/filters/client_channel/client_channel_plugin.cc ) s.files += %w( src/core/ext/filters/client_channel/connector.h ) s.files += %w( src/core/ext/filters/client_channel/global_subchannel_pool.cc ) s.files += %w( src/core/ext/filters/client_channel/global_subchannel_pool.h ) s.files += %w( src/core/ext/filters/client_channel/health/health_check_client.cc ) s.files += %w( src/core/ext/filters/client_channel/health/health_check_client.h ) s.files += %w( src/core/ext/filters/client_channel/http_connect_handshaker.cc ) s.files += %w( src/core/ext/filters/client_channel/http_connect_handshaker.h ) s.files += %w( src/core/ext/filters/client_channel/http_proxy.cc ) s.files += %w( src/core/ext/filters/client_channel/http_proxy.h ) s.files += %w( src/core/ext/filters/client_channel/lb_policy.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy.h ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/address_filtering.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/address_filtering.h ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/priority/priority.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/subchannel_list.h ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/xds/cds.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/xds/eds.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/xds/xds.h ) s.files += %w( src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy_factory.h ) s.files += %w( src/core/ext/filters/client_channel/lb_policy_registry.cc ) s.files += %w( src/core/ext/filters/client_channel/lb_policy_registry.h ) s.files += %w( src/core/ext/filters/client_channel/local_subchannel_pool.cc ) s.files += %w( src/core/ext/filters/client_channel/local_subchannel_pool.h ) s.files += %w( src/core/ext/filters/client_channel/parse_address.cc ) s.files += %w( src/core/ext/filters/client_channel/parse_address.h ) s.files += %w( src/core/ext/filters/client_channel/proxy_mapper.h ) s.files += %w( src/core/ext/filters/client_channel/proxy_mapper_registry.cc ) s.files += %w( src/core/ext/filters/client_channel/proxy_mapper_registry.h ) s.files += %w( src/core/ext/filters/client_channel/resolver.cc ) s.files += %w( src/core/ext/filters/client_channel/resolver.h ) s.files += %w( src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc ) s.files += %w( src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc ) s.files += %w( src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h ) s.files += %w( src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc ) s.files += %w( src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc ) s.files += %w( src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc ) s.files += %w( src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc ) s.files += %w( src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h ) s.files += %w( src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc ) s.files += %w( src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc ) s.files += %w( src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc ) s.files += %w( src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc ) s.files += %w( src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc ) s.files += %w( src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h ) s.files += %w( src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc ) s.files += %w( src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc ) s.files += %w( src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h ) s.files += %w( src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc ) s.files += %w( src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc ) s.files += %w( src/core/ext/filters/client_channel/resolver_factory.h ) s.files += %w( src/core/ext/filters/client_channel/resolver_registry.cc ) s.files += %w( src/core/ext/filters/client_channel/resolver_registry.h ) s.files += %w( src/core/ext/filters/client_channel/resolver_result_parsing.cc ) s.files += %w( src/core/ext/filters/client_channel/resolver_result_parsing.h ) s.files += %w( src/core/ext/filters/client_channel/resolving_lb_policy.cc ) s.files += %w( src/core/ext/filters/client_channel/resolving_lb_policy.h ) s.files += %w( src/core/ext/filters/client_channel/retry_throttle.cc ) s.files += %w( src/core/ext/filters/client_channel/retry_throttle.h ) s.files += %w( src/core/ext/filters/client_channel/server_address.cc ) s.files += %w( src/core/ext/filters/client_channel/server_address.h ) s.files += %w( src/core/ext/filters/client_channel/service_config.cc ) s.files += %w( src/core/ext/filters/client_channel/service_config.h ) s.files += %w( src/core/ext/filters/client_channel/service_config_call_data.h ) s.files += %w( src/core/ext/filters/client_channel/service_config_parser.cc ) s.files += %w( src/core/ext/filters/client_channel/service_config_parser.h ) s.files += %w( src/core/ext/filters/client_channel/subchannel.cc ) s.files += %w( src/core/ext/filters/client_channel/subchannel.h ) s.files += %w( src/core/ext/filters/client_channel/subchannel_interface.h ) s.files += %w( src/core/ext/filters/client_channel/subchannel_pool_interface.cc ) s.files += %w( src/core/ext/filters/client_channel/subchannel_pool_interface.h ) s.files += %w( src/core/ext/filters/client_channel/xds/xds_api.cc ) s.files += %w( src/core/ext/filters/client_channel/xds/xds_api.h ) s.files += %w( src/core/ext/filters/client_channel/xds/xds_bootstrap.cc ) s.files += %w( src/core/ext/filters/client_channel/xds/xds_bootstrap.h ) s.files += %w( src/core/ext/filters/client_channel/xds/xds_channel.h ) s.files += %w( src/core/ext/filters/client_channel/xds/xds_channel_args.h ) s.files += %w( src/core/ext/filters/client_channel/xds/xds_channel_secure.cc ) s.files += %w( src/core/ext/filters/client_channel/xds/xds_client.cc ) s.files += %w( src/core/ext/filters/client_channel/xds/xds_client.h ) s.files += %w( src/core/ext/filters/client_channel/xds/xds_client_stats.cc ) s.files += %w( src/core/ext/filters/client_channel/xds/xds_client_stats.h ) s.files += %w( src/core/ext/filters/client_idle/client_idle_filter.cc ) s.files += %w( src/core/ext/filters/deadline/deadline_filter.cc ) s.files += %w( src/core/ext/filters/deadline/deadline_filter.h ) s.files += %w( src/core/ext/filters/http/client/http_client_filter.cc ) s.files += %w( src/core/ext/filters/http/client/http_client_filter.h ) s.files += %w( src/core/ext/filters/http/client_authority_filter.cc ) s.files += %w( src/core/ext/filters/http/client_authority_filter.h ) s.files += %w( src/core/ext/filters/http/http_filters_plugin.cc ) s.files += %w( src/core/ext/filters/http/message_compress/message_compress_filter.cc ) s.files += %w( src/core/ext/filters/http/message_compress/message_compress_filter.h ) s.files += %w( src/core/ext/filters/http/message_compress/message_decompress_filter.cc ) s.files += %w( src/core/ext/filters/http/message_compress/message_decompress_filter.h ) s.files += %w( src/core/ext/filters/http/server/http_server_filter.cc ) s.files += %w( src/core/ext/filters/http/server/http_server_filter.h ) s.files += %w( src/core/ext/filters/max_age/max_age_filter.cc ) s.files += %w( src/core/ext/filters/max_age/max_age_filter.h ) s.files += %w( src/core/ext/filters/message_size/message_size_filter.cc ) s.files += %w( src/core/ext/filters/message_size/message_size_filter.h ) s.files += %w( src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc ) s.files += %w( src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h ) s.files += %w( src/core/ext/filters/workarounds/workaround_utils.cc ) s.files += %w( src/core/ext/filters/workarounds/workaround_utils.h ) s.files += %w( src/core/ext/transport/chttp2/alpn/alpn.cc ) s.files += %w( src/core/ext/transport/chttp2/alpn/alpn.h ) s.files += %w( src/core/ext/transport/chttp2/client/authority.cc ) s.files += %w( src/core/ext/transport/chttp2/client/authority.h ) s.files += %w( src/core/ext/transport/chttp2/client/chttp2_connector.cc ) s.files += %w( src/core/ext/transport/chttp2/client/chttp2_connector.h ) s.files += %w( src/core/ext/transport/chttp2/client/insecure/channel_create.cc ) s.files += %w( src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc ) s.files += %w( src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc ) s.files += %w( src/core/ext/transport/chttp2/server/chttp2_server.cc ) s.files += %w( src/core/ext/transport/chttp2/server/chttp2_server.h ) s.files += %w( src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc ) s.files += %w( src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc ) s.files += %w( src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/bin_decoder.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/bin_decoder.h ) s.files += %w( src/core/ext/transport/chttp2/transport/bin_encoder.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/bin_encoder.h ) s.files += %w( src/core/ext/transport/chttp2/transport/chttp2_plugin.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/chttp2_transport.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/chttp2_transport.h ) s.files += %w( src/core/ext/transport/chttp2/transport/context_list.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/context_list.h ) s.files += %w( src/core/ext/transport/chttp2/transport/flow_control.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/flow_control.h ) s.files += %w( src/core/ext/transport/chttp2/transport/frame.h ) s.files += %w( src/core/ext/transport/chttp2/transport/frame_data.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/frame_data.h ) s.files += %w( src/core/ext/transport/chttp2/transport/frame_goaway.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/frame_goaway.h ) s.files += %w( src/core/ext/transport/chttp2/transport/frame_ping.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/frame_ping.h ) s.files += %w( src/core/ext/transport/chttp2/transport/frame_rst_stream.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/frame_rst_stream.h ) s.files += %w( src/core/ext/transport/chttp2/transport/frame_settings.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/frame_settings.h ) s.files += %w( src/core/ext/transport/chttp2/transport/frame_window_update.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/frame_window_update.h ) s.files += %w( src/core/ext/transport/chttp2/transport/hpack_encoder.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/hpack_encoder.h ) s.files += %w( src/core/ext/transport/chttp2/transport/hpack_parser.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/hpack_parser.h ) s.files += %w( src/core/ext/transport/chttp2/transport/hpack_table.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/hpack_table.h ) s.files += %w( src/core/ext/transport/chttp2/transport/http2_settings.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/http2_settings.h ) s.files += %w( src/core/ext/transport/chttp2/transport/huffsyms.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/huffsyms.h ) s.files += %w( src/core/ext/transport/chttp2/transport/incoming_metadata.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/incoming_metadata.h ) s.files += %w( src/core/ext/transport/chttp2/transport/internal.h ) s.files += %w( src/core/ext/transport/chttp2/transport/parsing.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/stream_lists.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/stream_map.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/stream_map.h ) s.files += %w( src/core/ext/transport/chttp2/transport/varint.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/varint.h ) s.files += %w( src/core/ext/transport/chttp2/transport/writing.cc ) s.files += %w( src/core/ext/transport/inproc/inproc_plugin.cc ) s.files += %w( src/core/ext/transport/inproc/inproc_transport.cc ) s.files += %w( src/core/ext/transport/inproc/inproc_transport.h ) s.files += %w( src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/annotations/resource.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/annotations/resource.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cds.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cds.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/eds.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/eds.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/lds.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/lds.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/listener.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/listener.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/rds.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/rds.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/route.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/route.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/srds.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/api/v2/srds.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/type/http.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/type/http.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/type/matcher/string.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/type/matcher/string.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/type/percent.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/type/percent.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/type/range.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/type/range.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/type/semantic_version.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/type/semantic_version.upb.h ) s.files += %w( src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c ) s.files += %w( src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h ) s.files += %w( src/core/ext/upb-generated/gogoproto/gogo.upb.c ) s.files += %w( src/core/ext/upb-generated/gogoproto/gogo.upb.h ) s.files += %w( src/core/ext/upb-generated/google/api/annotations.upb.c ) s.files += %w( src/core/ext/upb-generated/google/api/annotations.upb.h ) s.files += %w( src/core/ext/upb-generated/google/api/http.upb.c ) s.files += %w( src/core/ext/upb-generated/google/api/http.upb.h ) s.files += %w( src/core/ext/upb-generated/google/protobuf/any.upb.c ) s.files += %w( src/core/ext/upb-generated/google/protobuf/any.upb.h ) s.files += %w( src/core/ext/upb-generated/google/protobuf/descriptor.upb.c ) s.files += %w( src/core/ext/upb-generated/google/protobuf/descriptor.upb.h ) s.files += %w( src/core/ext/upb-generated/google/protobuf/duration.upb.c ) s.files += %w( src/core/ext/upb-generated/google/protobuf/duration.upb.h ) s.files += %w( src/core/ext/upb-generated/google/protobuf/empty.upb.c ) s.files += %w( src/core/ext/upb-generated/google/protobuf/empty.upb.h ) s.files += %w( src/core/ext/upb-generated/google/protobuf/struct.upb.c ) s.files += %w( src/core/ext/upb-generated/google/protobuf/struct.upb.h ) s.files += %w( src/core/ext/upb-generated/google/protobuf/timestamp.upb.c ) s.files += %w( src/core/ext/upb-generated/google/protobuf/timestamp.upb.h ) s.files += %w( src/core/ext/upb-generated/google/protobuf/wrappers.upb.c ) s.files += %w( src/core/ext/upb-generated/google/protobuf/wrappers.upb.h ) s.files += %w( src/core/ext/upb-generated/google/rpc/status.upb.c ) s.files += %w( src/core/ext/upb-generated/google/rpc/status.upb.h ) s.files += %w( src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c ) s.files += %w( src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h ) s.files += %w( src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c ) s.files += %w( src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h ) s.files += %w( src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c ) s.files += %w( src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h ) s.files += %w( src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c ) s.files += %w( src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h ) s.files += %w( src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c ) s.files += %w( src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h ) s.files += %w( src/core/ext/upb-generated/udpa/annotations/migrate.upb.c ) s.files += %w( src/core/ext/upb-generated/udpa/annotations/migrate.upb.h ) s.files += %w( src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c ) s.files += %w( src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h ) s.files += %w( src/core/ext/upb-generated/udpa/annotations/status.upb.c ) s.files += %w( src/core/ext/upb-generated/udpa/annotations/status.upb.h ) s.files += %w( src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c ) s.files += %w( src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h ) s.files += %w( src/core/ext/upb-generated/validate/validate.upb.c ) s.files += %w( src/core/ext/upb-generated/validate/validate.upb.h ) s.files += %w( src/core/lib/avl/avl.cc ) s.files += %w( src/core/lib/avl/avl.h ) s.files += %w( src/core/lib/backoff/backoff.cc ) s.files += %w( src/core/lib/backoff/backoff.h ) s.files += %w( src/core/lib/channel/channel_args.cc ) s.files += %w( src/core/lib/channel/channel_args.h ) s.files += %w( src/core/lib/channel/channel_stack.cc ) s.files += %w( src/core/lib/channel/channel_stack.h ) s.files += %w( src/core/lib/channel/channel_stack_builder.cc ) s.files += %w( src/core/lib/channel/channel_stack_builder.h ) s.files += %w( src/core/lib/channel/channel_trace.cc ) s.files += %w( src/core/lib/channel/channel_trace.h ) s.files += %w( src/core/lib/channel/channelz.cc ) s.files += %w( src/core/lib/channel/channelz.h ) s.files += %w( src/core/lib/channel/channelz_registry.cc ) s.files += %w( src/core/lib/channel/channelz_registry.h ) s.files += %w( src/core/lib/channel/connected_channel.cc ) s.files += %w( src/core/lib/channel/connected_channel.h ) s.files += %w( src/core/lib/channel/context.h ) s.files += %w( src/core/lib/channel/handshaker.cc ) s.files += %w( src/core/lib/channel/handshaker.h ) s.files += %w( src/core/lib/channel/handshaker_factory.h ) s.files += %w( src/core/lib/channel/handshaker_registry.cc ) s.files += %w( src/core/lib/channel/handshaker_registry.h ) s.files += %w( src/core/lib/channel/status_util.cc ) s.files += %w( src/core/lib/channel/status_util.h ) s.files += %w( src/core/lib/compression/algorithm_metadata.h ) s.files += %w( src/core/lib/compression/compression.cc ) s.files += %w( src/core/lib/compression/compression_args.cc ) s.files += %w( src/core/lib/compression/compression_args.h ) s.files += %w( src/core/lib/compression/compression_internal.cc ) s.files += %w( src/core/lib/compression/compression_internal.h ) s.files += %w( src/core/lib/compression/message_compress.cc ) s.files += %w( src/core/lib/compression/message_compress.h ) s.files += %w( src/core/lib/compression/stream_compression.cc ) s.files += %w( src/core/lib/compression/stream_compression.h ) s.files += %w( src/core/lib/compression/stream_compression_gzip.cc ) s.files += %w( src/core/lib/compression/stream_compression_gzip.h ) s.files += %w( src/core/lib/compression/stream_compression_identity.cc ) s.files += %w( src/core/lib/compression/stream_compression_identity.h ) s.files += %w( src/core/lib/debug/stats.cc ) s.files += %w( src/core/lib/debug/stats.h ) s.files += %w( src/core/lib/debug/stats_data.cc ) s.files += %w( src/core/lib/debug/stats_data.h ) s.files += %w( src/core/lib/debug/trace.cc ) s.files += %w( src/core/lib/debug/trace.h ) s.files += %w( src/core/lib/gpr/alloc.cc ) s.files += %w( src/core/lib/gpr/alloc.h ) s.files += %w( src/core/lib/gpr/arena.h ) s.files += %w( src/core/lib/gpr/atm.cc ) s.files += %w( src/core/lib/gpr/cpu_iphone.cc ) s.files += %w( src/core/lib/gpr/cpu_linux.cc ) s.files += %w( src/core/lib/gpr/cpu_posix.cc ) s.files += %w( src/core/lib/gpr/cpu_windows.cc ) s.files += %w( src/core/lib/gpr/env.h ) s.files += %w( src/core/lib/gpr/env_linux.cc ) s.files += %w( src/core/lib/gpr/env_posix.cc ) s.files += %w( src/core/lib/gpr/env_windows.cc ) s.files += %w( src/core/lib/gpr/log.cc ) s.files += %w( src/core/lib/gpr/log_android.cc ) s.files += %w( src/core/lib/gpr/log_linux.cc ) s.files += %w( src/core/lib/gpr/log_posix.cc ) s.files += %w( src/core/lib/gpr/log_windows.cc ) s.files += %w( src/core/lib/gpr/murmur_hash.cc ) s.files += %w( src/core/lib/gpr/murmur_hash.h ) s.files += %w( src/core/lib/gpr/spinlock.h ) s.files += %w( src/core/lib/gpr/string.cc ) s.files += %w( src/core/lib/gpr/string.h ) s.files += %w( src/core/lib/gpr/string_posix.cc ) s.files += %w( src/core/lib/gpr/string_util_windows.cc ) s.files += %w( src/core/lib/gpr/string_windows.cc ) s.files += %w( src/core/lib/gpr/string_windows.h ) s.files += %w( src/core/lib/gpr/sync.cc ) s.files += %w( src/core/lib/gpr/sync_abseil.cc ) s.files += %w( src/core/lib/gpr/sync_posix.cc ) s.files += %w( src/core/lib/gpr/sync_windows.cc ) s.files += %w( src/core/lib/gpr/time.cc ) s.files += %w( src/core/lib/gpr/time_posix.cc ) s.files += %w( src/core/lib/gpr/time_precise.cc ) s.files += %w( src/core/lib/gpr/time_precise.h ) s.files += %w( src/core/lib/gpr/time_windows.cc ) s.files += %w( src/core/lib/gpr/tls.h ) s.files += %w( src/core/lib/gpr/tls_gcc.h ) s.files += %w( src/core/lib/gpr/tls_msvc.h ) s.files += %w( src/core/lib/gpr/tls_pthread.cc ) s.files += %w( src/core/lib/gpr/tls_pthread.h ) s.files += %w( src/core/lib/gpr/tmpfile.h ) s.files += %w( src/core/lib/gpr/tmpfile_msys.cc ) s.files += %w( src/core/lib/gpr/tmpfile_posix.cc ) s.files += %w( src/core/lib/gpr/tmpfile_windows.cc ) s.files += %w( src/core/lib/gpr/useful.h ) s.files += %w( src/core/lib/gpr/wrap_memcpy.cc ) s.files += %w( src/core/lib/gprpp/arena.cc ) s.files += %w( src/core/lib/gprpp/arena.h ) s.files += %w( src/core/lib/gprpp/atomic.h ) s.files += %w( src/core/lib/gprpp/debug_location.h ) s.files += %w( src/core/lib/gprpp/fork.cc ) s.files += %w( src/core/lib/gprpp/fork.h ) s.files += %w( src/core/lib/gprpp/global_config.h ) s.files += %w( src/core/lib/gprpp/global_config_custom.h ) s.files += %w( src/core/lib/gprpp/global_config_env.cc ) s.files += %w( src/core/lib/gprpp/global_config_env.h ) s.files += %w( src/core/lib/gprpp/global_config_generic.h ) s.files += %w( src/core/lib/gprpp/host_port.cc ) s.files += %w( src/core/lib/gprpp/host_port.h ) s.files += %w( src/core/lib/gprpp/manual_constructor.h ) s.files += %w( src/core/lib/gprpp/map.h ) s.files += %w( src/core/lib/gprpp/memory.h ) s.files += %w( src/core/lib/gprpp/mpscq.cc ) s.files += %w( src/core/lib/gprpp/mpscq.h ) s.files += %w( src/core/lib/gprpp/orphanable.h ) s.files += %w( src/core/lib/gprpp/ref_counted.h ) s.files += %w( src/core/lib/gprpp/ref_counted_ptr.h ) s.files += %w( src/core/lib/gprpp/sync.h ) s.files += %w( src/core/lib/gprpp/thd.h ) s.files += %w( src/core/lib/gprpp/thd_posix.cc ) s.files += %w( src/core/lib/gprpp/thd_windows.cc ) s.files += %w( src/core/lib/http/format_request.cc ) s.files += %w( src/core/lib/http/format_request.h ) s.files += %w( src/core/lib/http/httpcli.cc ) s.files += %w( src/core/lib/http/httpcli.h ) s.files += %w( src/core/lib/http/httpcli_security_connector.cc ) s.files += %w( src/core/lib/http/parser.cc ) s.files += %w( src/core/lib/http/parser.h ) s.files += %w( src/core/lib/iomgr/block_annotate.h ) s.files += %w( src/core/lib/iomgr/buffer_list.cc ) s.files += %w( src/core/lib/iomgr/buffer_list.h ) s.files += %w( src/core/lib/iomgr/call_combiner.cc ) s.files += %w( src/core/lib/iomgr/call_combiner.h ) s.files += %w( src/core/lib/iomgr/cfstream_handle.cc ) s.files += %w( src/core/lib/iomgr/cfstream_handle.h ) s.files += %w( src/core/lib/iomgr/closure.h ) s.files += %w( src/core/lib/iomgr/combiner.cc ) s.files += %w( src/core/lib/iomgr/combiner.h ) s.files += %w( src/core/lib/iomgr/dualstack_socket_posix.cc ) s.files += %w( src/core/lib/iomgr/dynamic_annotations.h ) s.files += %w( src/core/lib/iomgr/endpoint.cc ) s.files += %w( src/core/lib/iomgr/endpoint.h ) s.files += %w( src/core/lib/iomgr/endpoint_cfstream.cc ) s.files += %w( src/core/lib/iomgr/endpoint_cfstream.h ) s.files += %w( src/core/lib/iomgr/endpoint_pair.h ) s.files += %w( src/core/lib/iomgr/endpoint_pair_posix.cc ) s.files += %w( src/core/lib/iomgr/endpoint_pair_uv.cc ) s.files += %w( src/core/lib/iomgr/endpoint_pair_windows.cc ) s.files += %w( src/core/lib/iomgr/error.cc ) s.files += %w( src/core/lib/iomgr/error.h ) s.files += %w( src/core/lib/iomgr/error_cfstream.cc ) s.files += %w( src/core/lib/iomgr/error_cfstream.h ) s.files += %w( src/core/lib/iomgr/error_internal.h ) s.files += %w( src/core/lib/iomgr/ev_apple.cc ) s.files += %w( src/core/lib/iomgr/ev_apple.h ) s.files += %w( src/core/lib/iomgr/ev_epoll1_linux.cc ) s.files += %w( src/core/lib/iomgr/ev_epoll1_linux.h ) s.files += %w( src/core/lib/iomgr/ev_epollex_linux.cc ) s.files += %w( src/core/lib/iomgr/ev_epollex_linux.h ) s.files += %w( src/core/lib/iomgr/ev_poll_posix.cc ) s.files += %w( src/core/lib/iomgr/ev_poll_posix.h ) s.files += %w( src/core/lib/iomgr/ev_posix.cc ) s.files += %w( src/core/lib/iomgr/ev_posix.h ) s.files += %w( src/core/lib/iomgr/ev_windows.cc ) s.files += %w( src/core/lib/iomgr/exec_ctx.cc ) s.files += %w( src/core/lib/iomgr/exec_ctx.h ) s.files += %w( src/core/lib/iomgr/executor.cc ) s.files += %w( src/core/lib/iomgr/executor.h ) s.files += %w( src/core/lib/iomgr/executor/mpmcqueue.cc ) s.files += %w( src/core/lib/iomgr/executor/mpmcqueue.h ) s.files += %w( src/core/lib/iomgr/executor/threadpool.cc ) s.files += %w( src/core/lib/iomgr/executor/threadpool.h ) s.files += %w( src/core/lib/iomgr/fork_posix.cc ) s.files += %w( src/core/lib/iomgr/fork_windows.cc ) s.files += %w( src/core/lib/iomgr/gethostname.h ) s.files += %w( src/core/lib/iomgr/gethostname_fallback.cc ) s.files += %w( src/core/lib/iomgr/gethostname_host_name_max.cc ) s.files += %w( src/core/lib/iomgr/gethostname_sysconf.cc ) s.files += %w( src/core/lib/iomgr/grpc_if_nametoindex.h ) s.files += %w( src/core/lib/iomgr/grpc_if_nametoindex_posix.cc ) s.files += %w( src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc ) s.files += %w( src/core/lib/iomgr/internal_errqueue.cc ) s.files += %w( src/core/lib/iomgr/internal_errqueue.h ) s.files += %w( src/core/lib/iomgr/iocp_windows.cc ) s.files += %w( src/core/lib/iomgr/iocp_windows.h ) s.files += %w( src/core/lib/iomgr/iomgr.cc ) s.files += %w( src/core/lib/iomgr/iomgr.h ) s.files += %w( src/core/lib/iomgr/iomgr_custom.cc ) s.files += %w( src/core/lib/iomgr/iomgr_custom.h ) s.files += %w( src/core/lib/iomgr/iomgr_internal.cc ) s.files += %w( src/core/lib/iomgr/iomgr_internal.h ) s.files += %w( src/core/lib/iomgr/iomgr_posix.cc ) s.files += %w( src/core/lib/iomgr/iomgr_posix.h ) s.files += %w( src/core/lib/iomgr/iomgr_posix_cfstream.cc ) s.files += %w( src/core/lib/iomgr/iomgr_uv.cc ) s.files += %w( src/core/lib/iomgr/iomgr_windows.cc ) s.files += %w( src/core/lib/iomgr/is_epollexclusive_available.cc ) s.files += %w( src/core/lib/iomgr/is_epollexclusive_available.h ) s.files += %w( src/core/lib/iomgr/load_file.cc ) s.files += %w( src/core/lib/iomgr/load_file.h ) s.files += %w( src/core/lib/iomgr/lockfree_event.cc ) s.files += %w( src/core/lib/iomgr/lockfree_event.h ) s.files += %w( src/core/lib/iomgr/nameser.h ) s.files += %w( src/core/lib/iomgr/poller/eventmanager_libuv.cc ) s.files += %w( src/core/lib/iomgr/poller/eventmanager_libuv.h ) s.files += %w( src/core/lib/iomgr/polling_entity.cc ) s.files += %w( src/core/lib/iomgr/polling_entity.h ) s.files += %w( src/core/lib/iomgr/pollset.cc ) s.files += %w( src/core/lib/iomgr/pollset.h ) s.files += %w( src/core/lib/iomgr/pollset_custom.cc ) s.files += %w( src/core/lib/iomgr/pollset_custom.h ) s.files += %w( src/core/lib/iomgr/pollset_set.cc ) s.files += %w( src/core/lib/iomgr/pollset_set.h ) s.files += %w( src/core/lib/iomgr/pollset_set_custom.cc ) s.files += %w( src/core/lib/iomgr/pollset_set_custom.h ) s.files += %w( src/core/lib/iomgr/pollset_set_windows.cc ) s.files += %w( src/core/lib/iomgr/pollset_set_windows.h ) s.files += %w( src/core/lib/iomgr/pollset_uv.cc ) s.files += %w( src/core/lib/iomgr/pollset_uv.h ) s.files += %w( src/core/lib/iomgr/pollset_windows.cc ) s.files += %w( src/core/lib/iomgr/pollset_windows.h ) s.files += %w( src/core/lib/iomgr/port.h ) s.files += %w( src/core/lib/iomgr/python_util.h ) s.files += %w( src/core/lib/iomgr/resolve_address.cc ) s.files += %w( src/core/lib/iomgr/resolve_address.h ) s.files += %w( src/core/lib/iomgr/resolve_address_custom.cc ) s.files += %w( src/core/lib/iomgr/resolve_address_custom.h ) s.files += %w( src/core/lib/iomgr/resolve_address_posix.cc ) s.files += %w( src/core/lib/iomgr/resolve_address_windows.cc ) s.files += %w( src/core/lib/iomgr/resource_quota.cc ) s.files += %w( src/core/lib/iomgr/resource_quota.h ) s.files += %w( src/core/lib/iomgr/sockaddr.h ) s.files += %w( src/core/lib/iomgr/sockaddr_custom.h ) s.files += %w( src/core/lib/iomgr/sockaddr_posix.h ) s.files += %w( src/core/lib/iomgr/sockaddr_utils.cc ) s.files += %w( src/core/lib/iomgr/sockaddr_utils.h ) s.files += %w( src/core/lib/iomgr/sockaddr_windows.h ) s.files += %w( src/core/lib/iomgr/socket_factory_posix.cc ) s.files += %w( src/core/lib/iomgr/socket_factory_posix.h ) s.files += %w( src/core/lib/iomgr/socket_mutator.cc ) s.files += %w( src/core/lib/iomgr/socket_mutator.h ) s.files += %w( src/core/lib/iomgr/socket_utils.h ) s.files += %w( src/core/lib/iomgr/socket_utils_common_posix.cc ) s.files += %w( src/core/lib/iomgr/socket_utils_linux.cc ) s.files += %w( src/core/lib/iomgr/socket_utils_posix.cc ) s.files += %w( src/core/lib/iomgr/socket_utils_posix.h ) s.files += %w( src/core/lib/iomgr/socket_utils_uv.cc ) s.files += %w( src/core/lib/iomgr/socket_utils_windows.cc ) s.files += %w( src/core/lib/iomgr/socket_windows.cc ) s.files += %w( src/core/lib/iomgr/socket_windows.h ) s.files += %w( src/core/lib/iomgr/sys_epoll_wrapper.h ) s.files += %w( src/core/lib/iomgr/tcp_client.cc ) s.files += %w( src/core/lib/iomgr/tcp_client.h ) s.files += %w( src/core/lib/iomgr/tcp_client_cfstream.cc ) s.files += %w( src/core/lib/iomgr/tcp_client_custom.cc ) s.files += %w( src/core/lib/iomgr/tcp_client_posix.cc ) s.files += %w( src/core/lib/iomgr/tcp_client_posix.h ) s.files += %w( src/core/lib/iomgr/tcp_client_windows.cc ) s.files += %w( src/core/lib/iomgr/tcp_custom.cc ) s.files += %w( src/core/lib/iomgr/tcp_custom.h ) s.files += %w( src/core/lib/iomgr/tcp_posix.cc ) s.files += %w( src/core/lib/iomgr/tcp_posix.h ) s.files += %w( src/core/lib/iomgr/tcp_server.cc ) s.files += %w( src/core/lib/iomgr/tcp_server.h ) s.files += %w( src/core/lib/iomgr/tcp_server_custom.cc ) s.files += %w( src/core/lib/iomgr/tcp_server_posix.cc ) s.files += %w( src/core/lib/iomgr/tcp_server_utils_posix.h ) s.files += %w( src/core/lib/iomgr/tcp_server_utils_posix_common.cc ) s.files += %w( src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc ) s.files += %w( src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc ) s.files += %w( src/core/lib/iomgr/tcp_server_windows.cc ) s.files += %w( src/core/lib/iomgr/tcp_uv.cc ) s.files += %w( src/core/lib/iomgr/tcp_windows.cc ) s.files += %w( src/core/lib/iomgr/tcp_windows.h ) s.files += %w( src/core/lib/iomgr/time_averaged_stats.cc ) s.files += %w( src/core/lib/iomgr/time_averaged_stats.h ) s.files += %w( src/core/lib/iomgr/timer.cc ) s.files += %w( src/core/lib/iomgr/timer.h ) s.files += %w( src/core/lib/iomgr/timer_custom.cc ) s.files += %w( src/core/lib/iomgr/timer_custom.h ) s.files += %w( src/core/lib/iomgr/timer_generic.cc ) s.files += %w( src/core/lib/iomgr/timer_generic.h ) s.files += %w( src/core/lib/iomgr/timer_heap.cc ) s.files += %w( src/core/lib/iomgr/timer_heap.h ) s.files += %w( src/core/lib/iomgr/timer_manager.cc ) s.files += %w( src/core/lib/iomgr/timer_manager.h ) s.files += %w( src/core/lib/iomgr/timer_uv.cc ) s.files += %w( src/core/lib/iomgr/udp_server.cc ) s.files += %w( src/core/lib/iomgr/udp_server.h ) s.files += %w( src/core/lib/iomgr/unix_sockets_posix.cc ) s.files += %w( src/core/lib/iomgr/unix_sockets_posix.h ) s.files += %w( src/core/lib/iomgr/unix_sockets_posix_noop.cc ) s.files += %w( src/core/lib/iomgr/wakeup_fd_eventfd.cc ) s.files += %w( src/core/lib/iomgr/wakeup_fd_nospecial.cc ) s.files += %w( src/core/lib/iomgr/wakeup_fd_pipe.cc ) s.files += %w( src/core/lib/iomgr/wakeup_fd_pipe.h ) s.files += %w( src/core/lib/iomgr/wakeup_fd_posix.cc ) s.files += %w( src/core/lib/iomgr/wakeup_fd_posix.h ) s.files += %w( src/core/lib/iomgr/work_serializer.cc ) s.files += %w( src/core/lib/iomgr/work_serializer.h ) s.files += %w( src/core/lib/json/json.h ) s.files += %w( src/core/lib/json/json_reader.cc ) s.files += %w( src/core/lib/json/json_writer.cc ) s.files += %w( src/core/lib/profiling/basic_timers.cc ) s.files += %w( src/core/lib/profiling/stap_timers.cc ) s.files += %w( src/core/lib/profiling/timers.h ) s.files += %w( src/core/lib/security/context/security_context.cc ) s.files += %w( src/core/lib/security/context/security_context.h ) s.files += %w( src/core/lib/security/credentials/alts/alts_credentials.cc ) s.files += %w( src/core/lib/security/credentials/alts/alts_credentials.h ) s.files += %w( src/core/lib/security/credentials/alts/check_gcp_environment.cc ) s.files += %w( src/core/lib/security/credentials/alts/check_gcp_environment.h ) s.files += %w( src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc ) s.files += %w( src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc ) s.files += %w( src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc ) s.files += %w( src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc ) s.files += %w( src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc ) s.files += %w( src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h ) s.files += %w( src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc ) s.files += %w( src/core/lib/security/credentials/composite/composite_credentials.cc ) s.files += %w( src/core/lib/security/credentials/composite/composite_credentials.h ) s.files += %w( src/core/lib/security/credentials/credentials.cc ) s.files += %w( src/core/lib/security/credentials/credentials.h ) s.files += %w( src/core/lib/security/credentials/credentials_metadata.cc ) s.files += %w( src/core/lib/security/credentials/fake/fake_credentials.cc ) s.files += %w( src/core/lib/security/credentials/fake/fake_credentials.h ) s.files += %w( src/core/lib/security/credentials/google_default/credentials_generic.cc ) s.files += %w( src/core/lib/security/credentials/google_default/google_default_credentials.cc ) s.files += %w( src/core/lib/security/credentials/google_default/google_default_credentials.h ) s.files += %w( src/core/lib/security/credentials/iam/iam_credentials.cc ) s.files += %w( src/core/lib/security/credentials/iam/iam_credentials.h ) s.files += %w( src/core/lib/security/credentials/jwt/json_token.cc ) s.files += %w( src/core/lib/security/credentials/jwt/json_token.h ) s.files += %w( src/core/lib/security/credentials/jwt/jwt_credentials.cc ) s.files += %w( src/core/lib/security/credentials/jwt/jwt_credentials.h ) s.files += %w( src/core/lib/security/credentials/jwt/jwt_verifier.cc ) s.files += %w( src/core/lib/security/credentials/jwt/jwt_verifier.h ) s.files += %w( src/core/lib/security/credentials/local/local_credentials.cc ) s.files += %w( src/core/lib/security/credentials/local/local_credentials.h ) s.files += %w( src/core/lib/security/credentials/oauth2/oauth2_credentials.cc ) s.files += %w( src/core/lib/security/credentials/oauth2/oauth2_credentials.h ) s.files += %w( src/core/lib/security/credentials/plugin/plugin_credentials.cc ) s.files += %w( src/core/lib/security/credentials/plugin/plugin_credentials.h ) s.files += %w( src/core/lib/security/credentials/ssl/ssl_credentials.cc ) s.files += %w( src/core/lib/security/credentials/ssl/ssl_credentials.h ) s.files += %w( src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc ) s.files += %w( src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h ) s.files += %w( src/core/lib/security/credentials/tls/tls_credentials.cc ) s.files += %w( src/core/lib/security/credentials/tls/tls_credentials.h ) s.files += %w( src/core/lib/security/security_connector/alts/alts_security_connector.cc ) s.files += %w( src/core/lib/security/security_connector/alts/alts_security_connector.h ) s.files += %w( src/core/lib/security/security_connector/fake/fake_security_connector.cc ) s.files += %w( src/core/lib/security/security_connector/fake/fake_security_connector.h ) s.files += %w( src/core/lib/security/security_connector/load_system_roots.h ) s.files += %w( src/core/lib/security/security_connector/load_system_roots_fallback.cc ) s.files += %w( src/core/lib/security/security_connector/load_system_roots_linux.cc ) s.files += %w( src/core/lib/security/security_connector/load_system_roots_linux.h ) s.files += %w( src/core/lib/security/security_connector/local/local_security_connector.cc ) s.files += %w( src/core/lib/security/security_connector/local/local_security_connector.h ) s.files += %w( src/core/lib/security/security_connector/security_connector.cc ) s.files += %w( src/core/lib/security/security_connector/security_connector.h ) s.files += %w( src/core/lib/security/security_connector/ssl/ssl_security_connector.cc ) s.files += %w( src/core/lib/security/security_connector/ssl/ssl_security_connector.h ) s.files += %w( src/core/lib/security/security_connector/ssl_utils.cc ) s.files += %w( src/core/lib/security/security_connector/ssl_utils.h ) s.files += %w( src/core/lib/security/security_connector/ssl_utils_config.cc ) s.files += %w( src/core/lib/security/security_connector/ssl_utils_config.h ) s.files += %w( src/core/lib/security/security_connector/tls/tls_security_connector.cc ) s.files += %w( src/core/lib/security/security_connector/tls/tls_security_connector.h ) s.files += %w( src/core/lib/security/transport/auth_filters.h ) s.files += %w( src/core/lib/security/transport/client_auth_filter.cc ) s.files += %w( src/core/lib/security/transport/secure_endpoint.cc ) s.files += %w( src/core/lib/security/transport/secure_endpoint.h ) s.files += %w( src/core/lib/security/transport/security_handshaker.cc ) s.files += %w( src/core/lib/security/transport/security_handshaker.h ) s.files += %w( src/core/lib/security/transport/server_auth_filter.cc ) s.files += %w( src/core/lib/security/transport/target_authority_table.cc ) s.files += %w( src/core/lib/security/transport/target_authority_table.h ) s.files += %w( src/core/lib/security/transport/tsi_error.cc ) s.files += %w( src/core/lib/security/transport/tsi_error.h ) s.files += %w( src/core/lib/security/util/json_util.cc ) s.files += %w( src/core/lib/security/util/json_util.h ) s.files += %w( src/core/lib/slice/b64.cc ) s.files += %w( src/core/lib/slice/b64.h ) s.files += %w( src/core/lib/slice/percent_encoding.cc ) s.files += %w( src/core/lib/slice/percent_encoding.h ) s.files += %w( src/core/lib/slice/slice.cc ) s.files += %w( src/core/lib/slice/slice_buffer.cc ) s.files += %w( src/core/lib/slice/slice_hash_table.h ) s.files += %w( src/core/lib/slice/slice_intern.cc ) s.files += %w( src/core/lib/slice/slice_internal.h ) s.files += %w( src/core/lib/slice/slice_string_helpers.cc ) s.files += %w( src/core/lib/slice/slice_string_helpers.h ) s.files += %w( src/core/lib/slice/slice_utils.h ) s.files += %w( src/core/lib/slice/slice_weak_hash_table.h ) s.files += %w( src/core/lib/surface/api_trace.cc ) s.files += %w( src/core/lib/surface/api_trace.h ) s.files += %w( src/core/lib/surface/byte_buffer.cc ) s.files += %w( src/core/lib/surface/byte_buffer_reader.cc ) s.files += %w( src/core/lib/surface/call.cc ) s.files += %w( src/core/lib/surface/call.h ) s.files += %w( src/core/lib/surface/call_details.cc ) s.files += %w( src/core/lib/surface/call_log_batch.cc ) s.files += %w( src/core/lib/surface/call_test_only.h ) s.files += %w( src/core/lib/surface/channel.cc ) s.files += %w( src/core/lib/surface/channel.h ) s.files += %w( src/core/lib/surface/channel_init.cc ) s.files += %w( src/core/lib/surface/channel_init.h ) s.files += %w( src/core/lib/surface/channel_ping.cc ) s.files += %w( src/core/lib/surface/channel_stack_type.cc ) s.files += %w( src/core/lib/surface/channel_stack_type.h ) s.files += %w( src/core/lib/surface/completion_queue.cc ) s.files += %w( src/core/lib/surface/completion_queue.h ) s.files += %w( src/core/lib/surface/completion_queue_factory.cc ) s.files += %w( src/core/lib/surface/completion_queue_factory.h ) s.files += %w( src/core/lib/surface/event_string.cc ) s.files += %w( src/core/lib/surface/event_string.h ) s.files += %w( src/core/lib/surface/init.cc ) s.files += %w( src/core/lib/surface/init.h ) s.files += %w( src/core/lib/surface/init_secure.cc ) s.files += %w( src/core/lib/surface/lame_client.cc ) s.files += %w( src/core/lib/surface/lame_client.h ) s.files += %w( src/core/lib/surface/metadata_array.cc ) s.files += %w( src/core/lib/surface/server.cc ) s.files += %w( src/core/lib/surface/server.h ) s.files += %w( src/core/lib/surface/validate_metadata.cc ) s.files += %w( src/core/lib/surface/validate_metadata.h ) s.files += %w( src/core/lib/surface/version.cc ) s.files += %w( src/core/lib/transport/bdp_estimator.cc ) s.files += %w( src/core/lib/transport/bdp_estimator.h ) s.files += %w( src/core/lib/transport/byte_stream.cc ) s.files += %w( src/core/lib/transport/byte_stream.h ) s.files += %w( src/core/lib/transport/connectivity_state.cc ) s.files += %w( src/core/lib/transport/connectivity_state.h ) s.files += %w( src/core/lib/transport/error_utils.cc ) s.files += %w( src/core/lib/transport/error_utils.h ) s.files += %w( src/core/lib/transport/http2_errors.h ) s.files += %w( src/core/lib/transport/metadata.cc ) s.files += %w( src/core/lib/transport/metadata.h ) s.files += %w( src/core/lib/transport/metadata_batch.cc ) s.files += %w( src/core/lib/transport/metadata_batch.h ) s.files += %w( src/core/lib/transport/pid_controller.cc ) s.files += %w( src/core/lib/transport/pid_controller.h ) s.files += %w( src/core/lib/transport/static_metadata.cc ) s.files += %w( src/core/lib/transport/static_metadata.h ) s.files += %w( src/core/lib/transport/status_conversion.cc ) s.files += %w( src/core/lib/transport/status_conversion.h ) s.files += %w( src/core/lib/transport/status_metadata.cc ) s.files += %w( src/core/lib/transport/status_metadata.h ) s.files += %w( src/core/lib/transport/timeout_encoding.cc ) s.files += %w( src/core/lib/transport/timeout_encoding.h ) s.files += %w( src/core/lib/transport/transport.cc ) s.files += %w( src/core/lib/transport/transport.h ) s.files += %w( src/core/lib/transport/transport_impl.h ) s.files += %w( src/core/lib/transport/transport_op_string.cc ) s.files += %w( src/core/lib/uri/uri_parser.cc ) s.files += %w( src/core/lib/uri/uri_parser.h ) s.files += %w( src/core/plugin_registry/grpc_plugin_registry.cc ) s.files += %w( src/core/tsi/alts/crypt/aes_gcm.cc ) s.files += %w( src/core/tsi/alts/crypt/gsec.cc ) s.files += %w( src/core/tsi/alts/crypt/gsec.h ) s.files += %w( src/core/tsi/alts/frame_protector/alts_counter.cc ) s.files += %w( src/core/tsi/alts/frame_protector/alts_counter.h ) s.files += %w( src/core/tsi/alts/frame_protector/alts_crypter.cc ) s.files += %w( src/core/tsi/alts/frame_protector/alts_crypter.h ) s.files += %w( src/core/tsi/alts/frame_protector/alts_frame_protector.cc ) s.files += %w( src/core/tsi/alts/frame_protector/alts_frame_protector.h ) s.files += %w( src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc ) s.files += %w( src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h ) s.files += %w( src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc ) s.files += %w( src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc ) s.files += %w( src/core/tsi/alts/frame_protector/frame_handler.cc ) s.files += %w( src/core/tsi/alts/frame_protector/frame_handler.h ) s.files += %w( src/core/tsi/alts/handshaker/alts_handshaker_client.cc ) s.files += %w( src/core/tsi/alts/handshaker/alts_handshaker_client.h ) s.files += %w( src/core/tsi/alts/handshaker/alts_shared_resource.cc ) s.files += %w( src/core/tsi/alts/handshaker/alts_shared_resource.h ) s.files += %w( src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc ) s.files += %w( src/core/tsi/alts/handshaker/alts_tsi_handshaker.h ) s.files += %w( src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h ) s.files += %w( src/core/tsi/alts/handshaker/alts_tsi_utils.cc ) s.files += %w( src/core/tsi/alts/handshaker/alts_tsi_utils.h ) s.files += %w( src/core/tsi/alts/handshaker/transport_security_common_api.cc ) s.files += %w( src/core/tsi/alts/handshaker/transport_security_common_api.h ) s.files += %w( src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc ) s.files += %w( src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h ) s.files += %w( src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc ) s.files += %w( src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h ) s.files += %w( src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h ) s.files += %w( src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc ) s.files += %w( src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h ) s.files += %w( src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc ) s.files += %w( src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h ) s.files += %w( src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc ) s.files += %w( src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h ) s.files += %w( src/core/tsi/fake_transport_security.cc ) s.files += %w( src/core/tsi/fake_transport_security.h ) s.files += %w( src/core/tsi/local_transport_security.cc ) s.files += %w( src/core/tsi/local_transport_security.h ) s.files += %w( src/core/tsi/ssl/session_cache/ssl_session.h ) s.files += %w( src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc ) s.files += %w( src/core/tsi/ssl/session_cache/ssl_session_cache.cc ) s.files += %w( src/core/tsi/ssl/session_cache/ssl_session_cache.h ) s.files += %w( src/core/tsi/ssl/session_cache/ssl_session_openssl.cc ) s.files += %w( src/core/tsi/ssl_transport_security.cc ) s.files += %w( src/core/tsi/ssl_transport_security.h ) s.files += %w( src/core/tsi/ssl_types.h ) s.files += %w( src/core/tsi/transport_security.cc ) s.files += %w( src/core/tsi/transport_security.h ) s.files += %w( src/core/tsi/transport_security_grpc.cc ) s.files += %w( src/core/tsi/transport_security_grpc.h ) s.files += %w( src/core/tsi/transport_security_interface.h ) s.files += %w( third_party/abseil-cpp/absl/algorithm/algorithm.h ) s.files += %w( third_party/abseil-cpp/absl/base/attributes.h ) s.files += %w( third_party/abseil-cpp/absl/base/call_once.h ) s.files += %w( third_party/abseil-cpp/absl/base/casts.h ) s.files += %w( third_party/abseil-cpp/absl/base/config.h ) s.files += %w( third_party/abseil-cpp/absl/base/const_init.h ) s.files += %w( third_party/abseil-cpp/absl/base/dynamic_annotations.cc ) s.files += %w( third_party/abseil-cpp/absl/base/dynamic_annotations.h ) s.files += %w( third_party/abseil-cpp/absl/base/internal/atomic_hook.h ) s.files += %w( third_party/abseil-cpp/absl/base/internal/bits.h ) s.files += %w( third_party/abseil-cpp/absl/base/internal/cycleclock.cc ) s.files += %w( third_party/abseil-cpp/absl/base/internal/cycleclock.h ) s.files += %w( third_party/abseil-cpp/absl/base/internal/endian.h ) s.files += %w( third_party/abseil-cpp/absl/base/internal/errno_saver.h ) s.files += %w( third_party/abseil-cpp/absl/base/internal/hide_ptr.h ) s.files += %w( third_party/abseil-cpp/absl/base/internal/identity.h ) s.files += %w( third_party/abseil-cpp/absl/base/internal/inline_variable.h ) s.files += %w( third_party/abseil-cpp/absl/base/internal/invoke.h ) s.files += %w( third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h ) s.files += %w( third_party/abseil-cpp/absl/base/internal/per_thread_tls.h ) s.files += %w( third_party/abseil-cpp/absl/base/internal/raw_logging.cc ) s.files += %w( third_party/abseil-cpp/absl/base/internal/raw_logging.h ) s.files += %w( third_party/abseil-cpp/absl/base/internal/scheduling_mode.h ) s.files += %w( third_party/abseil-cpp/absl/base/internal/spinlock.cc ) s.files += %w( third_party/abseil-cpp/absl/base/internal/spinlock.h ) s.files += %w( third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc ) s.files += %w( third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc ) s.files += %w( third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc ) s.files += %w( third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc ) s.files += %w( third_party/abseil-cpp/absl/base/internal/spinlock_wait.h ) s.files += %w( third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc ) s.files += %w( third_party/abseil-cpp/absl/base/internal/sysinfo.cc ) s.files += %w( third_party/abseil-cpp/absl/base/internal/sysinfo.h ) s.files += %w( third_party/abseil-cpp/absl/base/internal/thread_annotations.h ) s.files += %w( third_party/abseil-cpp/absl/base/internal/thread_identity.cc ) s.files += %w( third_party/abseil-cpp/absl/base/internal/thread_identity.h ) s.files += %w( third_party/abseil-cpp/absl/base/internal/throw_delegate.cc ) s.files += %w( third_party/abseil-cpp/absl/base/internal/throw_delegate.h ) s.files += %w( third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h ) s.files += %w( third_party/abseil-cpp/absl/base/internal/unaligned_access.h ) s.files += %w( third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc ) s.files += %w( third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h ) s.files += %w( third_party/abseil-cpp/absl/base/log_severity.cc ) s.files += %w( third_party/abseil-cpp/absl/base/log_severity.h ) s.files += %w( third_party/abseil-cpp/absl/base/macros.h ) s.files += %w( third_party/abseil-cpp/absl/base/optimization.h ) s.files += %w( third_party/abseil-cpp/absl/base/options.h ) s.files += %w( third_party/abseil-cpp/absl/base/policy_checks.h ) s.files += %w( third_party/abseil-cpp/absl/base/port.h ) s.files += %w( third_party/abseil-cpp/absl/base/thread_annotations.h ) s.files += %w( third_party/abseil-cpp/absl/container/inlined_vector.h ) s.files += %w( third_party/abseil-cpp/absl/container/internal/compressed_tuple.h ) s.files += %w( third_party/abseil-cpp/absl/container/internal/inlined_vector.h ) s.files += %w( third_party/abseil-cpp/absl/memory/memory.h ) s.files += %w( third_party/abseil-cpp/absl/meta/type_traits.h ) s.files += %w( third_party/abseil-cpp/absl/numeric/int128.cc ) s.files += %w( third_party/abseil-cpp/absl/numeric/int128.h ) s.files += %w( third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc ) s.files += %w( third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc ) s.files += %w( third_party/abseil-cpp/absl/strings/ascii.cc ) s.files += %w( third_party/abseil-cpp/absl/strings/ascii.h ) s.files += %w( third_party/abseil-cpp/absl/strings/charconv.cc ) s.files += %w( third_party/abseil-cpp/absl/strings/charconv.h ) s.files += %w( third_party/abseil-cpp/absl/strings/escaping.cc ) s.files += %w( third_party/abseil-cpp/absl/strings/escaping.h ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/char_map.h ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/charconv_parse.h ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/escaping.cc ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/escaping.h ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/memutil.cc ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/memutil.h ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/ostringstream.cc ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/ostringstream.h ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/str_format/arg.h ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/str_format/bind.h ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/str_format/checker.h ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/str_format/extension.h ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/str_format/output.cc ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/str_format/output.h ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/str_format/parser.h ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/str_join_internal.h ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/str_split_internal.h ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/utf8.cc ) s.files += %w( third_party/abseil-cpp/absl/strings/internal/utf8.h ) s.files += %w( third_party/abseil-cpp/absl/strings/match.cc ) s.files += %w( third_party/abseil-cpp/absl/strings/match.h ) s.files += %w( third_party/abseil-cpp/absl/strings/numbers.cc ) s.files += %w( third_party/abseil-cpp/absl/strings/numbers.h ) s.files += %w( third_party/abseil-cpp/absl/strings/str_cat.cc ) s.files += %w( third_party/abseil-cpp/absl/strings/str_cat.h ) s.files += %w( third_party/abseil-cpp/absl/strings/str_format.h ) s.files += %w( third_party/abseil-cpp/absl/strings/str_join.h ) s.files += %w( third_party/abseil-cpp/absl/strings/str_replace.cc ) s.files += %w( third_party/abseil-cpp/absl/strings/str_replace.h ) s.files += %w( third_party/abseil-cpp/absl/strings/str_split.cc ) s.files += %w( third_party/abseil-cpp/absl/strings/str_split.h ) s.files += %w( third_party/abseil-cpp/absl/strings/string_view.cc ) s.files += %w( third_party/abseil-cpp/absl/strings/string_view.h ) s.files += %w( third_party/abseil-cpp/absl/strings/strip.h ) s.files += %w( third_party/abseil-cpp/absl/strings/substitute.cc ) s.files += %w( third_party/abseil-cpp/absl/strings/substitute.h ) s.files += %w( third_party/abseil-cpp/absl/time/civil_time.cc ) s.files += %w( third_party/abseil-cpp/absl/time/civil_time.h ) s.files += %w( third_party/abseil-cpp/absl/time/clock.cc ) s.files += %w( third_party/abseil-cpp/absl/time/clock.h ) s.files += %w( third_party/abseil-cpp/absl/time/duration.cc ) s.files += %w( third_party/abseil-cpp/absl/time/format.cc ) s.files += %w( third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h ) s.files += %w( third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h ) s.files += %w( third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h ) s.files += %w( third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h ) s.files += %w( third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc ) s.files += %w( third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc ) s.files += %w( third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h ) s.files += %w( third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc ) s.files += %w( third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc ) s.files += %w( third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h ) s.files += %w( third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc ) s.files += %w( third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h ) s.files += %w( third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc ) s.files += %w( third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h ) s.files += %w( third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc ) s.files += %w( third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h ) s.files += %w( third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc ) s.files += %w( third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc ) s.files += %w( third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h ) s.files += %w( third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h ) s.files += %w( third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc ) s.files += %w( third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc ) s.files += %w( third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc ) s.files += %w( third_party/abseil-cpp/absl/time/time.cc ) s.files += %w( third_party/abseil-cpp/absl/time/time.h ) s.files += %w( third_party/abseil-cpp/absl/types/bad_optional_access.cc ) s.files += %w( third_party/abseil-cpp/absl/types/bad_optional_access.h ) s.files += %w( third_party/abseil-cpp/absl/types/internal/optional.h ) s.files += %w( third_party/abseil-cpp/absl/types/internal/span.h ) s.files += %w( third_party/abseil-cpp/absl/types/optional.h ) s.files += %w( third_party/abseil-cpp/absl/types/span.h ) s.files += %w( third_party/abseil-cpp/absl/utility/utility.h ) s.files += %w( third_party/address_sorting/address_sorting.c ) s.files += %w( third_party/address_sorting/address_sorting_internal.h ) s.files += %w( third_party/address_sorting/address_sorting_posix.c ) s.files += %w( third_party/address_sorting/address_sorting_windows.c ) s.files += %w( third_party/address_sorting/include/address_sorting/address_sorting.h ) s.files += %w( third_party/boringssl-with-bazel/err_data.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/base64/base64.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/bio/bio.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/bio/connect.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/bio/fd.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/bio/file.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/bio/hexdump.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/bio/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/bio/pair.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/bio/printf.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/bio/socket.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/buf/buf.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/chacha/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesccm.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/cmac/cmac.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/conf/conf.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/conf/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-fuchsia.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-linux.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/cpu-arm.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/cpu-intel.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/cpu-ppc64le.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/crypto.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/dh/check.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/dh/dh.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/dh/dh_asn1.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/dh/params.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/engine/engine.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/err/err.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/err/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/digestsign.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/evp.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/pbkdf.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/print.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/sign.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/ex_data.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/add.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/asm/x86_64-gcc.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/generic.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/jacobi.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/aead.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_des.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/hmac.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1-altivec.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/hkdf/hkdf.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/hrss/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/mem.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/obj/obj.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/obj/obj_xref.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/poly1305/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/pool/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/pool/pool.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/rand_extra/forkunsafe.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/rc4/rc4.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/refcount_c11.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/refcount_lock.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/stack/stack.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/thread.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/thread_none.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/thread_pthread.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/thread_win.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/by_file.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/charmap.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/t_req.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509name.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_all.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_info.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_name.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_req.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_val.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c ) s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/aead.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/aes.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/asn1.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/asn1_mac.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/asn1t.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/base.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/base64.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/bio.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/blowfish.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/bn.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/buf.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/buffer.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/bytestring.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/cast.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/chacha.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/cipher.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/cmac.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/conf.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/cpu.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/crypto.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/curve25519.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/des.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/dh.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/digest.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/dsa.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/dtls1.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/e_os2.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/ec.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/ec_key.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/ecdh.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/engine.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/err.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/evp.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/ex_data.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/hkdf.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/hmac.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/hrss.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/is_boringssl.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/lhash.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/md4.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/md5.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/mem.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/nid.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/obj.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/obj_mac.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/objects.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/opensslv.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/ossl_typ.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/pem.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/pkcs12.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/poly1305.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/pool.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/rand.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/rc4.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/ripemd.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/rsa.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/safestack.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/sha.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/siphash.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/span.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/srtp.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/ssl.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/ssl3.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/stack.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/thread.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/tls1.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/trust_token.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/type_check.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/x509.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h ) s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/x509v3.h ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/d1_both.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/d1_lib.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/dtls_method.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/dtls_record.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/handoff.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/handshake.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/handshake_client.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/handshake_server.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/internal.h ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/s3_both.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/s3_lib.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_file.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_session.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/t1_enc.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/t1_lib.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/tls13_both.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/tls13_client.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/tls13_server.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/tls_method.cc ) s.files += %w( third_party/boringssl-with-bazel/src/ssl/tls_record.cc ) s.files += %w( third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h ) s.files += %w( third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h ) s.files += %w( third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h ) s.files += %w( third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h ) s.files += %w( third_party/cares/ares_build.h ) s.files += %w( third_party/cares/cares/ares.h ) s.files += %w( third_party/cares/cares/ares__close_sockets.c ) s.files += %w( third_party/cares/cares/ares__get_hostent.c ) s.files += %w( third_party/cares/cares/ares__read_line.c ) s.files += %w( third_party/cares/cares/ares__timeval.c ) s.files += %w( third_party/cares/cares/ares_cancel.c ) s.files += %w( third_party/cares/cares/ares_create_query.c ) s.files += %w( third_party/cares/cares/ares_data.c ) s.files += %w( third_party/cares/cares/ares_data.h ) s.files += %w( third_party/cares/cares/ares_destroy.c ) s.files += %w( third_party/cares/cares/ares_dns.h ) s.files += %w( third_party/cares/cares/ares_expand_name.c ) s.files += %w( third_party/cares/cares/ares_expand_string.c ) s.files += %w( third_party/cares/cares/ares_fds.c ) s.files += %w( third_party/cares/cares/ares_free_hostent.c ) s.files += %w( third_party/cares/cares/ares_free_string.c ) s.files += %w( third_party/cares/cares/ares_getenv.c ) s.files += %w( third_party/cares/cares/ares_getenv.h ) s.files += %w( third_party/cares/cares/ares_gethostbyaddr.c ) s.files += %w( third_party/cares/cares/ares_gethostbyname.c ) s.files += %w( third_party/cares/cares/ares_getnameinfo.c ) s.files += %w( third_party/cares/cares/ares_getopt.c ) s.files += %w( third_party/cares/cares/ares_getopt.h ) s.files += %w( third_party/cares/cares/ares_getsock.c ) s.files += %w( third_party/cares/cares/ares_inet_net_pton.h ) s.files += %w( third_party/cares/cares/ares_init.c ) s.files += %w( third_party/cares/cares/ares_iphlpapi.h ) s.files += %w( third_party/cares/cares/ares_ipv6.h ) s.files += %w( third_party/cares/cares/ares_library_init.c ) s.files += %w( third_party/cares/cares/ares_library_init.h ) s.files += %w( third_party/cares/cares/ares_llist.c ) s.files += %w( third_party/cares/cares/ares_llist.h ) s.files += %w( third_party/cares/cares/ares_mkquery.c ) s.files += %w( third_party/cares/cares/ares_nowarn.c ) s.files += %w( third_party/cares/cares/ares_nowarn.h ) s.files += %w( third_party/cares/cares/ares_options.c ) s.files += %w( third_party/cares/cares/ares_parse_a_reply.c ) s.files += %w( third_party/cares/cares/ares_parse_aaaa_reply.c ) s.files += %w( third_party/cares/cares/ares_parse_mx_reply.c ) s.files += %w( third_party/cares/cares/ares_parse_naptr_reply.c ) s.files += %w( third_party/cares/cares/ares_parse_ns_reply.c ) s.files += %w( third_party/cares/cares/ares_parse_ptr_reply.c ) s.files += %w( third_party/cares/cares/ares_parse_soa_reply.c ) s.files += %w( third_party/cares/cares/ares_parse_srv_reply.c ) s.files += %w( third_party/cares/cares/ares_parse_txt_reply.c ) s.files += %w( third_party/cares/cares/ares_platform.c ) s.files += %w( third_party/cares/cares/ares_platform.h ) s.files += %w( third_party/cares/cares/ares_private.h ) s.files += %w( third_party/cares/cares/ares_process.c ) s.files += %w( third_party/cares/cares/ares_query.c ) s.files += %w( third_party/cares/cares/ares_rules.h ) s.files += %w( third_party/cares/cares/ares_search.c ) s.files += %w( third_party/cares/cares/ares_send.c ) s.files += %w( third_party/cares/cares/ares_setup.h ) s.files += %w( third_party/cares/cares/ares_strcasecmp.c ) s.files += %w( third_party/cares/cares/ares_strcasecmp.h ) s.files += %w( third_party/cares/cares/ares_strdup.c ) s.files += %w( third_party/cares/cares/ares_strdup.h ) s.files += %w( third_party/cares/cares/ares_strerror.c ) s.files += %w( third_party/cares/cares/ares_strsplit.c ) s.files += %w( third_party/cares/cares/ares_strsplit.h ) s.files += %w( third_party/cares/cares/ares_timeout.c ) s.files += %w( third_party/cares/cares/ares_version.c ) s.files += %w( third_party/cares/cares/ares_version.h ) s.files += %w( third_party/cares/cares/ares_writev.c ) s.files += %w( third_party/cares/cares/bitncmp.c ) s.files += %w( third_party/cares/cares/bitncmp.h ) s.files += %w( third_party/cares/cares/config-win32.h ) s.files += %w( third_party/cares/cares/inet_net_pton.c ) s.files += %w( third_party/cares/cares/inet_ntop.c ) s.files += %w( third_party/cares/cares/setup_once.h ) s.files += %w( third_party/cares/cares/windows_port.c ) s.files += %w( third_party/cares/config_darwin/ares_config.h ) s.files += %w( third_party/cares/config_freebsd/ares_config.h ) s.files += %w( third_party/cares/config_linux/ares_config.h ) s.files += %w( third_party/cares/config_openbsd/ares_config.h ) s.files += %w( third_party/upb/upb/decode.c ) s.files += %w( third_party/upb/upb/decode.h ) s.files += %w( third_party/upb/upb/encode.c ) s.files += %w( third_party/upb/upb/encode.h ) s.files += %w( third_party/upb/upb/generated_util.h ) s.files += %w( third_party/upb/upb/msg.c ) s.files += %w( third_party/upb/upb/msg.h ) s.files += %w( third_party/upb/upb/port.c ) s.files += %w( third_party/upb/upb/port_def.inc ) s.files += %w( third_party/upb/upb/port_undef.inc ) s.files += %w( third_party/upb/upb/table.c ) s.files += %w( third_party/upb/upb/table.int.h ) s.files += %w( third_party/upb/upb/upb.c ) s.files += %w( third_party/upb/upb/upb.h ) s.files += %w( third_party/zlib/adler32.c ) s.files += %w( third_party/zlib/compress.c ) s.files += %w( third_party/zlib/crc32.c ) s.files += %w( third_party/zlib/crc32.h ) s.files += %w( third_party/zlib/deflate.c ) s.files += %w( third_party/zlib/deflate.h ) s.files += %w( third_party/zlib/gzclose.c ) s.files += %w( third_party/zlib/gzguts.h ) s.files += %w( third_party/zlib/gzlib.c ) s.files += %w( third_party/zlib/gzread.c ) s.files += %w( third_party/zlib/gzwrite.c ) s.files += %w( third_party/zlib/infback.c ) s.files += %w( third_party/zlib/inffast.c ) s.files += %w( third_party/zlib/inffast.h ) s.files += %w( third_party/zlib/inffixed.h ) s.files += %w( third_party/zlib/inflate.c ) s.files += %w( third_party/zlib/inflate.h ) s.files += %w( third_party/zlib/inftrees.c ) s.files += %w( third_party/zlib/inftrees.h ) s.files += %w( third_party/zlib/trees.c ) s.files += %w( third_party/zlib/trees.h ) s.files += %w( third_party/zlib/uncompr.c ) s.files += %w( third_party/zlib/zconf.h ) s.files += %w( third_party/zlib/zlib.h ) s.files += %w( third_party/zlib/zutil.c ) s.files += %w( third_party/zlib/zutil.h ) end grpc-1.30.2/grpc.gyp000066400000000000000000002752011370425124100142120ustar00rootroot00000000000000# GRPC GYP build file # This file has been automatically generated from a template file. # Please look at the templates directory instead. # This file can be regenerated from the template by running # tools/buildgen/generate_projects.sh # Copyright 2015 gRPC 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 # # 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. { 'variables': { # The openssl and zlib dependencies must be passed in as variables # defined in an included gypi file, usually common.gypi. 'openssl_gyp_target%': 'Please Define openssl_gyp_target variable', 'zlib_gyp_target%': 'Please Define zlib_gyp_target variable', 'grpc_gcov%': 'false', 'grpc_alpine%': 'false', }, 'target_defaults': { 'configurations': { 'Release': { 'cflags': [ '-O2', '-Wframe-larger-than=16384', ], 'defines': [ 'NDEBUG', ], }, 'Debug': { 'cflags': [ '-O0', ], 'defines': [ '_DEBUG', 'DEBUG', ], }, }, 'cflags': [ '-g', '-Wall', '-Wextra', '-DOSATOMIC_USE_INLINED=1', '-Ithird_party/abseil-cpp', '-Ithird_party/upb', '-Isrc/core/ext/upb-generated', ], 'ldflags': [ '-g', ], 'cflags_c': [ '-Werror', '-std=c99', ], 'cflags_cc': [ '-Werror', '-std=c++11', ], 'include_dirs': [ '.', '../..', 'include', ], 'defines': [ 'GRPC_ARES=0', ], 'dependencies': [ '<(openssl_gyp_target)', '<(zlib_gyp_target)', ], 'conditions': [ ['grpc_gcov=="true"', { 'cflags': [ '-O0', '-fprofile-arcs', '-ftest-coverage', '-Wno-return-type', ], 'defines': [ '_DEBUG', 'DEBUG', 'GPR_GCOV', ], 'ldflags': [ '-fprofile-arcs', '-ftest-coverage', '-rdynamic', '-lstdc++', ], }], ['grpc_alpine=="true"', { 'defines': [ 'GPR_MUSL_LIBC_COMPAT' ] }], ['OS == "win"', { 'defines': [ '_WIN32_WINNT=0x0600', 'WIN32_LEAN_AND_MEAN', '_HAS_EXCEPTIONS=0', 'UNICODE', '_UNICODE', 'NOMINMAX', ], 'msvs_settings': { 'VCCLCompilerTool': { 'RuntimeLibrary': 1, # static debug } }, "libraries": [ "ws2_32" ] }], ['OS == "mac"', { 'xcode_settings': { 'OTHER_CFLAGS': [ '-g', '-Wall', '-Wextra', '-DOSATOMIC_USE_INLINED=1', '-Ithird_party/abseil-cpp', '-Ithird_party/upb', '-Isrc/core/ext/upb-generated', ], 'OTHER_CPLUSPLUSFLAGS': [ '-g', '-Wall', '-Wextra', '-DOSATOMIC_USE_INLINED=1', '-Ithird_party/abseil-cpp', '-Ithird_party/upb', '-Isrc/core/ext/upb-generated', '-stdlib=libc++', '-std=c++11', '-Wno-error=deprecated-declarations', ], }, }] ] }, 'targets': [ { 'target_name': 'address_sorting', 'type': 'static_library', 'dependencies': [ ], 'sources': [ 'third_party/address_sorting/address_sorting.c', 'third_party/address_sorting/address_sorting_posix.c', 'third_party/address_sorting/address_sorting_windows.c', ], }, { 'target_name': 'end2end_nosec_tests', 'type': 'static_library', 'dependencies': [ 'grpc_test_util', 'grpc', 'gpr', 'address_sorting', 'upb', ], 'sources': [ 'test/core/end2end/cq_verifier.cc', 'test/core/end2end/data/client_certs.cc', 'test/core/end2end/data/server1_cert.cc', 'test/core/end2end/data/server1_key.cc', 'test/core/end2end/data/test_root_cert.cc', 'test/core/end2end/end2end_nosec_tests.cc', 'test/core/end2end/end2end_test_utils.cc', 'test/core/end2end/fixtures/http_proxy_fixture.cc', 'test/core/end2end/fixtures/local_util.cc', 'test/core/end2end/fixtures/proxy.cc', 'test/core/end2end/tests/authority_not_supported.cc', 'test/core/end2end/tests/bad_hostname.cc', 'test/core/end2end/tests/bad_ping.cc', 'test/core/end2end/tests/binary_metadata.cc', 'test/core/end2end/tests/call_host_override.cc', 'test/core/end2end/tests/cancel_after_accept.cc', 'test/core/end2end/tests/cancel_after_client_done.cc', 'test/core/end2end/tests/cancel_after_invoke.cc', 'test/core/end2end/tests/cancel_after_round_trip.cc', 'test/core/end2end/tests/cancel_before_invoke.cc', 'test/core/end2end/tests/cancel_in_a_vacuum.cc', 'test/core/end2end/tests/cancel_with_status.cc', 'test/core/end2end/tests/channelz.cc', 'test/core/end2end/tests/client_streaming.cc', 'test/core/end2end/tests/compressed_payload.cc', 'test/core/end2end/tests/connectivity.cc', 'test/core/end2end/tests/default_host.cc', 'test/core/end2end/tests/disappearing_server.cc', 'test/core/end2end/tests/empty_batch.cc', 'test/core/end2end/tests/filter_call_init_fails.cc', 'test/core/end2end/tests/filter_causes_close.cc', 'test/core/end2end/tests/filter_context.cc', 'test/core/end2end/tests/filter_latency.cc', 'test/core/end2end/tests/filter_status_code.cc', 'test/core/end2end/tests/graceful_server_shutdown.cc', 'test/core/end2end/tests/high_initial_seqno.cc', 'test/core/end2end/tests/hpack_size.cc', 'test/core/end2end/tests/idempotent_request.cc', 'test/core/end2end/tests/invoke_large_request.cc', 'test/core/end2end/tests/keepalive_timeout.cc', 'test/core/end2end/tests/large_metadata.cc', 'test/core/end2end/tests/max_concurrent_streams.cc', 'test/core/end2end/tests/max_connection_age.cc', 'test/core/end2end/tests/max_connection_idle.cc', 'test/core/end2end/tests/max_message_length.cc', 'test/core/end2end/tests/negative_deadline.cc', 'test/core/end2end/tests/no_error_on_hotpath.cc', 'test/core/end2end/tests/no_logging.cc', 'test/core/end2end/tests/no_op.cc', 'test/core/end2end/tests/payload.cc', 'test/core/end2end/tests/ping.cc', 'test/core/end2end/tests/ping_pong_streaming.cc', 'test/core/end2end/tests/proxy_auth.cc', 'test/core/end2end/tests/registered_call.cc', 'test/core/end2end/tests/request_with_flags.cc', 'test/core/end2end/tests/request_with_payload.cc', 'test/core/end2end/tests/resource_quota_server.cc', 'test/core/end2end/tests/retry.cc', 'test/core/end2end/tests/retry_cancellation.cc', 'test/core/end2end/tests/retry_disabled.cc', 'test/core/end2end/tests/retry_exceeds_buffer_size_in_initial_batch.cc', 'test/core/end2end/tests/retry_exceeds_buffer_size_in_subsequent_batch.cc', 'test/core/end2end/tests/retry_non_retriable_status.cc', 'test/core/end2end/tests/retry_non_retriable_status_before_recv_trailing_metadata_started.cc', 'test/core/end2end/tests/retry_recv_initial_metadata.cc', 'test/core/end2end/tests/retry_recv_message.cc', 'test/core/end2end/tests/retry_server_pushback_delay.cc', 'test/core/end2end/tests/retry_server_pushback_disabled.cc', 'test/core/end2end/tests/retry_streaming.cc', 'test/core/end2end/tests/retry_streaming_after_commit.cc', 'test/core/end2end/tests/retry_streaming_succeeds_before_replay_finished.cc', 'test/core/end2end/tests/retry_throttled.cc', 'test/core/end2end/tests/retry_too_many_attempts.cc', 'test/core/end2end/tests/server_finishes_request.cc', 'test/core/end2end/tests/shutdown_finishes_calls.cc', 'test/core/end2end/tests/shutdown_finishes_tags.cc', 'test/core/end2end/tests/simple_cacheable_request.cc', 'test/core/end2end/tests/simple_delayed_request.cc', 'test/core/end2end/tests/simple_metadata.cc', 'test/core/end2end/tests/simple_request.cc', 'test/core/end2end/tests/stream_compression_compressed_payload.cc', 'test/core/end2end/tests/stream_compression_payload.cc', 'test/core/end2end/tests/stream_compression_ping_pong_streaming.cc', 'test/core/end2end/tests/streaming_error_response.cc', 'test/core/end2end/tests/trailing_metadata.cc', 'test/core/end2end/tests/workaround_cronet_compression.cc', 'test/core/end2end/tests/write_buffering.cc', 'test/core/end2end/tests/write_buffering_at_end.cc', ], }, { 'target_name': 'end2end_tests', 'type': 'static_library', 'dependencies': [ 'grpc_test_util', 'grpc', 'gpr', 'address_sorting', 'upb', ], 'sources': [ 'test/core/end2end/cq_verifier.cc', 'test/core/end2end/data/client_certs.cc', 'test/core/end2end/data/server1_cert.cc', 'test/core/end2end/data/server1_key.cc', 'test/core/end2end/data/test_root_cert.cc', 'test/core/end2end/end2end_test_utils.cc', 'test/core/end2end/end2end_tests.cc', 'test/core/end2end/fixtures/http_proxy_fixture.cc', 'test/core/end2end/fixtures/local_util.cc', 'test/core/end2end/fixtures/proxy.cc', 'test/core/end2end/tests/authority_not_supported.cc', 'test/core/end2end/tests/bad_hostname.cc', 'test/core/end2end/tests/bad_ping.cc', 'test/core/end2end/tests/binary_metadata.cc', 'test/core/end2end/tests/call_creds.cc', 'test/core/end2end/tests/call_host_override.cc', 'test/core/end2end/tests/cancel_after_accept.cc', 'test/core/end2end/tests/cancel_after_client_done.cc', 'test/core/end2end/tests/cancel_after_invoke.cc', 'test/core/end2end/tests/cancel_after_round_trip.cc', 'test/core/end2end/tests/cancel_before_invoke.cc', 'test/core/end2end/tests/cancel_in_a_vacuum.cc', 'test/core/end2end/tests/cancel_with_status.cc', 'test/core/end2end/tests/channelz.cc', 'test/core/end2end/tests/client_streaming.cc', 'test/core/end2end/tests/compressed_payload.cc', 'test/core/end2end/tests/connectivity.cc', 'test/core/end2end/tests/default_host.cc', 'test/core/end2end/tests/disappearing_server.cc', 'test/core/end2end/tests/empty_batch.cc', 'test/core/end2end/tests/filter_call_init_fails.cc', 'test/core/end2end/tests/filter_causes_close.cc', 'test/core/end2end/tests/filter_context.cc', 'test/core/end2end/tests/filter_latency.cc', 'test/core/end2end/tests/filter_status_code.cc', 'test/core/end2end/tests/graceful_server_shutdown.cc', 'test/core/end2end/tests/high_initial_seqno.cc', 'test/core/end2end/tests/hpack_size.cc', 'test/core/end2end/tests/idempotent_request.cc', 'test/core/end2end/tests/invoke_large_request.cc', 'test/core/end2end/tests/keepalive_timeout.cc', 'test/core/end2end/tests/large_metadata.cc', 'test/core/end2end/tests/max_concurrent_streams.cc', 'test/core/end2end/tests/max_connection_age.cc', 'test/core/end2end/tests/max_connection_idle.cc', 'test/core/end2end/tests/max_message_length.cc', 'test/core/end2end/tests/negative_deadline.cc', 'test/core/end2end/tests/no_error_on_hotpath.cc', 'test/core/end2end/tests/no_logging.cc', 'test/core/end2end/tests/no_op.cc', 'test/core/end2end/tests/payload.cc', 'test/core/end2end/tests/ping.cc', 'test/core/end2end/tests/ping_pong_streaming.cc', 'test/core/end2end/tests/proxy_auth.cc', 'test/core/end2end/tests/registered_call.cc', 'test/core/end2end/tests/request_with_flags.cc', 'test/core/end2end/tests/request_with_payload.cc', 'test/core/end2end/tests/resource_quota_server.cc', 'test/core/end2end/tests/retry.cc', 'test/core/end2end/tests/retry_cancellation.cc', 'test/core/end2end/tests/retry_disabled.cc', 'test/core/end2end/tests/retry_exceeds_buffer_size_in_initial_batch.cc', 'test/core/end2end/tests/retry_exceeds_buffer_size_in_subsequent_batch.cc', 'test/core/end2end/tests/retry_non_retriable_status.cc', 'test/core/end2end/tests/retry_non_retriable_status_before_recv_trailing_metadata_started.cc', 'test/core/end2end/tests/retry_recv_initial_metadata.cc', 'test/core/end2end/tests/retry_recv_message.cc', 'test/core/end2end/tests/retry_server_pushback_delay.cc', 'test/core/end2end/tests/retry_server_pushback_disabled.cc', 'test/core/end2end/tests/retry_streaming.cc', 'test/core/end2end/tests/retry_streaming_after_commit.cc', 'test/core/end2end/tests/retry_streaming_succeeds_before_replay_finished.cc', 'test/core/end2end/tests/retry_throttled.cc', 'test/core/end2end/tests/retry_too_many_attempts.cc', 'test/core/end2end/tests/server_finishes_request.cc', 'test/core/end2end/tests/shutdown_finishes_calls.cc', 'test/core/end2end/tests/shutdown_finishes_tags.cc', 'test/core/end2end/tests/simple_cacheable_request.cc', 'test/core/end2end/tests/simple_delayed_request.cc', 'test/core/end2end/tests/simple_metadata.cc', 'test/core/end2end/tests/simple_request.cc', 'test/core/end2end/tests/stream_compression_compressed_payload.cc', 'test/core/end2end/tests/stream_compression_payload.cc', 'test/core/end2end/tests/stream_compression_ping_pong_streaming.cc', 'test/core/end2end/tests/streaming_error_response.cc', 'test/core/end2end/tests/trailing_metadata.cc', 'test/core/end2end/tests/workaround_cronet_compression.cc', 'test/core/end2end/tests/write_buffering.cc', 'test/core/end2end/tests/write_buffering_at_end.cc', ], }, { 'target_name': 'gpr', 'type': 'static_library', 'dependencies': [ 'absl/time:time', 'absl/strings:strings', 'absl/strings:str_format', 'absl/memory:memory', ], 'sources': [ 'src/core/lib/gpr/alloc.cc', 'src/core/lib/gpr/atm.cc', 'src/core/lib/gpr/cpu_iphone.cc', 'src/core/lib/gpr/cpu_linux.cc', 'src/core/lib/gpr/cpu_posix.cc', 'src/core/lib/gpr/cpu_windows.cc', 'src/core/lib/gpr/env_linux.cc', 'src/core/lib/gpr/env_posix.cc', 'src/core/lib/gpr/env_windows.cc', 'src/core/lib/gpr/log.cc', 'src/core/lib/gpr/log_android.cc', 'src/core/lib/gpr/log_linux.cc', 'src/core/lib/gpr/log_posix.cc', 'src/core/lib/gpr/log_windows.cc', 'src/core/lib/gpr/murmur_hash.cc', 'src/core/lib/gpr/string.cc', 'src/core/lib/gpr/string_posix.cc', 'src/core/lib/gpr/string_util_windows.cc', 'src/core/lib/gpr/string_windows.cc', 'src/core/lib/gpr/sync.cc', 'src/core/lib/gpr/sync_abseil.cc', 'src/core/lib/gpr/sync_posix.cc', 'src/core/lib/gpr/sync_windows.cc', 'src/core/lib/gpr/time.cc', 'src/core/lib/gpr/time_posix.cc', 'src/core/lib/gpr/time_precise.cc', 'src/core/lib/gpr/time_windows.cc', 'src/core/lib/gpr/tls_pthread.cc', 'src/core/lib/gpr/tmpfile_msys.cc', 'src/core/lib/gpr/tmpfile_posix.cc', 'src/core/lib/gpr/tmpfile_windows.cc', 'src/core/lib/gpr/wrap_memcpy.cc', 'src/core/lib/gprpp/arena.cc', 'src/core/lib/gprpp/fork.cc', 'src/core/lib/gprpp/global_config_env.cc', 'src/core/lib/gprpp/host_port.cc', 'src/core/lib/gprpp/mpscq.cc', 'src/core/lib/gprpp/thd_posix.cc', 'src/core/lib/gprpp/thd_windows.cc', 'src/core/lib/profiling/basic_timers.cc', 'src/core/lib/profiling/stap_timers.cc', ], }, { 'target_name': 'grpc', 'type': 'static_library', 'dependencies': [ 'gpr', 'address_sorting', 'upb', 'absl/types:optional', 'absl/strings:strings', 'absl/container:inlined_vector', ], 'sources': [ 'src/core/ext/filters/census/grpc_context.cc', 'src/core/ext/filters/client_channel/backend_metric.cc', 'src/core/ext/filters/client_channel/backup_poller.cc', 'src/core/ext/filters/client_channel/channel_connectivity.cc', 'src/core/ext/filters/client_channel/client_channel.cc', 'src/core/ext/filters/client_channel/client_channel_channelz.cc', 'src/core/ext/filters/client_channel/client_channel_factory.cc', 'src/core/ext/filters/client_channel/client_channel_plugin.cc', 'src/core/ext/filters/client_channel/global_subchannel_pool.cc', 'src/core/ext/filters/client_channel/health/health_check_client.cc', 'src/core/ext/filters/client_channel/http_connect_handshaker.cc', 'src/core/ext/filters/client_channel/http_proxy.cc', 'src/core/ext/filters/client_channel/lb_policy.cc', 'src/core/ext/filters/client_channel/lb_policy/address_filtering.cc', 'src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc', 'src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc', 'src/core/ext/filters/client_channel/lb_policy/priority/priority.cc', 'src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc', 'src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc', 'src/core/ext/filters/client_channel/lb_policy/xds/cds.cc', 'src/core/ext/filters/client_channel/lb_policy/xds/eds.cc', 'src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc', 'src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc', 'src/core/ext/filters/client_channel/lb_policy_registry.cc', 'src/core/ext/filters/client_channel/local_subchannel_pool.cc', 'src/core/ext/filters/client_channel/parse_address.cc', 'src/core/ext/filters/client_channel/proxy_mapper_registry.cc', 'src/core/ext/filters/client_channel/resolver.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc', 'src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc', 'src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc', 'src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc', 'src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc', 'src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc', 'src/core/ext/filters/client_channel/resolver_registry.cc', 'src/core/ext/filters/client_channel/resolver_result_parsing.cc', 'src/core/ext/filters/client_channel/resolving_lb_policy.cc', 'src/core/ext/filters/client_channel/retry_throttle.cc', 'src/core/ext/filters/client_channel/server_address.cc', 'src/core/ext/filters/client_channel/service_config.cc', 'src/core/ext/filters/client_channel/service_config_parser.cc', 'src/core/ext/filters/client_channel/subchannel.cc', 'src/core/ext/filters/client_channel/subchannel_pool_interface.cc', 'src/core/ext/filters/client_channel/xds/xds_api.cc', 'src/core/ext/filters/client_channel/xds/xds_bootstrap.cc', 'src/core/ext/filters/client_channel/xds/xds_channel_secure.cc', 'src/core/ext/filters/client_channel/xds/xds_client.cc', 'src/core/ext/filters/client_channel/xds/xds_client_stats.cc', 'src/core/ext/filters/client_idle/client_idle_filter.cc', 'src/core/ext/filters/deadline/deadline_filter.cc', 'src/core/ext/filters/http/client/http_client_filter.cc', 'src/core/ext/filters/http/client_authority_filter.cc', 'src/core/ext/filters/http/http_filters_plugin.cc', 'src/core/ext/filters/http/message_compress/message_compress_filter.cc', 'src/core/ext/filters/http/message_compress/message_decompress_filter.cc', 'src/core/ext/filters/http/server/http_server_filter.cc', 'src/core/ext/filters/max_age/max_age_filter.cc', 'src/core/ext/filters/message_size/message_size_filter.cc', 'src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc', 'src/core/ext/filters/workarounds/workaround_utils.cc', 'src/core/ext/transport/chttp2/alpn/alpn.cc', 'src/core/ext/transport/chttp2/client/authority.cc', 'src/core/ext/transport/chttp2/client/chttp2_connector.cc', 'src/core/ext/transport/chttp2/client/insecure/channel_create.cc', 'src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc', 'src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc', 'src/core/ext/transport/chttp2/server/chttp2_server.cc', 'src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc', 'src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc', 'src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc', 'src/core/ext/transport/chttp2/transport/bin_decoder.cc', 'src/core/ext/transport/chttp2/transport/bin_encoder.cc', 'src/core/ext/transport/chttp2/transport/chttp2_plugin.cc', 'src/core/ext/transport/chttp2/transport/chttp2_transport.cc', 'src/core/ext/transport/chttp2/transport/context_list.cc', 'src/core/ext/transport/chttp2/transport/flow_control.cc', 'src/core/ext/transport/chttp2/transport/frame_data.cc', 'src/core/ext/transport/chttp2/transport/frame_goaway.cc', 'src/core/ext/transport/chttp2/transport/frame_ping.cc', 'src/core/ext/transport/chttp2/transport/frame_rst_stream.cc', 'src/core/ext/transport/chttp2/transport/frame_settings.cc', 'src/core/ext/transport/chttp2/transport/frame_window_update.cc', 'src/core/ext/transport/chttp2/transport/hpack_encoder.cc', 'src/core/ext/transport/chttp2/transport/hpack_parser.cc', 'src/core/ext/transport/chttp2/transport/hpack_table.cc', 'src/core/ext/transport/chttp2/transport/http2_settings.cc', 'src/core/ext/transport/chttp2/transport/huffsyms.cc', 'src/core/ext/transport/chttp2/transport/incoming_metadata.cc', 'src/core/ext/transport/chttp2/transport/parsing.cc', 'src/core/ext/transport/chttp2/transport/stream_lists.cc', 'src/core/ext/transport/chttp2/transport/stream_map.cc', 'src/core/ext/transport/chttp2/transport/varint.cc', 'src/core/ext/transport/chttp2/transport/writing.cc', 'src/core/ext/transport/inproc/inproc_plugin.cc', 'src/core/ext/transport/inproc/inproc_transport.cc', 'src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c', 'src/core/ext/upb-generated/envoy/annotations/resource.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/cds.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/eds.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/lds.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/listener.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/rds.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/route.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/srds.upb.c', 'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c', 'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c', 'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c', 'src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c', 'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c', 'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c', 'src/core/ext/upb-generated/envoy/type/http.upb.c', 'src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c', 'src/core/ext/upb-generated/envoy/type/matcher/string.upb.c', 'src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c', 'src/core/ext/upb-generated/envoy/type/percent.upb.c', 'src/core/ext/upb-generated/envoy/type/range.upb.c', 'src/core/ext/upb-generated/envoy/type/semantic_version.upb.c', 'src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c', 'src/core/ext/upb-generated/gogoproto/gogo.upb.c', 'src/core/ext/upb-generated/google/api/annotations.upb.c', 'src/core/ext/upb-generated/google/api/http.upb.c', 'src/core/ext/upb-generated/google/protobuf/any.upb.c', 'src/core/ext/upb-generated/google/protobuf/descriptor.upb.c', 'src/core/ext/upb-generated/google/protobuf/duration.upb.c', 'src/core/ext/upb-generated/google/protobuf/empty.upb.c', 'src/core/ext/upb-generated/google/protobuf/struct.upb.c', 'src/core/ext/upb-generated/google/protobuf/timestamp.upb.c', 'src/core/ext/upb-generated/google/protobuf/wrappers.upb.c', 'src/core/ext/upb-generated/google/rpc/status.upb.c', 'src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c', 'src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c', 'src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c', 'src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c', 'src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c', 'src/core/ext/upb-generated/udpa/annotations/migrate.upb.c', 'src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c', 'src/core/ext/upb-generated/udpa/annotations/status.upb.c', 'src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c', 'src/core/ext/upb-generated/validate/validate.upb.c', 'src/core/lib/avl/avl.cc', 'src/core/lib/backoff/backoff.cc', 'src/core/lib/channel/channel_args.cc', 'src/core/lib/channel/channel_stack.cc', 'src/core/lib/channel/channel_stack_builder.cc', 'src/core/lib/channel/channel_trace.cc', 'src/core/lib/channel/channelz.cc', 'src/core/lib/channel/channelz_registry.cc', 'src/core/lib/channel/connected_channel.cc', 'src/core/lib/channel/handshaker.cc', 'src/core/lib/channel/handshaker_registry.cc', 'src/core/lib/channel/status_util.cc', 'src/core/lib/compression/compression.cc', 'src/core/lib/compression/compression_args.cc', 'src/core/lib/compression/compression_internal.cc', 'src/core/lib/compression/message_compress.cc', 'src/core/lib/compression/stream_compression.cc', 'src/core/lib/compression/stream_compression_gzip.cc', 'src/core/lib/compression/stream_compression_identity.cc', 'src/core/lib/debug/stats.cc', 'src/core/lib/debug/stats_data.cc', 'src/core/lib/debug/trace.cc', 'src/core/lib/http/format_request.cc', 'src/core/lib/http/httpcli.cc', 'src/core/lib/http/httpcli_security_connector.cc', 'src/core/lib/http/parser.cc', 'src/core/lib/iomgr/buffer_list.cc', 'src/core/lib/iomgr/call_combiner.cc', 'src/core/lib/iomgr/cfstream_handle.cc', 'src/core/lib/iomgr/combiner.cc', 'src/core/lib/iomgr/dualstack_socket_posix.cc', 'src/core/lib/iomgr/endpoint.cc', 'src/core/lib/iomgr/endpoint_cfstream.cc', 'src/core/lib/iomgr/endpoint_pair_posix.cc', 'src/core/lib/iomgr/endpoint_pair_uv.cc', 'src/core/lib/iomgr/endpoint_pair_windows.cc', 'src/core/lib/iomgr/error.cc', 'src/core/lib/iomgr/error_cfstream.cc', 'src/core/lib/iomgr/ev_apple.cc', 'src/core/lib/iomgr/ev_epoll1_linux.cc', 'src/core/lib/iomgr/ev_epollex_linux.cc', 'src/core/lib/iomgr/ev_poll_posix.cc', 'src/core/lib/iomgr/ev_posix.cc', 'src/core/lib/iomgr/ev_windows.cc', 'src/core/lib/iomgr/exec_ctx.cc', 'src/core/lib/iomgr/executor.cc', 'src/core/lib/iomgr/executor/mpmcqueue.cc', 'src/core/lib/iomgr/executor/threadpool.cc', 'src/core/lib/iomgr/fork_posix.cc', 'src/core/lib/iomgr/fork_windows.cc', 'src/core/lib/iomgr/gethostname_fallback.cc', 'src/core/lib/iomgr/gethostname_host_name_max.cc', 'src/core/lib/iomgr/gethostname_sysconf.cc', 'src/core/lib/iomgr/grpc_if_nametoindex_posix.cc', 'src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc', 'src/core/lib/iomgr/internal_errqueue.cc', 'src/core/lib/iomgr/iocp_windows.cc', 'src/core/lib/iomgr/iomgr.cc', 'src/core/lib/iomgr/iomgr_custom.cc', 'src/core/lib/iomgr/iomgr_internal.cc', 'src/core/lib/iomgr/iomgr_posix.cc', 'src/core/lib/iomgr/iomgr_posix_cfstream.cc', 'src/core/lib/iomgr/iomgr_uv.cc', 'src/core/lib/iomgr/iomgr_windows.cc', 'src/core/lib/iomgr/is_epollexclusive_available.cc', 'src/core/lib/iomgr/load_file.cc', 'src/core/lib/iomgr/lockfree_event.cc', 'src/core/lib/iomgr/poller/eventmanager_libuv.cc', 'src/core/lib/iomgr/polling_entity.cc', 'src/core/lib/iomgr/pollset.cc', 'src/core/lib/iomgr/pollset_custom.cc', 'src/core/lib/iomgr/pollset_set.cc', 'src/core/lib/iomgr/pollset_set_custom.cc', 'src/core/lib/iomgr/pollset_set_windows.cc', 'src/core/lib/iomgr/pollset_uv.cc', 'src/core/lib/iomgr/pollset_windows.cc', 'src/core/lib/iomgr/resolve_address.cc', 'src/core/lib/iomgr/resolve_address_custom.cc', 'src/core/lib/iomgr/resolve_address_posix.cc', 'src/core/lib/iomgr/resolve_address_windows.cc', 'src/core/lib/iomgr/resource_quota.cc', 'src/core/lib/iomgr/sockaddr_utils.cc', 'src/core/lib/iomgr/socket_factory_posix.cc', 'src/core/lib/iomgr/socket_mutator.cc', 'src/core/lib/iomgr/socket_utils_common_posix.cc', 'src/core/lib/iomgr/socket_utils_linux.cc', 'src/core/lib/iomgr/socket_utils_posix.cc', 'src/core/lib/iomgr/socket_utils_uv.cc', 'src/core/lib/iomgr/socket_utils_windows.cc', 'src/core/lib/iomgr/socket_windows.cc', 'src/core/lib/iomgr/tcp_client.cc', 'src/core/lib/iomgr/tcp_client_cfstream.cc', 'src/core/lib/iomgr/tcp_client_custom.cc', 'src/core/lib/iomgr/tcp_client_posix.cc', 'src/core/lib/iomgr/tcp_client_windows.cc', 'src/core/lib/iomgr/tcp_custom.cc', 'src/core/lib/iomgr/tcp_posix.cc', 'src/core/lib/iomgr/tcp_server.cc', 'src/core/lib/iomgr/tcp_server_custom.cc', 'src/core/lib/iomgr/tcp_server_posix.cc', 'src/core/lib/iomgr/tcp_server_utils_posix_common.cc', 'src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc', 'src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc', 'src/core/lib/iomgr/tcp_server_windows.cc', 'src/core/lib/iomgr/tcp_uv.cc', 'src/core/lib/iomgr/tcp_windows.cc', 'src/core/lib/iomgr/time_averaged_stats.cc', 'src/core/lib/iomgr/timer.cc', 'src/core/lib/iomgr/timer_custom.cc', 'src/core/lib/iomgr/timer_generic.cc', 'src/core/lib/iomgr/timer_heap.cc', 'src/core/lib/iomgr/timer_manager.cc', 'src/core/lib/iomgr/timer_uv.cc', 'src/core/lib/iomgr/udp_server.cc', 'src/core/lib/iomgr/unix_sockets_posix.cc', 'src/core/lib/iomgr/unix_sockets_posix_noop.cc', 'src/core/lib/iomgr/wakeup_fd_eventfd.cc', 'src/core/lib/iomgr/wakeup_fd_nospecial.cc', 'src/core/lib/iomgr/wakeup_fd_pipe.cc', 'src/core/lib/iomgr/wakeup_fd_posix.cc', 'src/core/lib/iomgr/work_serializer.cc', 'src/core/lib/json/json_reader.cc', 'src/core/lib/json/json_writer.cc', 'src/core/lib/security/context/security_context.cc', 'src/core/lib/security/credentials/alts/alts_credentials.cc', 'src/core/lib/security/credentials/alts/check_gcp_environment.cc', 'src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc', 'src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc', 'src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc', 'src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc', 'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc', 'src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc', 'src/core/lib/security/credentials/composite/composite_credentials.cc', 'src/core/lib/security/credentials/credentials.cc', 'src/core/lib/security/credentials/credentials_metadata.cc', 'src/core/lib/security/credentials/fake/fake_credentials.cc', 'src/core/lib/security/credentials/google_default/credentials_generic.cc', 'src/core/lib/security/credentials/google_default/google_default_credentials.cc', 'src/core/lib/security/credentials/iam/iam_credentials.cc', 'src/core/lib/security/credentials/jwt/json_token.cc', 'src/core/lib/security/credentials/jwt/jwt_credentials.cc', 'src/core/lib/security/credentials/jwt/jwt_verifier.cc', 'src/core/lib/security/credentials/local/local_credentials.cc', 'src/core/lib/security/credentials/oauth2/oauth2_credentials.cc', 'src/core/lib/security/credentials/plugin/plugin_credentials.cc', 'src/core/lib/security/credentials/ssl/ssl_credentials.cc', 'src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc', 'src/core/lib/security/credentials/tls/tls_credentials.cc', 'src/core/lib/security/security_connector/alts/alts_security_connector.cc', 'src/core/lib/security/security_connector/fake/fake_security_connector.cc', 'src/core/lib/security/security_connector/load_system_roots_fallback.cc', 'src/core/lib/security/security_connector/load_system_roots_linux.cc', 'src/core/lib/security/security_connector/local/local_security_connector.cc', 'src/core/lib/security/security_connector/security_connector.cc', 'src/core/lib/security/security_connector/ssl/ssl_security_connector.cc', 'src/core/lib/security/security_connector/ssl_utils.cc', 'src/core/lib/security/security_connector/ssl_utils_config.cc', 'src/core/lib/security/security_connector/tls/tls_security_connector.cc', 'src/core/lib/security/transport/client_auth_filter.cc', 'src/core/lib/security/transport/secure_endpoint.cc', 'src/core/lib/security/transport/security_handshaker.cc', 'src/core/lib/security/transport/server_auth_filter.cc', 'src/core/lib/security/transport/target_authority_table.cc', 'src/core/lib/security/transport/tsi_error.cc', 'src/core/lib/security/util/json_util.cc', 'src/core/lib/slice/b64.cc', 'src/core/lib/slice/percent_encoding.cc', 'src/core/lib/slice/slice.cc', 'src/core/lib/slice/slice_buffer.cc', 'src/core/lib/slice/slice_intern.cc', 'src/core/lib/slice/slice_string_helpers.cc', 'src/core/lib/surface/api_trace.cc', 'src/core/lib/surface/byte_buffer.cc', 'src/core/lib/surface/byte_buffer_reader.cc', 'src/core/lib/surface/call.cc', 'src/core/lib/surface/call_details.cc', 'src/core/lib/surface/call_log_batch.cc', 'src/core/lib/surface/channel.cc', 'src/core/lib/surface/channel_init.cc', 'src/core/lib/surface/channel_ping.cc', 'src/core/lib/surface/channel_stack_type.cc', 'src/core/lib/surface/completion_queue.cc', 'src/core/lib/surface/completion_queue_factory.cc', 'src/core/lib/surface/event_string.cc', 'src/core/lib/surface/init.cc', 'src/core/lib/surface/init_secure.cc', 'src/core/lib/surface/lame_client.cc', 'src/core/lib/surface/metadata_array.cc', 'src/core/lib/surface/server.cc', 'src/core/lib/surface/validate_metadata.cc', 'src/core/lib/surface/version.cc', 'src/core/lib/transport/bdp_estimator.cc', 'src/core/lib/transport/byte_stream.cc', 'src/core/lib/transport/connectivity_state.cc', 'src/core/lib/transport/error_utils.cc', 'src/core/lib/transport/metadata.cc', 'src/core/lib/transport/metadata_batch.cc', 'src/core/lib/transport/pid_controller.cc', 'src/core/lib/transport/static_metadata.cc', 'src/core/lib/transport/status_conversion.cc', 'src/core/lib/transport/status_metadata.cc', 'src/core/lib/transport/timeout_encoding.cc', 'src/core/lib/transport/transport.cc', 'src/core/lib/transport/transport_op_string.cc', 'src/core/lib/uri/uri_parser.cc', 'src/core/plugin_registry/grpc_plugin_registry.cc', 'src/core/tsi/alts/crypt/aes_gcm.cc', 'src/core/tsi/alts/crypt/gsec.cc', 'src/core/tsi/alts/frame_protector/alts_counter.cc', 'src/core/tsi/alts/frame_protector/alts_crypter.cc', 'src/core/tsi/alts/frame_protector/alts_frame_protector.cc', 'src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc', 'src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc', 'src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc', 'src/core/tsi/alts/frame_protector/frame_handler.cc', 'src/core/tsi/alts/handshaker/alts_handshaker_client.cc', 'src/core/tsi/alts/handshaker/alts_shared_resource.cc', 'src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc', 'src/core/tsi/alts/handshaker/alts_tsi_utils.cc', 'src/core/tsi/alts/handshaker/transport_security_common_api.cc', 'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc', 'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc', 'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc', 'src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc', 'src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc', 'src/core/tsi/fake_transport_security.cc', 'src/core/tsi/local_transport_security.cc', 'src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc', 'src/core/tsi/ssl/session_cache/ssl_session_cache.cc', 'src/core/tsi/ssl/session_cache/ssl_session_openssl.cc', 'src/core/tsi/ssl_transport_security.cc', 'src/core/tsi/transport_security.cc', 'src/core/tsi/transport_security_grpc.cc', ], }, { 'target_name': 'grpc_csharp_ext', 'type': 'static_library', 'dependencies': [ 'grpc', 'gpr', 'address_sorting', 'upb', ], 'sources': [ 'src/csharp/ext/grpc_csharp_ext.c', ], }, { 'target_name': 'grpc_test_util', 'type': 'static_library', 'dependencies': [ 'grpc', 'gpr', 'address_sorting', 'upb', ], 'sources': [ 'test/core/util/cmdline.cc', 'test/core/util/debugger_macros.cc', 'test/core/util/fuzzer_util.cc', 'test/core/util/grpc_profiler.cc', 'test/core/util/histogram.cc', 'test/core/util/memory_counters.cc', 'test/core/util/mock_endpoint.cc', 'test/core/util/parse_hexstring.cc', 'test/core/util/passthru_endpoint.cc', 'test/core/util/port.cc', 'test/core/util/port_isolated_runtime_environment.cc', 'test/core/util/port_server_client.cc', 'test/core/util/reconnect_server.cc', 'test/core/util/slice_splitter.cc', 'test/core/util/subprocess_posix.cc', 'test/core/util/subprocess_windows.cc', 'test/core/util/test_config.cc', 'test/core/util/test_tcp_server.cc', 'test/core/util/tracer_util.cc', 'test/core/util/trickle_endpoint.cc', ], }, { 'target_name': 'grpc_test_util_unsecure', 'type': 'static_library', 'dependencies': [ 'grpc_unsecure', 'gpr', 'address_sorting', 'upb', ], 'sources': [ 'test/core/util/cmdline.cc', 'test/core/util/debugger_macros.cc', 'test/core/util/fuzzer_util.cc', 'test/core/util/grpc_profiler.cc', 'test/core/util/histogram.cc', 'test/core/util/memory_counters.cc', 'test/core/util/mock_endpoint.cc', 'test/core/util/parse_hexstring.cc', 'test/core/util/passthru_endpoint.cc', 'test/core/util/port.cc', 'test/core/util/port_isolated_runtime_environment.cc', 'test/core/util/port_server_client.cc', 'test/core/util/reconnect_server.cc', 'test/core/util/slice_splitter.cc', 'test/core/util/subprocess_posix.cc', 'test/core/util/subprocess_windows.cc', 'test/core/util/test_config.cc', 'test/core/util/test_tcp_server.cc', 'test/core/util/tracer_util.cc', 'test/core/util/trickle_endpoint.cc', ], }, { 'target_name': 'grpc_unsecure', 'type': 'static_library', 'dependencies': [ 'gpr', 'address_sorting', 'upb', 'absl/types:optional', 'absl/strings:strings', 'absl/container:inlined_vector', ], 'sources': [ 'src/core/ext/filters/census/grpc_context.cc', 'src/core/ext/filters/client_channel/backend_metric.cc', 'src/core/ext/filters/client_channel/backup_poller.cc', 'src/core/ext/filters/client_channel/channel_connectivity.cc', 'src/core/ext/filters/client_channel/client_channel.cc', 'src/core/ext/filters/client_channel/client_channel_channelz.cc', 'src/core/ext/filters/client_channel/client_channel_factory.cc', 'src/core/ext/filters/client_channel/client_channel_plugin.cc', 'src/core/ext/filters/client_channel/global_subchannel_pool.cc', 'src/core/ext/filters/client_channel/health/health_check_client.cc', 'src/core/ext/filters/client_channel/http_connect_handshaker.cc', 'src/core/ext/filters/client_channel/http_proxy.cc', 'src/core/ext/filters/client_channel/lb_policy.cc', 'src/core/ext/filters/client_channel/lb_policy/address_filtering.cc', 'src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc', 'src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc', 'src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc', 'src/core/ext/filters/client_channel/lb_policy/priority/priority.cc', 'src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc', 'src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc', 'src/core/ext/filters/client_channel/lb_policy/xds/cds.cc', 'src/core/ext/filters/client_channel/lb_policy/xds/eds.cc', 'src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc', 'src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc', 'src/core/ext/filters/client_channel/lb_policy_registry.cc', 'src/core/ext/filters/client_channel/local_subchannel_pool.cc', 'src/core/ext/filters/client_channel/parse_address.cc', 'src/core/ext/filters/client_channel/proxy_mapper_registry.cc', 'src/core/ext/filters/client_channel/resolver.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc', 'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc', 'src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc', 'src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc', 'src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc', 'src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc', 'src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc', 'src/core/ext/filters/client_channel/resolver_registry.cc', 'src/core/ext/filters/client_channel/resolver_result_parsing.cc', 'src/core/ext/filters/client_channel/resolving_lb_policy.cc', 'src/core/ext/filters/client_channel/retry_throttle.cc', 'src/core/ext/filters/client_channel/server_address.cc', 'src/core/ext/filters/client_channel/service_config.cc', 'src/core/ext/filters/client_channel/service_config_parser.cc', 'src/core/ext/filters/client_channel/subchannel.cc', 'src/core/ext/filters/client_channel/subchannel_pool_interface.cc', 'src/core/ext/filters/client_channel/xds/xds_api.cc', 'src/core/ext/filters/client_channel/xds/xds_bootstrap.cc', 'src/core/ext/filters/client_channel/xds/xds_channel.cc', 'src/core/ext/filters/client_channel/xds/xds_client.cc', 'src/core/ext/filters/client_channel/xds/xds_client_stats.cc', 'src/core/ext/filters/client_idle/client_idle_filter.cc', 'src/core/ext/filters/deadline/deadline_filter.cc', 'src/core/ext/filters/http/client/http_client_filter.cc', 'src/core/ext/filters/http/client_authority_filter.cc', 'src/core/ext/filters/http/http_filters_plugin.cc', 'src/core/ext/filters/http/message_compress/message_compress_filter.cc', 'src/core/ext/filters/http/message_compress/message_decompress_filter.cc', 'src/core/ext/filters/http/server/http_server_filter.cc', 'src/core/ext/filters/max_age/max_age_filter.cc', 'src/core/ext/filters/message_size/message_size_filter.cc', 'src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc', 'src/core/ext/filters/workarounds/workaround_utils.cc', 'src/core/ext/transport/chttp2/alpn/alpn.cc', 'src/core/ext/transport/chttp2/client/authority.cc', 'src/core/ext/transport/chttp2/client/chttp2_connector.cc', 'src/core/ext/transport/chttp2/client/insecure/channel_create.cc', 'src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc', 'src/core/ext/transport/chttp2/server/chttp2_server.cc', 'src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc', 'src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc', 'src/core/ext/transport/chttp2/transport/bin_decoder.cc', 'src/core/ext/transport/chttp2/transport/bin_encoder.cc', 'src/core/ext/transport/chttp2/transport/chttp2_plugin.cc', 'src/core/ext/transport/chttp2/transport/chttp2_transport.cc', 'src/core/ext/transport/chttp2/transport/context_list.cc', 'src/core/ext/transport/chttp2/transport/flow_control.cc', 'src/core/ext/transport/chttp2/transport/frame_data.cc', 'src/core/ext/transport/chttp2/transport/frame_goaway.cc', 'src/core/ext/transport/chttp2/transport/frame_ping.cc', 'src/core/ext/transport/chttp2/transport/frame_rst_stream.cc', 'src/core/ext/transport/chttp2/transport/frame_settings.cc', 'src/core/ext/transport/chttp2/transport/frame_window_update.cc', 'src/core/ext/transport/chttp2/transport/hpack_encoder.cc', 'src/core/ext/transport/chttp2/transport/hpack_parser.cc', 'src/core/ext/transport/chttp2/transport/hpack_table.cc', 'src/core/ext/transport/chttp2/transport/http2_settings.cc', 'src/core/ext/transport/chttp2/transport/huffsyms.cc', 'src/core/ext/transport/chttp2/transport/incoming_metadata.cc', 'src/core/ext/transport/chttp2/transport/parsing.cc', 'src/core/ext/transport/chttp2/transport/stream_lists.cc', 'src/core/ext/transport/chttp2/transport/stream_map.cc', 'src/core/ext/transport/chttp2/transport/varint.cc', 'src/core/ext/transport/chttp2/transport/writing.cc', 'src/core/ext/transport/inproc/inproc_plugin.cc', 'src/core/ext/transport/inproc/inproc_transport.cc', 'src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c', 'src/core/ext/upb-generated/envoy/annotations/resource.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/cds.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/eds.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/lds.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/listener.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/rds.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/route.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c', 'src/core/ext/upb-generated/envoy/api/v2/srds.upb.c', 'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c', 'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c', 'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c', 'src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c', 'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c', 'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c', 'src/core/ext/upb-generated/envoy/type/http.upb.c', 'src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c', 'src/core/ext/upb-generated/envoy/type/matcher/string.upb.c', 'src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c', 'src/core/ext/upb-generated/envoy/type/percent.upb.c', 'src/core/ext/upb-generated/envoy/type/range.upb.c', 'src/core/ext/upb-generated/envoy/type/semantic_version.upb.c', 'src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c', 'src/core/ext/upb-generated/gogoproto/gogo.upb.c', 'src/core/ext/upb-generated/google/api/annotations.upb.c', 'src/core/ext/upb-generated/google/api/http.upb.c', 'src/core/ext/upb-generated/google/protobuf/any.upb.c', 'src/core/ext/upb-generated/google/protobuf/descriptor.upb.c', 'src/core/ext/upb-generated/google/protobuf/duration.upb.c', 'src/core/ext/upb-generated/google/protobuf/empty.upb.c', 'src/core/ext/upb-generated/google/protobuf/struct.upb.c', 'src/core/ext/upb-generated/google/protobuf/timestamp.upb.c', 'src/core/ext/upb-generated/google/protobuf/wrappers.upb.c', 'src/core/ext/upb-generated/google/rpc/status.upb.c', 'src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c', 'src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c', 'src/core/ext/upb-generated/udpa/annotations/migrate.upb.c', 'src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c', 'src/core/ext/upb-generated/udpa/annotations/status.upb.c', 'src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c', 'src/core/ext/upb-generated/validate/validate.upb.c', 'src/core/lib/avl/avl.cc', 'src/core/lib/backoff/backoff.cc', 'src/core/lib/channel/channel_args.cc', 'src/core/lib/channel/channel_stack.cc', 'src/core/lib/channel/channel_stack_builder.cc', 'src/core/lib/channel/channel_trace.cc', 'src/core/lib/channel/channelz.cc', 'src/core/lib/channel/channelz_registry.cc', 'src/core/lib/channel/connected_channel.cc', 'src/core/lib/channel/handshaker.cc', 'src/core/lib/channel/handshaker_registry.cc', 'src/core/lib/channel/status_util.cc', 'src/core/lib/compression/compression.cc', 'src/core/lib/compression/compression_args.cc', 'src/core/lib/compression/compression_internal.cc', 'src/core/lib/compression/message_compress.cc', 'src/core/lib/compression/stream_compression.cc', 'src/core/lib/compression/stream_compression_gzip.cc', 'src/core/lib/compression/stream_compression_identity.cc', 'src/core/lib/debug/stats.cc', 'src/core/lib/debug/stats_data.cc', 'src/core/lib/debug/trace.cc', 'src/core/lib/http/format_request.cc', 'src/core/lib/http/httpcli.cc', 'src/core/lib/http/parser.cc', 'src/core/lib/iomgr/buffer_list.cc', 'src/core/lib/iomgr/call_combiner.cc', 'src/core/lib/iomgr/cfstream_handle.cc', 'src/core/lib/iomgr/combiner.cc', 'src/core/lib/iomgr/dualstack_socket_posix.cc', 'src/core/lib/iomgr/endpoint.cc', 'src/core/lib/iomgr/endpoint_cfstream.cc', 'src/core/lib/iomgr/endpoint_pair_posix.cc', 'src/core/lib/iomgr/endpoint_pair_uv.cc', 'src/core/lib/iomgr/endpoint_pair_windows.cc', 'src/core/lib/iomgr/error.cc', 'src/core/lib/iomgr/error_cfstream.cc', 'src/core/lib/iomgr/ev_apple.cc', 'src/core/lib/iomgr/ev_epoll1_linux.cc', 'src/core/lib/iomgr/ev_epollex_linux.cc', 'src/core/lib/iomgr/ev_poll_posix.cc', 'src/core/lib/iomgr/ev_posix.cc', 'src/core/lib/iomgr/ev_windows.cc', 'src/core/lib/iomgr/exec_ctx.cc', 'src/core/lib/iomgr/executor.cc', 'src/core/lib/iomgr/executor/mpmcqueue.cc', 'src/core/lib/iomgr/executor/threadpool.cc', 'src/core/lib/iomgr/fork_posix.cc', 'src/core/lib/iomgr/fork_windows.cc', 'src/core/lib/iomgr/gethostname_fallback.cc', 'src/core/lib/iomgr/gethostname_host_name_max.cc', 'src/core/lib/iomgr/gethostname_sysconf.cc', 'src/core/lib/iomgr/grpc_if_nametoindex_posix.cc', 'src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc', 'src/core/lib/iomgr/internal_errqueue.cc', 'src/core/lib/iomgr/iocp_windows.cc', 'src/core/lib/iomgr/iomgr.cc', 'src/core/lib/iomgr/iomgr_custom.cc', 'src/core/lib/iomgr/iomgr_internal.cc', 'src/core/lib/iomgr/iomgr_posix.cc', 'src/core/lib/iomgr/iomgr_posix_cfstream.cc', 'src/core/lib/iomgr/iomgr_uv.cc', 'src/core/lib/iomgr/iomgr_windows.cc', 'src/core/lib/iomgr/is_epollexclusive_available.cc', 'src/core/lib/iomgr/load_file.cc', 'src/core/lib/iomgr/lockfree_event.cc', 'src/core/lib/iomgr/poller/eventmanager_libuv.cc', 'src/core/lib/iomgr/polling_entity.cc', 'src/core/lib/iomgr/pollset.cc', 'src/core/lib/iomgr/pollset_custom.cc', 'src/core/lib/iomgr/pollset_set.cc', 'src/core/lib/iomgr/pollset_set_custom.cc', 'src/core/lib/iomgr/pollset_set_windows.cc', 'src/core/lib/iomgr/pollset_uv.cc', 'src/core/lib/iomgr/pollset_windows.cc', 'src/core/lib/iomgr/resolve_address.cc', 'src/core/lib/iomgr/resolve_address_custom.cc', 'src/core/lib/iomgr/resolve_address_posix.cc', 'src/core/lib/iomgr/resolve_address_windows.cc', 'src/core/lib/iomgr/resource_quota.cc', 'src/core/lib/iomgr/sockaddr_utils.cc', 'src/core/lib/iomgr/socket_factory_posix.cc', 'src/core/lib/iomgr/socket_mutator.cc', 'src/core/lib/iomgr/socket_utils_common_posix.cc', 'src/core/lib/iomgr/socket_utils_linux.cc', 'src/core/lib/iomgr/socket_utils_posix.cc', 'src/core/lib/iomgr/socket_utils_uv.cc', 'src/core/lib/iomgr/socket_utils_windows.cc', 'src/core/lib/iomgr/socket_windows.cc', 'src/core/lib/iomgr/tcp_client.cc', 'src/core/lib/iomgr/tcp_client_cfstream.cc', 'src/core/lib/iomgr/tcp_client_custom.cc', 'src/core/lib/iomgr/tcp_client_posix.cc', 'src/core/lib/iomgr/tcp_client_windows.cc', 'src/core/lib/iomgr/tcp_custom.cc', 'src/core/lib/iomgr/tcp_posix.cc', 'src/core/lib/iomgr/tcp_server.cc', 'src/core/lib/iomgr/tcp_server_custom.cc', 'src/core/lib/iomgr/tcp_server_posix.cc', 'src/core/lib/iomgr/tcp_server_utils_posix_common.cc', 'src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc', 'src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc', 'src/core/lib/iomgr/tcp_server_windows.cc', 'src/core/lib/iomgr/tcp_uv.cc', 'src/core/lib/iomgr/tcp_windows.cc', 'src/core/lib/iomgr/time_averaged_stats.cc', 'src/core/lib/iomgr/timer.cc', 'src/core/lib/iomgr/timer_custom.cc', 'src/core/lib/iomgr/timer_generic.cc', 'src/core/lib/iomgr/timer_heap.cc', 'src/core/lib/iomgr/timer_manager.cc', 'src/core/lib/iomgr/timer_uv.cc', 'src/core/lib/iomgr/udp_server.cc', 'src/core/lib/iomgr/unix_sockets_posix.cc', 'src/core/lib/iomgr/unix_sockets_posix_noop.cc', 'src/core/lib/iomgr/wakeup_fd_eventfd.cc', 'src/core/lib/iomgr/wakeup_fd_nospecial.cc', 'src/core/lib/iomgr/wakeup_fd_pipe.cc', 'src/core/lib/iomgr/wakeup_fd_posix.cc', 'src/core/lib/iomgr/work_serializer.cc', 'src/core/lib/json/json_reader.cc', 'src/core/lib/json/json_writer.cc', 'src/core/lib/slice/b64.cc', 'src/core/lib/slice/percent_encoding.cc', 'src/core/lib/slice/slice.cc', 'src/core/lib/slice/slice_buffer.cc', 'src/core/lib/slice/slice_intern.cc', 'src/core/lib/slice/slice_string_helpers.cc', 'src/core/lib/surface/api_trace.cc', 'src/core/lib/surface/byte_buffer.cc', 'src/core/lib/surface/byte_buffer_reader.cc', 'src/core/lib/surface/call.cc', 'src/core/lib/surface/call_details.cc', 'src/core/lib/surface/call_log_batch.cc', 'src/core/lib/surface/channel.cc', 'src/core/lib/surface/channel_init.cc', 'src/core/lib/surface/channel_ping.cc', 'src/core/lib/surface/channel_stack_type.cc', 'src/core/lib/surface/completion_queue.cc', 'src/core/lib/surface/completion_queue_factory.cc', 'src/core/lib/surface/event_string.cc', 'src/core/lib/surface/init.cc', 'src/core/lib/surface/init_unsecure.cc', 'src/core/lib/surface/lame_client.cc', 'src/core/lib/surface/metadata_array.cc', 'src/core/lib/surface/server.cc', 'src/core/lib/surface/validate_metadata.cc', 'src/core/lib/surface/version.cc', 'src/core/lib/transport/bdp_estimator.cc', 'src/core/lib/transport/byte_stream.cc', 'src/core/lib/transport/connectivity_state.cc', 'src/core/lib/transport/error_utils.cc', 'src/core/lib/transport/metadata.cc', 'src/core/lib/transport/metadata_batch.cc', 'src/core/lib/transport/pid_controller.cc', 'src/core/lib/transport/static_metadata.cc', 'src/core/lib/transport/status_conversion.cc', 'src/core/lib/transport/status_metadata.cc', 'src/core/lib/transport/timeout_encoding.cc', 'src/core/lib/transport/transport.cc', 'src/core/lib/transport/transport_op_string.cc', 'src/core/lib/uri/uri_parser.cc', 'src/core/plugin_registry/grpc_unsecure_plugin_registry.cc', ], }, { 'target_name': 'benchmark_helpers', 'type': 'static_library', 'dependencies': [ 'grpc_test_util_unsecure', 'grpc++_unsecure', 'grpc_unsecure', 'grpc++_test_config', 'gpr', 'address_sorting', 'upb', 'benchmark', ], 'sources': [ 'src/proto/grpc/testing/echo.proto', 'src/proto/grpc/testing/echo_messages.proto', 'src/proto/grpc/testing/simple_messages.proto', 'test/cpp/microbenchmarks/helpers.cc', ], }, { 'target_name': 'grpc++', 'type': 'static_library', 'dependencies': [ 'grpc', 'gpr', 'address_sorting', 'upb', ], 'sources': [ 'src/cpp/client/channel_cc.cc', 'src/cpp/client/client_context.cc', 'src/cpp/client/client_interceptor.cc', 'src/cpp/client/create_channel.cc', 'src/cpp/client/create_channel_internal.cc', 'src/cpp/client/create_channel_posix.cc', 'src/cpp/client/credentials_cc.cc', 'src/cpp/client/insecure_credentials.cc', 'src/cpp/client/secure_credentials.cc', 'src/cpp/codegen/codegen_init.cc', 'src/cpp/common/alarm.cc', 'src/cpp/common/auth_property_iterator.cc', 'src/cpp/common/channel_arguments.cc', 'src/cpp/common/channel_filter.cc', 'src/cpp/common/completion_queue_cc.cc', 'src/cpp/common/core_codegen.cc', 'src/cpp/common/resource_quota_cc.cc', 'src/cpp/common/rpc_method.cc', 'src/cpp/common/secure_auth_context.cc', 'src/cpp/common/secure_channel_arguments.cc', 'src/cpp/common/secure_create_auth_context.cc', 'src/cpp/common/tls_credentials_options.cc', 'src/cpp/common/tls_credentials_options_util.cc', 'src/cpp/common/validate_service_config.cc', 'src/cpp/common/version_cc.cc', 'src/cpp/server/async_generic_service.cc', 'src/cpp/server/channel_argument_option.cc', 'src/cpp/server/create_default_thread_pool.cc', 'src/cpp/server/dynamic_thread_pool.cc', 'src/cpp/server/external_connection_acceptor_impl.cc', 'src/cpp/server/health/default_health_check_service.cc', 'src/cpp/server/health/health_check_service.cc', 'src/cpp/server/health/health_check_service_server_builder_option.cc', 'src/cpp/server/insecure_server_credentials.cc', 'src/cpp/server/secure_server_credentials.cc', 'src/cpp/server/server_builder.cc', 'src/cpp/server/server_callback.cc', 'src/cpp/server/server_cc.cc', 'src/cpp/server/server_context.cc', 'src/cpp/server/server_credentials.cc', 'src/cpp/server/server_posix.cc', 'src/cpp/thread_manager/thread_manager.cc', 'src/cpp/util/byte_buffer_cc.cc', 'src/cpp/util/status.cc', 'src/cpp/util/string_ref.cc', 'src/cpp/util/time_cc.cc', ], }, { 'target_name': 'grpc++_alts', 'type': 'static_library', 'dependencies': [ 'grpc++', 'grpc', 'gpr', 'address_sorting', 'upb', ], 'sources': [ 'src/cpp/common/alts_context.cc', 'src/cpp/common/alts_util.cc', ], }, { 'target_name': 'grpc++_error_details', 'type': 'static_library', 'dependencies': [ 'grpc++', 'grpc', 'gpr', 'address_sorting', 'upb', ], 'sources': [ 'src/proto/grpc/status/status.proto', 'src/cpp/util/error_details.cc', ], }, { 'target_name': 'grpc++_reflection', 'type': 'static_library', 'dependencies': [ 'grpc++', 'grpc', 'gpr', 'address_sorting', 'upb', ], 'sources': [ 'src/proto/grpc/reflection/v1alpha/reflection.proto', 'src/cpp/ext/proto_server_reflection.cc', 'src/cpp/ext/proto_server_reflection_plugin.cc', ], }, { 'target_name': 'grpc++_test', 'type': 'static_library', 'dependencies': [ 'grpc++', 'grpc', 'gpr', 'address_sorting', 'upb', ], 'sources': [ 'src/cpp/client/channel_test_peer.cc', ], }, { 'target_name': 'grpc++_test_config', 'type': 'static_library', 'dependencies': [ 'gpr', ], 'sources': [ 'test/cpp/util/test_config_cc.cc', ], }, { 'target_name': 'grpc++_test_util', 'type': 'static_library', 'dependencies': [ 'grpc_test_util', 'grpc++', 'grpc', 'gpr', 'address_sorting', 'upb', ], 'sources': [ 'test/core/end2end/data/client_certs.cc', 'test/core/end2end/data/server1_cert.cc', 'test/core/end2end/data/server1_key.cc', 'test/core/end2end/data/test_root_cert.cc', 'test/cpp/util/byte_buffer_proto_helper.cc', 'test/cpp/util/create_test_channel.cc', 'test/cpp/util/string_ref_helper.cc', 'test/cpp/util/subprocess.cc', 'test/cpp/util/test_credentials_provider.cc', ], }, { 'target_name': 'grpc++_unsecure', 'type': 'static_library', 'dependencies': [ 'grpc_unsecure', 'gpr', 'address_sorting', 'upb', ], 'sources': [ 'src/cpp/client/channel_cc.cc', 'src/cpp/client/client_context.cc', 'src/cpp/client/client_interceptor.cc', 'src/cpp/client/create_channel.cc', 'src/cpp/client/create_channel_internal.cc', 'src/cpp/client/create_channel_posix.cc', 'src/cpp/client/credentials_cc.cc', 'src/cpp/client/insecure_credentials.cc', 'src/cpp/codegen/codegen_init.cc', 'src/cpp/common/alarm.cc', 'src/cpp/common/channel_arguments.cc', 'src/cpp/common/channel_filter.cc', 'src/cpp/common/completion_queue_cc.cc', 'src/cpp/common/core_codegen.cc', 'src/cpp/common/insecure_create_auth_context.cc', 'src/cpp/common/resource_quota_cc.cc', 'src/cpp/common/rpc_method.cc', 'src/cpp/common/validate_service_config.cc', 'src/cpp/common/version_cc.cc', 'src/cpp/server/async_generic_service.cc', 'src/cpp/server/channel_argument_option.cc', 'src/cpp/server/create_default_thread_pool.cc', 'src/cpp/server/dynamic_thread_pool.cc', 'src/cpp/server/external_connection_acceptor_impl.cc', 'src/cpp/server/health/default_health_check_service.cc', 'src/cpp/server/health/health_check_service.cc', 'src/cpp/server/health/health_check_service_server_builder_option.cc', 'src/cpp/server/insecure_server_credentials.cc', 'src/cpp/server/server_builder.cc', 'src/cpp/server/server_callback.cc', 'src/cpp/server/server_cc.cc', 'src/cpp/server/server_context.cc', 'src/cpp/server/server_credentials.cc', 'src/cpp/server/server_posix.cc', 'src/cpp/thread_manager/thread_manager.cc', 'src/cpp/util/byte_buffer_cc.cc', 'src/cpp/util/status.cc', 'src/cpp/util/string_ref.cc', 'src/cpp/util/time_cc.cc', ], }, { 'target_name': 'grpc_plugin_support', 'type': 'static_library', 'dependencies': [ ], 'sources': [ 'src/compiler/cpp_generator.cc', 'src/compiler/csharp_generator.cc', 'src/compiler/node_generator.cc', 'src/compiler/objective_c_generator.cc', 'src/compiler/php_generator.cc', 'src/compiler/python_generator.cc', 'src/compiler/ruby_generator.cc', ], }, { 'target_name': 'grpcpp_channelz', 'type': 'static_library', 'dependencies': [ 'grpc++', 'grpc', 'gpr', 'address_sorting', 'upb', ], 'sources': [ 'src/proto/grpc/channelz/channelz.proto', 'src/cpp/server/channelz/channelz_service.cc', 'src/cpp/server/channelz/channelz_service_plugin.cc', ], }, { 'target_name': 'boringssl', 'type': 'static_library', 'dependencies': [ ], 'sources': [ 'third_party/boringssl-with-bazel/err_data.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c', 'third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c', 'third_party/boringssl-with-bazel/src/crypto/base64/base64.c', 'third_party/boringssl-with-bazel/src/crypto/bio/bio.c', 'third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c', 'third_party/boringssl-with-bazel/src/crypto/bio/connect.c', 'third_party/boringssl-with-bazel/src/crypto/bio/fd.c', 'third_party/boringssl-with-bazel/src/crypto/bio/file.c', 'third_party/boringssl-with-bazel/src/crypto/bio/hexdump.c', 'third_party/boringssl-with-bazel/src/crypto/bio/pair.c', 'third_party/boringssl-with-bazel/src/crypto/bio/printf.c', 'third_party/boringssl-with-bazel/src/crypto/bio/socket.c', 'third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c', 'third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c', 'third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c', 'third_party/boringssl-with-bazel/src/crypto/buf/buf.c', 'third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c', 'third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c', 'third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c', 'third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c', 'third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c', 'third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c', 'third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c', 'third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c', 'third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesccm.c', 'third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c', 'third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c', 'third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c', 'third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c', 'third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c', 'third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c', 'third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c', 'third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c', 'third_party/boringssl-with-bazel/src/crypto/cmac/cmac.c', 'third_party/boringssl-with-bazel/src/crypto/conf/conf.c', 'third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-fuchsia.c', 'third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-linux.c', 'third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c', 'third_party/boringssl-with-bazel/src/crypto/cpu-arm.c', 'third_party/boringssl-with-bazel/src/crypto/cpu-intel.c', 'third_party/boringssl-with-bazel/src/crypto/cpu-ppc64le.c', 'third_party/boringssl-with-bazel/src/crypto/crypto.c', 'third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c', 'third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c', 'third_party/boringssl-with-bazel/src/crypto/dh/check.c', 'third_party/boringssl-with-bazel/src/crypto/dh/dh.c', 'third_party/boringssl-with-bazel/src/crypto/dh/dh_asn1.c', 'third_party/boringssl-with-bazel/src/crypto/dh/params.c', 'third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c', 'third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c', 'third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c', 'third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c', 'third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c', 'third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c', 'third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c', 'third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c', 'third_party/boringssl-with-bazel/src/crypto/engine/engine.c', 'third_party/boringssl-with-bazel/src/crypto/err/err.c', 'third_party/boringssl-with-bazel/src/crypto/evp/digestsign.c', 'third_party/boringssl-with-bazel/src/crypto/evp/evp.c', 'third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c', 'third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c', 'third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c', 'third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c', 'third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c', 'third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c', 'third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c', 'third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c', 'third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c', 'third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c', 'third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c', 'third_party/boringssl-with-bazel/src/crypto/evp/pbkdf.c', 'third_party/boringssl-with-bazel/src/crypto/evp/print.c', 'third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c', 'third_party/boringssl-with-bazel/src/crypto/evp/sign.c', 'third_party/boringssl-with-bazel/src/crypto/ex_data.c', 'third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c', 'third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c', 'third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c', 'third_party/boringssl-with-bazel/src/crypto/hkdf/hkdf.c', 'third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c', 'third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c', 'third_party/boringssl-with-bazel/src/crypto/mem.c', 'third_party/boringssl-with-bazel/src/crypto/obj/obj.c', 'third_party/boringssl-with-bazel/src/crypto/obj/obj_xref.c', 'third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c', 'third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c', 'third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c', 'third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c', 'third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c', 'third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c', 'third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c', 'third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c', 'third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c', 'third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c', 'third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c', 'third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c', 'third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c', 'third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c', 'third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c', 'third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c', 'third_party/boringssl-with-bazel/src/crypto/pool/pool.c', 'third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c', 'third_party/boringssl-with-bazel/src/crypto/rand_extra/forkunsafe.c', 'third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c', 'third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c', 'third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c', 'third_party/boringssl-with-bazel/src/crypto/rc4/rc4.c', 'third_party/boringssl-with-bazel/src/crypto/refcount_c11.c', 'third_party/boringssl-with-bazel/src/crypto/refcount_lock.c', 'third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c', 'third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.c', 'third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c', 'third_party/boringssl-with-bazel/src/crypto/stack/stack.c', 'third_party/boringssl-with-bazel/src/crypto/thread.c', 'third_party/boringssl-with-bazel/src/crypto/thread_none.c', 'third_party/boringssl-with-bazel/src/crypto/thread_pthread.c', 'third_party/boringssl-with-bazel/src/crypto/thread_win.c', 'third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c', 'third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c', 'third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c', 'third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c', 'third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c', 'third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c', 'third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c', 'third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c', 'third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c', 'third_party/boringssl-with-bazel/src/crypto/x509/by_file.c', 'third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c', 'third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c', 'third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c', 'third_party/boringssl-with-bazel/src/crypto/x509/t_req.c', 'third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c', 'third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x509.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x509name.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x_all.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x_info.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x_name.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x_req.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x_val.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c', 'third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c', 'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c', 'third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc', 'third_party/boringssl-with-bazel/src/ssl/d1_both.cc', 'third_party/boringssl-with-bazel/src/ssl/d1_lib.cc', 'third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc', 'third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc', 'third_party/boringssl-with-bazel/src/ssl/dtls_method.cc', 'third_party/boringssl-with-bazel/src/ssl/dtls_record.cc', 'third_party/boringssl-with-bazel/src/ssl/handoff.cc', 'third_party/boringssl-with-bazel/src/ssl/handshake.cc', 'third_party/boringssl-with-bazel/src/ssl/handshake_client.cc', 'third_party/boringssl-with-bazel/src/ssl/handshake_server.cc', 'third_party/boringssl-with-bazel/src/ssl/s3_both.cc', 'third_party/boringssl-with-bazel/src/ssl/s3_lib.cc', 'third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc', 'third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc', 'third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc', 'third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc', 'third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc', 'third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc', 'third_party/boringssl-with-bazel/src/ssl/ssl_file.cc', 'third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc', 'third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc', 'third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc', 'third_party/boringssl-with-bazel/src/ssl/ssl_session.cc', 'third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc', 'third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc', 'third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc', 'third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc', 'third_party/boringssl-with-bazel/src/ssl/t1_enc.cc', 'third_party/boringssl-with-bazel/src/ssl/t1_lib.cc', 'third_party/boringssl-with-bazel/src/ssl/tls13_both.cc', 'third_party/boringssl-with-bazel/src/ssl/tls13_client.cc', 'third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc', 'third_party/boringssl-with-bazel/src/ssl/tls13_server.cc', 'third_party/boringssl-with-bazel/src/ssl/tls_method.cc', 'third_party/boringssl-with-bazel/src/ssl/tls_record.cc', ], }, { 'target_name': 'boringssl_test_util', 'type': 'static_library', 'dependencies': [ ], 'sources': [ 'third_party/boringssl-with-bazel/src/crypto/test/file_test.cc', 'third_party/boringssl-with-bazel/src/crypto/test/malloc.cc', 'third_party/boringssl-with-bazel/src/crypto/test/test_util.cc', 'third_party/boringssl-with-bazel/src/crypto/test/wycheproof_util.cc', ], }, { 'target_name': 'benchmark', 'type': 'static_library', 'dependencies': [ ], 'sources': [ 'third_party/benchmark/src/benchmark.cc', 'third_party/benchmark/src/benchmark_api_internal.cc', 'third_party/benchmark/src/benchmark_main.cc', 'third_party/benchmark/src/benchmark_name.cc', 'third_party/benchmark/src/benchmark_register.cc', 'third_party/benchmark/src/benchmark_runner.cc', 'third_party/benchmark/src/colorprint.cc', 'third_party/benchmark/src/commandlineflags.cc', 'third_party/benchmark/src/complexity.cc', 'third_party/benchmark/src/console_reporter.cc', 'third_party/benchmark/src/counter.cc', 'third_party/benchmark/src/csv_reporter.cc', 'third_party/benchmark/src/json_reporter.cc', 'third_party/benchmark/src/reporter.cc', 'third_party/benchmark/src/sleep.cc', 'third_party/benchmark/src/statistics.cc', 'third_party/benchmark/src/string_util.cc', 'third_party/benchmark/src/sysinfo.cc', 'third_party/benchmark/src/timers.cc', ], }, { 'target_name': 'upb', 'type': 'static_library', 'dependencies': [ ], 'sources': [ 'third_party/upb/upb/decode.c', 'third_party/upb/upb/encode.c', 'third_party/upb/upb/msg.c', 'third_party/upb/upb/port.c', 'third_party/upb/upb/table.c', 'third_party/upb/upb/upb.c', ], }, { 'target_name': 'z', 'type': 'static_library', 'dependencies': [ ], 'sources': [ 'third_party/zlib/adler32.c', 'third_party/zlib/compress.c', 'third_party/zlib/crc32.c', 'third_party/zlib/deflate.c', 'third_party/zlib/gzclose.c', 'third_party/zlib/gzlib.c', 'third_party/zlib/gzread.c', 'third_party/zlib/gzwrite.c', 'third_party/zlib/infback.c', 'third_party/zlib/inffast.c', 'third_party/zlib/inflate.c', 'third_party/zlib/inftrees.c', 'third_party/zlib/trees.c', 'third_party/zlib/uncompr.c', 'third_party/zlib/zutil.c', ], }, ] } grpc-1.30.2/include/000077500000000000000000000000001370425124100141525ustar00rootroot00000000000000grpc-1.30.2/include/grpc++/000077500000000000000000000000001370425124100152335ustar00rootroot00000000000000grpc-1.30.2/include/grpc++/alarm.h000066400000000000000000000015571370425124100165100ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_ALARM_H #define GRPCXX_ALARM_H #include #endif // GRPCXX_ALARM_H grpc-1.30.2/include/grpc++/channel.h000066400000000000000000000015671370425124100170250ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_CHANNEL_H #define GRPCXX_CHANNEL_H #include #endif // GRPCXX_CHANNEL_H grpc-1.30.2/include/grpc++/client_context.h000066400000000000000000000016231370425124100204300ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_CLIENT_CONTEXT_H #define GRPCXX_CLIENT_CONTEXT_H #include #endif // GRPCXX_CLIENT_CONTEXT_H grpc-1.30.2/include/grpc++/completion_queue.h000066400000000000000000000016331370425124100207640ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_COMPLETION_QUEUE_H #define GRPCXX_COMPLETION_QUEUE_H #include #endif // GRPCXX_COMPLETION_QUEUE_H grpc-1.30.2/include/grpc++/create_channel.h000066400000000000000000000016231370425124100203410ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_CREATE_CHANNEL_H #define GRPCXX_CREATE_CHANNEL_H #include #endif // GRPCXX_CREATE_CHANNEL_H grpc-1.30.2/include/grpc++/create_channel_posix.h000066400000000000000000000016531370425124100215660ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_CREATE_CHANNEL_POSIX_H #define GRPCXX_CREATE_CHANNEL_POSIX_H #include #endif // GRPCXX_CREATE_CHANNEL_POSIX_H grpc-1.30.2/include/grpc++/ext/000077500000000000000000000000001370425124100160335ustar00rootroot00000000000000grpc-1.30.2/include/grpc++/ext/health_check_service_server_builder_option.h000066400000000000000000000020231370425124100270070ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_EXT_HEALTH_CHECK_SERVICE_SERVER_BUILDER_OPTION_H #define GRPCXX_EXT_HEALTH_CHECK_SERVICE_SERVER_BUILDER_OPTION_H #include #endif // GRPCXX_EXT_HEALTH_CHECK_SERVICE_SERVER_BUILDER_OPTION_H grpc-1.30.2/include/grpc++/ext/proto_server_reflection_plugin.h000066400000000000000000000017431370425124100245320ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_EXT_PROTO_SERVER_REFLECTION_PLUGIN_H #define GRPCXX_EXT_PROTO_SERVER_REFLECTION_PLUGIN_H #include #endif // GRPCXX_EXT_PROTO_SERVER_REFLECTION_PLUGIN_H grpc-1.30.2/include/grpc++/generic/000077500000000000000000000000001370425124100166475ustar00rootroot00000000000000grpc-1.30.2/include/grpc++/generic/async_generic_service.h000066400000000000000000000017171370425124100233570ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_GENERIC_ASYNC_GENERIC_SERVICE_H #define GRPCXX_GENERIC_ASYNC_GENERIC_SERVICE_H #include #endif // GRPCXX_GENERIC_ASYNC_GENERIC_SERVICE_H grpc-1.30.2/include/grpc++/generic/generic_stub.h000066400000000000000000000016531370425124100214760ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_GENERIC_GENERIC_STUB_H #define GRPCXX_GENERIC_GENERIC_STUB_H #include #endif // GRPCXX_GENERIC_GENERIC_STUB_H grpc-1.30.2/include/grpc++/grpc++.h000066400000000000000000000015631370425124100164720ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_GRPCXX_H #define GRPCXX_GRPCXX_H #include #endif // GRPCXX_GRPCXX_H grpc-1.30.2/include/grpc++/health_check_service_interface.h000066400000000000000000000017231370425124100235510ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_HEALTH_CHECK_SERVICE_INTERFACE_H #define GRPCXX_HEALTH_CHECK_SERVICE_INTERFACE_H #include #endif // GRPCXX_HEALTH_CHECK_SERVICE_INTERFACE_H grpc-1.30.2/include/grpc++/impl/000077500000000000000000000000001370425124100161745ustar00rootroot00000000000000grpc-1.30.2/include/grpc++/impl/call.h000066400000000000000000000015771370425124100172720ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CALL_H #define GRPCXX_IMPL_CALL_H #include #endif // GRPCXX_IMPL_CALL_H grpc-1.30.2/include/grpc++/impl/channel_argument_option.h000066400000000000000000000017131370425124100232510ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CHANNEL_ARGUMENT_OPTION_H #define GRPCXX_IMPL_CHANNEL_ARGUMENT_OPTION_H #include #endif // GRPCXX_IMPL_CHANNEL_ARGUMENT_OPTION_H grpc-1.30.2/include/grpc++/impl/client_unary_call.h000066400000000000000000000016631370425124100220420ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CLIENT_UNARY_CALL_H #define GRPCXX_IMPL_CLIENT_UNARY_CALL_H #include #endif // GRPCXX_IMPL_CLIENT_UNARY_CALL_H grpc-1.30.2/include/grpc++/impl/codegen/000077500000000000000000000000001370425124100176005ustar00rootroot00000000000000grpc-1.30.2/include/grpc++/impl/codegen/async_stream.h000066400000000000000000000016771370425124100224540ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_ASYNC_STREAM_H #define GRPCXX_IMPL_CODEGEN_ASYNC_STREAM_H #include #endif // GRPCXX_IMPL_CODEGEN_ASYNC_STREAM_H grpc-1.30.2/include/grpc++/impl/codegen/async_unary_call.h000066400000000000000000000017171370425124100233050ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_ASYNC_UNARY_CALL_H #define GRPCXX_IMPL_CODEGEN_ASYNC_UNARY_CALL_H #include #endif // GRPCXX_IMPL_CODEGEN_ASYNC_UNARY_CALL_H grpc-1.30.2/include/grpc++/impl/codegen/byte_buffer.h000066400000000000000000000016731370425124100222540ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_BYTE_BUFFER_H #define GRPCXX_IMPL_CODEGEN_BYTE_BUFFER_H #include #endif // GRPCXX_IMPL_CODEGEN_BYTE_BUFFER_H grpc-1.30.2/include/grpc++/impl/codegen/call.h000066400000000000000000000016371370425124100206730ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_CALL_H #define GRPCXX_IMPL_CODEGEN_CALL_H #include #endif // GRPCXX_IMPL_CODEGEN_CALL_H grpc-1.30.2/include/grpc++/impl/codegen/call_hook.h000066400000000000000000000016631370425124100217120ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_CALL_HOOK_H #define GRPCXX_IMPL_CODEGEN_CALL_HOOK_H #include #endif // GRPCXX_IMPL_CODEGEN_CALL_HOOK_H grpc-1.30.2/include/grpc++/impl/codegen/channel_interface.h000066400000000000000000000017231370425124100234040ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_CHANNEL_INTERFACE_H #define GRPCXX_IMPL_CODEGEN_CHANNEL_INTERFACE_H #include #endif // GRPCXX_IMPL_CODEGEN_CHANNEL_INTERFACE_H grpc-1.30.2/include/grpc++/impl/codegen/client_context.h000066400000000000000000000017071370425124100230000ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_CLIENT_CONTEXT_H #define GRPCXX_IMPL_CODEGEN_CLIENT_CONTEXT_H #include #endif // GRPCXX_IMPL_CODEGEN_CLIENT_CONTEXT_H grpc-1.30.2/include/grpc++/impl/codegen/client_unary_call.h000066400000000000000000000017231370425124100234430ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_CLIENT_UNARY_CALL_H #define GRPCXX_IMPL_CODEGEN_CLIENT_UNARY_CALL_H #include #endif // GRPCXX_IMPL_CODEGEN_CLIENT_UNARY_CALL_H grpc-1.30.2/include/grpc++/impl/codegen/completion_queue.h000066400000000000000000000017171370425124100233340ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_COMPLETION_QUEUE_H #define GRPCXX_IMPL_CODEGEN_COMPLETION_QUEUE_H #include #endif // GRPCXX_IMPL_CODEGEN_COMPLETION_QUEUE_H grpc-1.30.2/include/grpc++/impl/codegen/completion_queue_tag.h000066400000000000000000000017371370425124100241710ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_COMPLETION_QUEUE_TAG_H #define GRPCXX_IMPL_CODEGEN_COMPLETION_QUEUE_TAG_H #include #endif // GRPCXX_IMPL_CODEGEN_COMPLETION_QUEUE_TAG_H grpc-1.30.2/include/grpc++/impl/codegen/config.h000066400000000000000000000016471370425124100212260ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_CONFIG_H #define GRPCXX_IMPL_CODEGEN_CONFIG_H #include #endif // GRPCXX_IMPL_CODEGEN_CONFIG_H grpc-1.30.2/include/grpc++/impl/codegen/config_protobuf.h000066400000000000000000000017131370425124100231400ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_CONFIG_PROTOBUF_H #define GRPCXX_IMPL_CODEGEN_CONFIG_PROTOBUF_H #include #endif // GRPCXX_IMPL_CODEGEN_CONFIG_PROTOBUF_H grpc-1.30.2/include/grpc++/impl/codegen/core_codegen.h000066400000000000000000000016771370425124100224000ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_CORE_CODEGEN_H #define GRPCXX_IMPL_CODEGEN_CORE_CODEGEN_H #include #endif // GRPCXX_IMPL_CODEGEN_CORE_CODEGEN_H grpc-1.30.2/include/grpc++/impl/codegen/core_codegen_interface.h000066400000000000000000000017471370425124100244160ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_CORE_CODEGEN_INTERFACE_H #define GRPCXX_IMPL_CODEGEN_CORE_CODEGEN_INTERFACE_H #include #endif // GRPCXX_IMPL_CODEGEN_CORE_CODEGEN_INTERFACE_H grpc-1.30.2/include/grpc++/impl/codegen/create_auth_context.h000066400000000000000000000017331370425124100240050ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_CREATE_AUTH_CONTEXT_H #define GRPCXX_IMPL_CODEGEN_CREATE_AUTH_CONTEXT_H #include #endif // GRPCXX_IMPL_CODEGEN_CREATE_AUTH_CONTEXT_H grpc-1.30.2/include/grpc++/impl/codegen/grpc_library.h000066400000000000000000000016771370425124100224430ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_GRPC_LIBRARY_H #define GRPCXX_IMPL_CODEGEN_GRPC_LIBRARY_H #include #endif // GRPCXX_IMPL_CODEGEN_GRPC_LIBRARY_H grpc-1.30.2/include/grpc++/impl/codegen/metadata_map.h000066400000000000000000000016771370425124100224010ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_METADATA_MAP_H #define GRPCXX_IMPL_CODEGEN_METADATA_MAP_H #include #endif // GRPCXX_IMPL_CODEGEN_METADATA_MAP_H grpc-1.30.2/include/grpc++/impl/codegen/method_handler_impl.h000066400000000000000000000017331370425124100237530ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_METHOD_HANDLER_IMPL_H #define GRPCXX_IMPL_CODEGEN_METHOD_HANDLER_IMPL_H #include #endif // GRPCXX_IMPL_CODEGEN_METHOD_HANDLER_IMPL_H grpc-1.30.2/include/grpc++/impl/codegen/proto_utils.h000066400000000000000000000016731370425124100223430ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_PROTO_UTILS_H #define GRPCXX_IMPL_CODEGEN_PROTO_UTILS_H #include #endif // GRPCXX_IMPL_CODEGEN_PROTO_UTILS_H grpc-1.30.2/include/grpc++/impl/codegen/rpc_method.h000066400000000000000000000016671370425124100221070ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_RPC_METHOD_H #define GRPCXX_IMPL_CODEGEN_RPC_METHOD_H #include #endif // GRPCXX_IMPL_CODEGEN_RPC_METHOD_H grpc-1.30.2/include/grpc++/impl/codegen/rpc_service_method.h000066400000000000000000000017271370425124100236240ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_RPC_SERVICE_METHOD_H #define GRPCXX_IMPL_CODEGEN_RPC_SERVICE_METHOD_H #include #endif // GRPCXX_IMPL_CODEGEN_RPC_SERVICE_METHOD_H grpc-1.30.2/include/grpc++/impl/codegen/security/000077500000000000000000000000001370425124100214475ustar00rootroot00000000000000grpc-1.30.2/include/grpc++/impl/codegen/security/auth_context.h000066400000000000000000000017431370425124100243320ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_SECURITY_AUTH_CONTEXT_H #define GRPCXX_IMPL_CODEGEN_SECURITY_AUTH_CONTEXT_H #include #endif // GRPCXX_IMPL_CODEGEN_SECURITY_AUTH_CONTEXT_H grpc-1.30.2/include/grpc++/impl/codegen/serialization_traits.h000066400000000000000000000017371370425124100242240ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_SERIALIZATION_TRAITS_H #define GRPCXX_IMPL_CODEGEN_SERIALIZATION_TRAITS_H #include #endif // GRPCXX_IMPL_CODEGEN_SERIALIZATION_TRAITS_H grpc-1.30.2/include/grpc++/impl/codegen/server_context.h000066400000000000000000000017071370425124100230300ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_SERVER_CONTEXT_H #define GRPCXX_IMPL_CODEGEN_SERVER_CONTEXT_H #include #endif // GRPCXX_IMPL_CODEGEN_SERVER_CONTEXT_H grpc-1.30.2/include/grpc++/impl/codegen/server_interface.h000066400000000000000000000017171370425124100233050ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_SERVER_INTERFACE_H #define GRPCXX_IMPL_CODEGEN_SERVER_INTERFACE_H #include #endif // GRPCXX_IMPL_CODEGEN_SERVER_INTERFACE_H grpc-1.30.2/include/grpc++/impl/codegen/service_type.h000066400000000000000000000016771370425124100224650ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_SERVICE_TYPE_H #define GRPCXX_IMPL_CODEGEN_SERVICE_TYPE_H #include #endif // GRPCXX_IMPL_CODEGEN_SERVICE_TYPE_H grpc-1.30.2/include/grpc++/impl/codegen/slice.h000066400000000000000000000016431370425124100210540ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_SLICE_H #define GRPCXX_IMPL_CODEGEN_SLICE_H #include #endif // GRPCXX_IMPL_CODEGEN_SLICE_H grpc-1.30.2/include/grpc++/impl/codegen/status.h000066400000000000000000000016471370425124100213040ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_STATUS_H #define GRPCXX_IMPL_CODEGEN_STATUS_H #include #endif // GRPCXX_IMPL_CODEGEN_STATUS_H grpc-1.30.2/include/grpc++/impl/codegen/status_code_enum.h000066400000000000000000000017171370425124100233200ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_STATUS_CODE_ENUM_H #define GRPCXX_IMPL_CODEGEN_STATUS_CODE_ENUM_H #include #endif // GRPCXX_IMPL_CODEGEN_STATUS_CODE_ENUM_H grpc-1.30.2/include/grpc++/impl/codegen/string_ref.h000066400000000000000000000016671370425124100221250ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_STRING_REF_H #define GRPCXX_IMPL_CODEGEN_STRING_REF_H #include #endif // GRPCXX_IMPL_CODEGEN_STRING_REF_H grpc-1.30.2/include/grpc++/impl/codegen/stub_options.h000066400000000000000000000016771370425124100225140ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_STUB_OPTIONS_H #define GRPCXX_IMPL_CODEGEN_STUB_OPTIONS_H #include #endif // GRPCXX_IMPL_CODEGEN_STUB_OPTIONS_H grpc-1.30.2/include/grpc++/impl/codegen/sync_stream.h000066400000000000000000000016731370425124100223070ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_SYNC_STREAM_H #define GRPCXX_IMPL_CODEGEN_SYNC_STREAM_H #include #endif // GRPCXX_IMPL_CODEGEN_SYNC_STREAM_H grpc-1.30.2/include/grpc++/impl/codegen/time.h000066400000000000000000000016371370425124100207160ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_CODEGEN_TIME_H #define GRPCXX_IMPL_CODEGEN_TIME_H #include #endif // GRPCXX_IMPL_CODEGEN_TIME_H grpc-1.30.2/include/grpc++/impl/grpc_library.h000066400000000000000000000016371370425124100210330ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_GRPC_LIBRARY_H #define GRPCXX_IMPL_GRPC_LIBRARY_H #include #endif // GRPCXX_IMPL_GRPC_LIBRARY_H grpc-1.30.2/include/grpc++/impl/method_handler_impl.h000066400000000000000000000016731370425124100223520ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_METHOD_HANDLER_IMPL_H #define GRPCXX_IMPL_METHOD_HANDLER_IMPL_H #include #endif // GRPCXX_IMPL_METHOD_HANDLER_IMPL_H grpc-1.30.2/include/grpc++/impl/rpc_method.h000066400000000000000000000016271370425124100204770ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_RPC_METHOD_H #define GRPCXX_IMPL_RPC_METHOD_H #include #endif // GRPCXX_IMPL_RPC_METHOD_H grpc-1.30.2/include/grpc++/impl/rpc_service_method.h000066400000000000000000000016671370425124100222230ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_RPC_SERVICE_METHOD_H #define GRPCXX_IMPL_RPC_SERVICE_METHOD_H #include #endif // GRPCXX_IMPL_RPC_SERVICE_METHOD_H grpc-1.30.2/include/grpc++/impl/serialization_traits.h000066400000000000000000000016771370425124100226230ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_SERIALIZATION_TRAITS_H #define GRPCXX_IMPL_SERIALIZATION_TRAITS_H #include #endif // GRPCXX_IMPL_SERIALIZATION_TRAITS_H grpc-1.30.2/include/grpc++/impl/server_builder_option.h000066400000000000000000000017031370425124100227520ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_SERVER_BUILDER_OPTION_H #define GRPCXX_IMPL_SERVER_BUILDER_OPTION_H #include #endif // GRPCXX_IMPL_SERVER_BUILDER_OPTION_H grpc-1.30.2/include/grpc++/impl/server_builder_plugin.h000066400000000000000000000017031370425124100227400ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_SERVER_BUILDER_PLUGIN_H #define GRPCXX_IMPL_SERVER_BUILDER_PLUGIN_H #include #endif // GRPCXX_IMPL_SERVER_BUILDER_PLUGIN_H grpc-1.30.2/include/grpc++/impl/server_initializer.h000066400000000000000000000016671370425124100222700ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_SERVER_INITIALIZER_H #define GRPCXX_IMPL_SERVER_INITIALIZER_H #include #endif // GRPCXX_IMPL_SERVER_INITIALIZER_H grpc-1.30.2/include/grpc++/impl/service_type.h000066400000000000000000000016371370425124100210550ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_IMPL_SERVICE_TYPE_H #define GRPCXX_IMPL_SERVICE_TYPE_H #include #endif // GRPCXX_IMPL_SERVICE_TYPE_H grpc-1.30.2/include/grpc++/resource_quota.h000066400000000000000000000016231370425124100204460ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_RESOURCE_QUOTA_H #define GRPCXX_RESOURCE_QUOTA_H #include #endif // GRPCXX_RESOURCE_QUOTA_H grpc-1.30.2/include/grpc++/security/000077500000000000000000000000001370425124100171025ustar00rootroot00000000000000grpc-1.30.2/include/grpc++/security/auth_context.h000066400000000000000000000016571370425124100217710ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_SECURITY_AUTH_CONTEXT_H #define GRPCXX_SECURITY_AUTH_CONTEXT_H #include #endif // GRPCXX_SECURITY_AUTH_CONTEXT_H grpc-1.30.2/include/grpc++/security/auth_metadata_processor.h000066400000000000000000000017331370425124100241570ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_SECURITY_AUTH_METADATA_PROCESSOR_H #define GRPCXX_SECURITY_AUTH_METADATA_PROCESSOR_H #include #endif // GRPCXX_SECURITY_AUTH_METADATA_PROCESSOR_H grpc-1.30.2/include/grpc++/security/credentials.h000066400000000000000000000016531370425124100215550ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_SECURITY_CREDENTIALS_H #define GRPCXX_SECURITY_CREDENTIALS_H #include #endif // GRPCXX_SECURITY_CREDENTIALS_H grpc-1.30.2/include/grpc++/security/server_credentials.h000066400000000000000000000017071370425124100231430ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_SECURITY_SERVER_CREDENTIALS_H #define GRPCXX_SECURITY_SERVER_CREDENTIALS_H #include #endif // GRPCXX_SECURITY_SERVER_CREDENTIALS_H grpc-1.30.2/include/grpc++/server.h000066400000000000000000000015631370425124100167170ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_SERVER_H #define GRPCXX_SERVER_H #include #endif // GRPCXX_SERVER_H grpc-1.30.2/include/grpc++/server_builder.h000066400000000000000000000016231370425124100204220ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_SERVER_BUILDER_H #define GRPCXX_SERVER_BUILDER_H #include #endif // GRPCXX_SERVER_BUILDER_H grpc-1.30.2/include/grpc++/server_context.h000066400000000000000000000016231370425124100204600ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_SERVER_CONTEXT_H #define GRPCXX_SERVER_CONTEXT_H #include #endif // GRPCXX_SERVER_CONTEXT_H grpc-1.30.2/include/grpc++/server_posix.h000066400000000000000000000016131370425124100201350ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_SERVER_POSIX_H #define GRPCXX_SERVER_POSIX_H #include #endif // GRPCXX_SERVER_POSIX_H grpc-1.30.2/include/grpc++/support/000077500000000000000000000000001370425124100167475ustar00rootroot00000000000000grpc-1.30.2/include/grpc++/support/async_stream.h000066400000000000000000000016531370425124100216150ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_SUPPORT_ASYNC_STREAM_H #define GRPCXX_SUPPORT_ASYNC_STREAM_H #include #endif // GRPCXX_SUPPORT_ASYNC_STREAM_H grpc-1.30.2/include/grpc++/support/async_unary_call.h000066400000000000000000000016731370425124100224550ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_SUPPORT_ASYNC_UNARY_CALL_H #define GRPCXX_SUPPORT_ASYNC_UNARY_CALL_H #include #endif // GRPCXX_SUPPORT_ASYNC_UNARY_CALL_H grpc-1.30.2/include/grpc++/support/byte_buffer.h000066400000000000000000000016471370425124100214240ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_SUPPORT_BYTE_BUFFER_H #define GRPCXX_SUPPORT_BYTE_BUFFER_H #include #endif // GRPCXX_SUPPORT_BYTE_BUFFER_H grpc-1.30.2/include/grpc++/support/channel_arguments.h000066400000000000000000000016771370425124100226300ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_SUPPORT_CHANNEL_ARGUMENTS_H #define GRPCXX_SUPPORT_CHANNEL_ARGUMENTS_H #include #endif // GRPCXX_SUPPORT_CHANNEL_ARGUMENTS_H grpc-1.30.2/include/grpc++/support/config.h000066400000000000000000000016231370425124100203670ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_SUPPORT_CONFIG_H #define GRPCXX_SUPPORT_CONFIG_H #include #endif // GRPCXX_SUPPORT_CONFIG_H grpc-1.30.2/include/grpc++/support/error_details.h000066400000000000000000000016571370425124100217670ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_SUPPORT_ERROR_DETAILS_H #define GRPCXX_SUPPORT_ERROR_DETAILS_H #include #endif // GRPCXX_SUPPORT_ERROR_DETAILS_H grpc-1.30.2/include/grpc++/support/slice.h000066400000000000000000000016171370425124100202240ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_SUPPORT_SLICE_H #define GRPCXX_SUPPORT_SLICE_H #include #endif // GRPCXX_SUPPORT_SLICE_H grpc-1.30.2/include/grpc++/support/status.h000066400000000000000000000016231370425124100204450ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_SUPPORT_STATUS_H #define GRPCXX_SUPPORT_STATUS_H #include #endif // GRPCXX_SUPPORT_STATUS_H grpc-1.30.2/include/grpc++/support/status_code_enum.h000066400000000000000000000016731370425124100224700ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_SUPPORT_STATUS_CODE_ENUM_H #define GRPCXX_SUPPORT_STATUS_CODE_ENUM_H #include #endif // GRPCXX_SUPPORT_STATUS_CODE_ENUM_H grpc-1.30.2/include/grpc++/support/string_ref.h000066400000000000000000000016431370425124100212660ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_SUPPORT_STRING_REF_H #define GRPCXX_SUPPORT_STRING_REF_H #include #endif // GRPCXX_SUPPORT_STRING_REF_H grpc-1.30.2/include/grpc++/support/stub_options.h000066400000000000000000000016531370425124100216550ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_SUPPORT_STUB_OPTIONS_H #define GRPCXX_SUPPORT_STUB_OPTIONS_H #include #endif // GRPCXX_SUPPORT_STUB_OPTIONS_H grpc-1.30.2/include/grpc++/support/sync_stream.h000066400000000000000000000016471370425124100214570ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_SUPPORT_SYNC_STREAM_H #define GRPCXX_SUPPORT_SYNC_STREAM_H #include #endif // GRPCXX_SUPPORT_SYNC_STREAM_H grpc-1.30.2/include/grpc++/support/time.h000066400000000000000000000016131370425124100200570ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_SUPPORT_TIME_H #define GRPCXX_SUPPORT_TIME_H #include #endif // GRPCXX_SUPPORT_TIME_H grpc-1.30.2/include/grpc++/test/000077500000000000000000000000001370425124100162125ustar00rootroot00000000000000grpc-1.30.2/include/grpc++/test/mock_stream.h000066400000000000000000000016331370425124100206720ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_TEST_MOCK_STREAM_H #define GRPCXX_TEST_MOCK_STREAM_H #include #endif // GRPCXX_TEST_MOCK_STREAM_H grpc-1.30.2/include/grpc++/test/server_context_test_spouse.h000066400000000000000000000017271370425124100241010ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ // DEPRECATED: The headers in include/grpc++ are deprecated. Please include the // headers in include/grpcpp instead. This header exists only for backwards // compatibility. #ifndef GRPCXX_TEST_SERVER_CONTEXT_TEST_SPOUSE_H #define GRPCXX_TEST_SERVER_CONTEXT_TEST_SPOUSE_H #include #endif // GRPCXX_TEST_SERVER_CONTEXT_TEST_SPOUSE_H grpc-1.30.2/include/grpc/000077500000000000000000000000001370425124100151055ustar00rootroot00000000000000grpc-1.30.2/include/grpc/byte_buffer.h000066400000000000000000000014471370425124100175600ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_BYTE_BUFFER_H #define GRPC_BYTE_BUFFER_H #include #include #include #endif /* GRPC_BYTE_BUFFER_H */ grpc-1.30.2/include/grpc/byte_buffer_reader.h000066400000000000000000000014441370425124100210770ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_BYTE_BUFFER_READER_H #define GRPC_BYTE_BUFFER_READER_H #include #include #endif /* GRPC_BYTE_BUFFER_READER_H */ grpc-1.30.2/include/grpc/census.h000066400000000000000000000020731370425124100165600ustar00rootroot00000000000000/* * * Copyright 2015-2016 gRPC 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 * * 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. * */ #ifndef GRPC_CENSUS_H #define GRPC_CENSUS_H #include #include #ifdef __cplusplus extern "C" { #endif /** A Census Context is a handle used by Census to represent the current tracing and stats collection information. Contexts should be propagated across RPC's (this is the responsibility of the local RPC system). */ typedef struct census_context census_context; #ifdef __cplusplus } #endif #endif /* GRPC_CENSUS_H */ grpc-1.30.2/include/grpc/compression.h000066400000000000000000000052101370425124100176150ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_COMPRESSION_H #define GRPC_COMPRESSION_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif /** Return if an algorithm is message compression algorithm. */ GRPCAPI int grpc_compression_algorithm_is_message( grpc_compression_algorithm algorithm); /** Return if an algorithm is stream compression algorithm. */ GRPCAPI int grpc_compression_algorithm_is_stream( grpc_compression_algorithm algorithm); /** Parses the \a slice as a grpc_compression_algorithm instance and updating \a * algorithm. Returns 1 upon success, 0 otherwise. */ GRPCAPI int grpc_compression_algorithm_parse( grpc_slice value, grpc_compression_algorithm* algorithm); /** Updates \a name with the encoding name corresponding to a valid \a * algorithm. Note that \a name is statically allocated and must *not* be freed. * Returns 1 upon success, 0 otherwise. */ GRPCAPI int grpc_compression_algorithm_name( grpc_compression_algorithm algorithm, const char** name); /** Returns the compression algorithm corresponding to \a level for the * compression algorithms encoded in the \a accepted_encodings bitset.*/ GRPCAPI grpc_compression_algorithm grpc_compression_algorithm_for_level( grpc_compression_level level, uint32_t accepted_encodings); GRPCAPI void grpc_compression_options_init(grpc_compression_options* opts); /** Mark \a algorithm as enabled in \a opts. */ GRPCAPI void grpc_compression_options_enable_algorithm( grpc_compression_options* opts, grpc_compression_algorithm algorithm); /** Mark \a algorithm as disabled in \a opts. */ GRPCAPI void grpc_compression_options_disable_algorithm( grpc_compression_options* opts, grpc_compression_algorithm algorithm); /** Returns true if \a algorithm is marked as enabled in \a opts. */ GRPCAPI int grpc_compression_options_is_algorithm_enabled( const grpc_compression_options* opts, grpc_compression_algorithm algorithm); #ifdef __cplusplus } #endif #endif /* GRPC_COMPRESSION_H */ grpc-1.30.2/include/grpc/fork.h000066400000000000000000000013541370425124100162220ustar00rootroot00000000000000/* * * Copyright 2017 gRPC 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 * * 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. * */ #ifndef GRPC_FORK_H #define GRPC_FORK_H #include #include #endif /* GRPC_FORK_H */ grpc-1.30.2/include/grpc/grpc.h000066400000000000000000000604151370425124100162170ustar00rootroot00000000000000/* * * Copyright 2015-2016 gRPC 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 * * 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. * */ #ifndef GRPC_GRPC_H #define GRPC_GRPC_H #include #include #include #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif /*! \mainpage GRPC Core * * The GRPC Core library is a low-level library designed to be wrapped by higher * level libraries. The top-level API is provided in grpc.h. Security related * functionality lives in grpc_security.h. */ GRPCAPI void grpc_metadata_array_init(grpc_metadata_array* array); GRPCAPI void grpc_metadata_array_destroy(grpc_metadata_array* array); GRPCAPI void grpc_call_details_init(grpc_call_details* details); GRPCAPI void grpc_call_details_destroy(grpc_call_details* details); /** Registers a plugin to be initialized and destroyed with the library. The \a init and \a destroy functions will be invoked as part of \a grpc_init() and \a grpc_shutdown(), respectively. Note that these functions can be invoked an arbitrary number of times (and hence so will \a init and \a destroy). It is safe to pass NULL to either argument. Plugins are destroyed in the reverse order they were initialized. */ GRPCAPI void grpc_register_plugin(void (*init)(void), void (*destroy)(void)); /** Initialize the grpc library. After it's called, a matching invocation to grpc_shutdown() is expected. It is not safe to call any other grpc functions before calling this. (To avoid overhead, little checking is done, and some things may work. We do not warrant that they will continue to do so in future revisions of this library). */ GRPCAPI void grpc_init(void); /** Shut down the grpc library. Before it's called, there should haven been a matching invocation to grpc_init(). The last call to grpc_shutdown will initiate cleaning up of grpc library internals, which can happen in another thread. Once the clean-up is done, no memory is used by grpc, nor are any instructions executing within the grpc library. Prior to calling, all application owned grpc objects must have been destroyed. */ GRPCAPI void grpc_shutdown(void); /** EXPERIMENTAL. Returns 1 if the grpc library has been initialized. TODO(ericgribkoff) Decide if this should be promoted to non-experimental as part of stabilizing the fork support API, as tracked in https://github.com/grpc/grpc/issues/15334 */ GRPCAPI int grpc_is_initialized(void); /** EXPERIMENTAL. Blocking shut down grpc library. This is only for wrapped language to use now. */ GRPCAPI void grpc_shutdown_blocking(void); /** Return a string representing the current version of grpc */ GRPCAPI const char* grpc_version_string(void); /** Return a string specifying what the 'g' in gRPC stands for */ GRPCAPI const char* grpc_g_stands_for(void); /** Returns the completion queue factory based on the attributes. MAY return a NULL if no factory can be found */ GRPCAPI const grpc_completion_queue_factory* grpc_completion_queue_factory_lookup( const grpc_completion_queue_attributes* attributes); /** Helper function to create a completion queue with grpc_cq_completion_type of GRPC_CQ_NEXT and grpc_cq_polling_type of GRPC_CQ_DEFAULT_POLLING */ GRPCAPI grpc_completion_queue* grpc_completion_queue_create_for_next( void* reserved); /** Helper function to create a completion queue with grpc_cq_completion_type of GRPC_CQ_PLUCK and grpc_cq_polling_type of GRPC_CQ_DEFAULT_POLLING */ GRPCAPI grpc_completion_queue* grpc_completion_queue_create_for_pluck( void* reserved); /** Helper function to create a completion queue with grpc_cq_completion_type of GRPC_CQ_CALLBACK and grpc_cq_polling_type of GRPC_CQ_DEFAULT_POLLING. This function is experimental. */ GRPCAPI grpc_completion_queue* grpc_completion_queue_create_for_callback( grpc_experimental_completion_queue_functor* shutdown_callback, void* reserved); /** Create a completion queue */ GRPCAPI grpc_completion_queue* grpc_completion_queue_create( const grpc_completion_queue_factory* factory, const grpc_completion_queue_attributes* attributes, void* reserved); /** Blocks until an event is available, the completion queue is being shut down, or deadline is reached. Returns a grpc_event with type GRPC_QUEUE_TIMEOUT on timeout, otherwise a grpc_event describing the event that occurred. Callers must not call grpc_completion_queue_next and grpc_completion_queue_pluck simultaneously on the same completion queue. */ GRPCAPI grpc_event grpc_completion_queue_next(grpc_completion_queue* cq, gpr_timespec deadline, void* reserved); /** Blocks until an event with tag 'tag' is available, the completion queue is being shutdown or deadline is reached. Returns a grpc_event with type GRPC_QUEUE_TIMEOUT on timeout, otherwise a grpc_event describing the event that occurred. Callers must not call grpc_completion_queue_next and grpc_completion_queue_pluck simultaneously on the same completion queue. Completion queues support a maximum of GRPC_MAX_COMPLETION_QUEUE_PLUCKERS concurrently executing plucks at any time. */ GRPCAPI grpc_event grpc_completion_queue_pluck(grpc_completion_queue* cq, void* tag, gpr_timespec deadline, void* reserved); /** Maximum number of outstanding grpc_completion_queue_pluck executions per completion queue */ #define GRPC_MAX_COMPLETION_QUEUE_PLUCKERS 6 /** Begin destruction of a completion queue. Once all possible events are drained then grpc_completion_queue_next will start to produce GRPC_QUEUE_SHUTDOWN events only. At that point it's safe to call grpc_completion_queue_destroy. After calling this function applications should ensure that no NEW work is added to be published on this completion queue. */ GRPCAPI void grpc_completion_queue_shutdown(grpc_completion_queue* cq); /** Destroy a completion queue. The caller must ensure that the queue is drained and no threads are executing grpc_completion_queue_next */ GRPCAPI void grpc_completion_queue_destroy(grpc_completion_queue* cq); /*********** EXPERIMENTAL API ************/ /** Initializes a thread local cache for \a cq. * grpc_flush_cq_tls_cache() MUST be called on the same thread, * with the same cq. */ GRPCAPI void grpc_completion_queue_thread_local_cache_init( grpc_completion_queue* cq); /*********** EXPERIMENTAL API ************/ /** Flushes the thread local cache for \a cq. * Returns 1 if there was contents in the cache. If there was an event * in \a cq tls cache, its tag is placed in tag, and ok is set to the * event success. */ GRPCAPI int grpc_completion_queue_thread_local_cache_flush( grpc_completion_queue* cq, void** tag, int* ok); /** Check the connectivity state of a channel. */ GRPCAPI grpc_connectivity_state grpc_channel_check_connectivity_state( grpc_channel* channel, int try_to_connect); /** Number of active "external connectivity state watchers" attached to a * channel. * Useful for testing. **/ GRPCAPI int grpc_channel_num_external_connectivity_watchers( grpc_channel* channel); /** Watch for a change in connectivity state. Once the channel connectivity state is different from last_observed_state, tag will be enqueued on cq with success=1. If deadline expires BEFORE the state is changed, tag will be enqueued on cq with success=0. */ GRPCAPI void grpc_channel_watch_connectivity_state( grpc_channel* channel, grpc_connectivity_state last_observed_state, gpr_timespec deadline, grpc_completion_queue* cq, void* tag); /** Check whether a grpc channel supports connectivity watcher */ GRPCAPI int grpc_channel_support_connectivity_watcher(grpc_channel* channel); /** Create a call given a grpc_channel, in order to call 'method'. All completions are sent to 'completion_queue'. 'method' and 'host' need only live through the invocation of this function. If parent_call is non-NULL, it must be a server-side call. It will be used to propagate properties from the server call to this new client call, depending on the value of \a propagation_mask (see propagation_bits.h for possible values). */ GRPCAPI grpc_call* grpc_channel_create_call( grpc_channel* channel, grpc_call* parent_call, uint32_t propagation_mask, grpc_completion_queue* completion_queue, grpc_slice method, const grpc_slice* host, gpr_timespec deadline, void* reserved); /** Ping the channels peer (load balanced channels will select one sub-channel to ping); if the channel is not connected, posts a failed. */ GRPCAPI void grpc_channel_ping(grpc_channel* channel, grpc_completion_queue* cq, void* tag, void* reserved); /** Pre-register a method/host pair on a channel. method and host are not owned and must remain alive while the channel is alive. */ GRPCAPI void* grpc_channel_register_call(grpc_channel* channel, const char* method, const char* host, void* reserved); /** Create a call given a handle returned from grpc_channel_register_call. \sa grpc_channel_create_call. */ GRPCAPI grpc_call* grpc_channel_create_registered_call( grpc_channel* channel, grpc_call* parent_call, uint32_t propagation_mask, grpc_completion_queue* completion_queue, void* registered_call_handle, gpr_timespec deadline, void* reserved); /** Allocate memory in the grpc_call arena: this memory is automatically discarded at call completion */ GRPCAPI void* grpc_call_arena_alloc(grpc_call* call, size_t size); /** Start a batch of operations defined in the array ops; when complete, post a completion of type 'tag' to the completion queue bound to the call. The order of ops specified in the batch has no significance. Only one operation of each type can be active at once in any given batch. If a call to grpc_call_start_batch returns GRPC_CALL_OK you must call grpc_completion_queue_next or grpc_completion_queue_pluck on the completion queue associated with 'call' for work to be performed. If a call to grpc_call_start_batch returns any value other than GRPC_CALL_OK it is guaranteed that no state associated with 'call' is changed and it is not appropriate to call grpc_completion_queue_next or grpc_completion_queue_pluck consequent to the failed grpc_call_start_batch call. If a call to grpc_call_start_batch with an empty batch returns GRPC_CALL_OK, the tag is put in the completion queue immediately. THREAD SAFETY: access to grpc_call_start_batch in multi-threaded environment needs to be synchronized. As an optimization, you may synchronize batches containing just send operations independently from batches containing just receive operations. Access to grpc_call_start_batch with an empty batch is thread-compatible. */ GRPCAPI grpc_call_error grpc_call_start_batch(grpc_call* call, const grpc_op* ops, size_t nops, void* tag, void* reserved); /** Returns a newly allocated string representing the endpoint to which this call is communicating with. The string is in the uri format accepted by grpc_channel_create. The returned string should be disposed of with gpr_free(). WARNING: this value is never authenticated or subject to any security related code. It must not be used for any authentication related functionality. Instead, use grpc_auth_context. */ GRPCAPI char* grpc_call_get_peer(grpc_call* call); struct census_context; /** Set census context for a call; Must be called before first call to grpc_call_start_batch(). */ GRPCAPI void grpc_census_call_set_context(grpc_call* call, struct census_context* context); /** Retrieve the calls current census context. */ GRPCAPI struct census_context* grpc_census_call_get_context(grpc_call* call); /** Return a newly allocated string representing the target a channel was created for. */ GRPCAPI char* grpc_channel_get_target(grpc_channel* channel); /** Request info about the channel. \a channel_info indicates what information is being requested and how that information will be returned. \a channel_info is owned by the caller. */ GRPCAPI void grpc_channel_get_info(grpc_channel* channel, const grpc_channel_info* channel_info); /** EXPERIMENTAL. Resets the channel's connect backoff. TODO(roth): When we see whether this proves useful, either promote to non-experimental or remove it. */ GRPCAPI void grpc_channel_reset_connect_backoff(grpc_channel* channel); /** Create a client channel to 'target'. Additional channel level configuration MAY be provided by grpc_channel_args, though the expectation is that most clients will want to simply pass NULL. The user data in 'args' need only live through the invocation of this function. However, if any args of the 'pointer' type are passed, then the referenced vtable must be maintained by the caller until grpc_channel_destroy terminates. See grpc_channel_args definition for more on this. */ GRPCAPI grpc_channel* grpc_insecure_channel_create( const char* target, const grpc_channel_args* args, void* reserved); /** Create a lame client: this client fails every operation attempted on it. */ GRPCAPI grpc_channel* grpc_lame_client_channel_create( const char* target, grpc_status_code error_code, const char* error_message); /** Close and destroy a grpc channel */ GRPCAPI void grpc_channel_destroy(grpc_channel* channel); /** Error handling for grpc_call Most grpc_call functions return a grpc_error. If the error is not GRPC_OK then the operation failed due to some unsatisfied precondition. If a grpc_call fails, it's guaranteed that no change to the call state has been made. */ /** Cancel an RPC. Can be called multiple times, from any thread. THREAD-SAFETY grpc_call_cancel and grpc_call_cancel_with_status are thread-safe, and can be called at any point before grpc_call_unref is called.*/ GRPCAPI grpc_call_error grpc_call_cancel(grpc_call* call, void* reserved); /** Cancel an RPC. Can be called multiple times, from any thread. If a status has not been received for the call, set it to the status code and description passed in. Importantly, this function does not send status nor description to the remote endpoint. Note that \a description doesn't need be a static string. It doesn't need to be alive after the call to grpc_call_cancel_with_status completes. */ GRPCAPI grpc_call_error grpc_call_cancel_with_status(grpc_call* call, grpc_status_code status, const char* description, void* reserved); /** Ref a call. THREAD SAFETY: grpc_call_ref is thread-compatible */ GRPCAPI void grpc_call_ref(grpc_call* call); /** Unref a call. THREAD SAFETY: grpc_call_unref is thread-compatible */ GRPCAPI void grpc_call_unref(grpc_call* call); /** Request notification of a new call. Once a call is received, a notification tagged with \a tag_new is added to \a cq_for_notification. \a call, \a details and \a request_metadata are updated with the appropriate call information. \a cq_bound_to_call is bound to \a call, and batch operation notifications for that call will be posted to \a cq_bound_to_call. Note that \a cq_for_notification must have been registered to the server via \a grpc_server_register_completion_queue. */ GRPCAPI grpc_call_error grpc_server_request_call( grpc_server* server, grpc_call** call, grpc_call_details* details, grpc_metadata_array* request_metadata, grpc_completion_queue* cq_bound_to_call, grpc_completion_queue* cq_for_notification, void* tag_new); /** How to handle payloads for a registered method */ typedef enum { /** Don't try to read the payload */ GRPC_SRM_PAYLOAD_NONE, /** Read the initial payload as a byte buffer */ GRPC_SRM_PAYLOAD_READ_INITIAL_BYTE_BUFFER } grpc_server_register_method_payload_handling; /** Registers a method in the server. Methods to this (host, method) pair will not be reported by grpc_server_request_call, but instead be reported by grpc_server_request_registered_call when passed the appropriate registered_method (as returned by this function). Must be called before grpc_server_start. Returns NULL on failure. */ GRPCAPI void* grpc_server_register_method( grpc_server* server, const char* method, const char* host, grpc_server_register_method_payload_handling payload_handling, uint32_t flags); /** Request notification of a new pre-registered call. 'cq_for_notification' must have been registered to the server via grpc_server_register_completion_queue. */ GRPCAPI grpc_call_error grpc_server_request_registered_call( grpc_server* server, void* registered_method, grpc_call** call, gpr_timespec* deadline, grpc_metadata_array* request_metadata, grpc_byte_buffer** optional_payload, grpc_completion_queue* cq_bound_to_call, grpc_completion_queue* cq_for_notification, void* tag_new); /** Create a server. Additional configuration for each incoming channel can be specified with args. If no additional configuration is needed, args can be NULL. The user data in 'args' need only live through the invocation of this function. However, if any args of the 'pointer' type are passed, then the referenced vtable must be maintained by the caller until grpc_server_destroy terminates. See grpc_channel_args definition for more on this. */ GRPCAPI grpc_server* grpc_server_create(const grpc_channel_args* args, void* reserved); /** Register a completion queue with the server. Must be done for any notification completion queue that is passed to grpc_server_request_*_call and to grpc_server_shutdown_and_notify. Must be performed prior to grpc_server_start. */ GRPCAPI void grpc_server_register_completion_queue(grpc_server* server, grpc_completion_queue* cq, void* reserved); /** Add a HTTP2 over plaintext over tcp listener. Returns bound port number on success, 0 on failure. REQUIRES: server not started */ GRPCAPI int grpc_server_add_insecure_http2_port(grpc_server* server, const char* addr); /** Start a server - tells all listeners to start listening */ GRPCAPI void grpc_server_start(grpc_server* server); /** Begin shutting down a server. After completion, no new calls or connections will be admitted. Existing calls will be allowed to complete. Send a GRPC_OP_COMPLETE event when there are no more calls being serviced. Shutdown is idempotent, and all tags will be notified at once if multiple grpc_server_shutdown_and_notify calls are made. 'cq' must have been registered to this server via grpc_server_register_completion_queue. */ GRPCAPI void grpc_server_shutdown_and_notify(grpc_server* server, grpc_completion_queue* cq, void* tag); /** Cancel all in-progress calls. Only usable after shutdown. */ GRPCAPI void grpc_server_cancel_all_calls(grpc_server* server); /** Destroy a server. Shutdown must have completed beforehand (i.e. all tags generated by grpc_server_shutdown_and_notify must have been received, and at least one call to grpc_server_shutdown_and_notify must have been made). */ GRPCAPI void grpc_server_destroy(grpc_server* server); /** Enable or disable a tracer. Tracers (usually controlled by the environment variable GRPC_TRACE) allow printf-style debugging on GRPC internals, and are useful for tracking down problems in the field. Use of this function is not strictly thread-safe, but the thread-safety issues raised by it should not be of concern. */ GRPCAPI int grpc_tracer_set_enabled(const char* name, int enabled); /** Check whether a metadata key is legal (will be accepted by core) */ GRPCAPI int grpc_header_key_is_legal(grpc_slice slice); /** Check whether a non-binary metadata value is legal (will be accepted by core) */ GRPCAPI int grpc_header_nonbin_value_is_legal(grpc_slice slice); /** Check whether a metadata key corresponds to a binary value */ GRPCAPI int grpc_is_binary_header(grpc_slice slice); /** Convert grpc_call_error values to a string */ GRPCAPI const char* grpc_call_error_to_string(grpc_call_error error); /** Create a buffer pool */ GRPCAPI grpc_resource_quota* grpc_resource_quota_create(const char* trace_name); /** Add a reference to a buffer pool */ GRPCAPI void grpc_resource_quota_ref(grpc_resource_quota* resource_quota); /** Drop a reference to a buffer pool */ GRPCAPI void grpc_resource_quota_unref(grpc_resource_quota* resource_quota); /** Update the size of a buffer pool */ GRPCAPI void grpc_resource_quota_resize(grpc_resource_quota* resource_quota, size_t new_size); /** Update the size of the maximum number of threads allowed */ GRPCAPI void grpc_resource_quota_set_max_threads( grpc_resource_quota* resource_quota, int new_max_threads); /** Fetch a vtable for a grpc_channel_arg that points to a grpc_resource_quota */ GRPCAPI const grpc_arg_pointer_vtable* grpc_resource_quota_arg_vtable(void); /************* CHANNELZ API *************/ /** Channelz is under active development. The following APIs will see some churn as the feature is implemented. This comment will be removed once channelz is officially supported, and these APIs become stable. For now you may track the progress by following this github issue: https://github.com/grpc/grpc/issues/15340 the following APIs return allocated JSON strings that match the response objects from the channelz proto, found here: https://github.com/grpc/grpc/blob/master/src/proto/grpc/channelz/channelz.proto. For easy conversion to protobuf, The JSON is formatted according to: https://developers.google.com/protocol-buffers/docs/proto3#json. */ /* Gets all root channels (i.e. channels the application has directly created). This does not include subchannels nor non-top level channels. The returned string is allocated and must be freed by the application. */ GRPCAPI char* grpc_channelz_get_top_channels(intptr_t start_channel_id); /* Gets all servers that exist in the process. */ GRPCAPI char* grpc_channelz_get_servers(intptr_t start_server_id); /* Returns a single Server, or else a NOT_FOUND code. */ GRPCAPI char* grpc_channelz_get_server(intptr_t server_id); /* Gets all server sockets that exist in the server. */ GRPCAPI char* grpc_channelz_get_server_sockets(intptr_t server_id, intptr_t start_socket_id, intptr_t max_results); /* Returns a single Channel, or else a NOT_FOUND code. The returned string is allocated and must be freed by the application. */ GRPCAPI char* grpc_channelz_get_channel(intptr_t channel_id); /* Returns a single Subchannel, or else a NOT_FOUND code. The returned string is allocated and must be freed by the application. */ GRPCAPI char* grpc_channelz_get_subchannel(intptr_t subchannel_id); /* Returns a single Socket, or else a NOT_FOUND code. The returned string is allocated and must be freed by the application. */ GRPCAPI char* grpc_channelz_get_socket(intptr_t socket_id); #ifdef __cplusplus } #endif #endif /* GRPC_GRPC_H */ grpc-1.30.2/include/grpc/grpc_cronet.h000066400000000000000000000017151370425124100175670ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPC_GRPC_CRONET_H #define GRPC_GRPC_CRONET_H #include #include #ifdef __cplusplus extern "C" { #endif GRPCAPI grpc_channel* grpc_cronet_secure_channel_create( void* engine, const char* target, const grpc_channel_args* args, void* reserved); #ifdef __cplusplus } #endif #endif /* GRPC_GRPC_CRONET_H */ grpc-1.30.2/include/grpc/grpc_posix.h000066400000000000000000000036061370425124100174400ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPC_GRPC_POSIX_H #define GRPC_GRPC_POSIX_H #include #include #include #ifdef __cplusplus extern "C" { #endif /*! \mainpage GRPC Core POSIX * * The GRPC Core POSIX library provides some POSIX-specific low-level * functionality on top of GRPC Core. */ /** Create a client channel to 'target' using file descriptor 'fd'. The 'target' argument will be used to indicate the name for this channel. See the comment for grpc_insecure_channel_create for description of 'args' argument. */ GRPCAPI grpc_channel* grpc_insecure_channel_create_from_fd( const char* target, int fd, const grpc_channel_args* args); /** Add the connected communication channel based on file descriptor 'fd' to the 'server'. The 'fd' must be an open file descriptor corresponding to a connected socket. Events from the file descriptor may come on any of the server completion queues (i.e completion queues registered via the grpc_server_register_completion_queue API). The 'reserved' pointer MUST be NULL. */ GRPCAPI void grpc_server_add_insecure_channel_from_fd(grpc_server* server, void* reserved, int fd); #ifdef __cplusplus } #endif #endif /* GRPC_GRPC_POSIX_H */ grpc-1.30.2/include/grpc/grpc_security.h000066400000000000000000001360451370425124100201510ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_GRPC_SECURITY_H #define GRPC_GRPC_SECURITY_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif /** --- Authentication Context. --- */ typedef struct grpc_auth_context grpc_auth_context; typedef struct grpc_auth_property_iterator { const grpc_auth_context* ctx; size_t index; const char* name; } grpc_auth_property_iterator; /** value, if not NULL, is guaranteed to be NULL terminated. */ typedef struct grpc_auth_property { char* name; char* value; size_t value_length; } grpc_auth_property; /** Returns NULL when the iterator is at the end. */ GRPCAPI const grpc_auth_property* grpc_auth_property_iterator_next( grpc_auth_property_iterator* it); /** Iterates over the auth context. */ GRPCAPI grpc_auth_property_iterator grpc_auth_context_property_iterator(const grpc_auth_context* ctx); /** Gets the peer identity. Returns an empty iterator (first _next will return NULL) if the peer is not authenticated. */ GRPCAPI grpc_auth_property_iterator grpc_auth_context_peer_identity(const grpc_auth_context* ctx); /** Finds a property in the context. May return an empty iterator (first _next will return NULL) if no property with this name was found in the context. */ GRPCAPI grpc_auth_property_iterator grpc_auth_context_find_properties_by_name( const grpc_auth_context* ctx, const char* name); /** Gets the name of the property that indicates the peer identity. Will return NULL if the peer is not authenticated. */ GRPCAPI const char* grpc_auth_context_peer_identity_property_name( const grpc_auth_context* ctx); /** Returns 1 if the peer is authenticated, 0 otherwise. */ GRPCAPI int grpc_auth_context_peer_is_authenticated( const grpc_auth_context* ctx); /** Gets the auth context from the call. Caller needs to call grpc_auth_context_release on the returned context. */ GRPCAPI grpc_auth_context* grpc_call_auth_context(grpc_call* call); /** Releases the auth context returned from grpc_call_auth_context. */ GRPCAPI void grpc_auth_context_release(grpc_auth_context* context); /** -- The following auth context methods should only be called by a server metadata processor to set properties extracted from auth metadata. -- */ /** Add a property. */ GRPCAPI void grpc_auth_context_add_property(grpc_auth_context* ctx, const char* name, const char* value, size_t value_length); /** Add a C string property. */ GRPCAPI void grpc_auth_context_add_cstring_property(grpc_auth_context* ctx, const char* name, const char* value); /** Sets the property name. Returns 1 if successful or 0 in case of failure (which means that no property with this name exists). */ GRPCAPI int grpc_auth_context_set_peer_identity_property_name( grpc_auth_context* ctx, const char* name); /** --- SSL Session Cache. --- A SSL session cache object represents a way to cache client sessions between connections. Only ticket-based resumption is supported. */ typedef struct grpc_ssl_session_cache grpc_ssl_session_cache; /** Create LRU cache for client-side SSL sessions with the given capacity. If capacity is < 1, a default capacity is used instead. */ GRPCAPI grpc_ssl_session_cache* grpc_ssl_session_cache_create_lru( size_t capacity); /** Destroy SSL session cache. */ GRPCAPI void grpc_ssl_session_cache_destroy(grpc_ssl_session_cache* cache); /** Create a channel arg with the given cache object. */ GRPCAPI grpc_arg grpc_ssl_session_cache_create_channel_arg(grpc_ssl_session_cache* cache); /** --- grpc_channel_credentials object. --- A channel credentials object represents a way to authenticate a client on a channel. */ typedef struct grpc_channel_credentials grpc_channel_credentials; /** Releases a channel credentials object. The creator of the credentials object is responsible for its release. */ GRPCAPI void grpc_channel_credentials_release(grpc_channel_credentials* creds); /** Creates default credentials to connect to a google gRPC service. WARNING: Do NOT use this credentials to connect to a non-google service as this could result in an oauth2 token leak. The security level of the resulting connection is GRPC_PRIVACY_AND_INTEGRITY. */ GRPCAPI grpc_channel_credentials* grpc_google_default_credentials_create(void); /** Callback for getting the SSL roots override from the application. In case of success, *pem_roots_certs must be set to a NULL terminated string containing the list of PEM encoded root certificates. The ownership is passed to the core and freed (laster by the core) with gpr_free. If this function fails and GRPC_DEFAULT_SSL_ROOTS_FILE_PATH environment is set to a valid path, it will override the roots specified this func */ typedef grpc_ssl_roots_override_result (*grpc_ssl_roots_override_callback)( char** pem_root_certs); /** Setup a callback to override the default TLS/SSL roots. This function is not thread-safe and must be called at initialization time before any ssl credentials are created to have the desired side effect. If GRPC_DEFAULT_SSL_ROOTS_FILE_PATH environment is set to a valid path, the callback will not be called. */ GRPCAPI void grpc_set_ssl_roots_override_callback( grpc_ssl_roots_override_callback cb); /** Object that holds a private key / certificate chain pair in PEM format. */ typedef struct { /** private_key is the NULL-terminated string containing the PEM encoding of the client's private key. */ const char* private_key; /** cert_chain is the NULL-terminated string containing the PEM encoding of the client's certificate chain. */ const char* cert_chain; } grpc_ssl_pem_key_cert_pair; /** Deprecated in favor of grpc_ssl_verify_peer_options. It will be removed after all of its call sites are migrated to grpc_ssl_verify_peer_options. Object that holds additional peer-verification options on a secure channel. */ typedef struct { /** If non-NULL this callback will be invoked with the expected target_name, the peer's certificate (in PEM format), and whatever userdata pointer is set below. If a non-zero value is returned by this callback then it is treated as a verification failure. Invocation of the callback is blocking, so any implementation should be light-weight. */ int (*verify_peer_callback)(const char* target_name, const char* peer_pem, void* userdata); /** Arbitrary userdata that will be passed as the last argument to verify_peer_callback. */ void* verify_peer_callback_userdata; /** A destruct callback that will be invoked when the channel is being cleaned up. The userdata argument will be passed to it. The intent is to perform any cleanup associated with that userdata. */ void (*verify_peer_destruct)(void* userdata); } verify_peer_options; /** Object that holds additional peer-verification options on a secure channel. */ typedef struct { /** If non-NULL this callback will be invoked with the expected target_name, the peer's certificate (in PEM format), and whatever userdata pointer is set below. If a non-zero value is returned by this callback then it is treated as a verification failure. Invocation of the callback is blocking, so any implementation should be light-weight. */ int (*verify_peer_callback)(const char* target_name, const char* peer_pem, void* userdata); /** Arbitrary userdata that will be passed as the last argument to verify_peer_callback. */ void* verify_peer_callback_userdata; /** A destruct callback that will be invoked when the channel is being cleaned up. The userdata argument will be passed to it. The intent is to perform any cleanup associated with that userdata. */ void (*verify_peer_destruct)(void* userdata); } grpc_ssl_verify_peer_options; /** Deprecated in favor of grpc_ssl_server_credentials_create_ex. It will be removed after all of its call sites are migrated to grpc_ssl_server_credentials_create_ex. Creates an SSL credentials object. The security level of the resulting connection is GRPC_PRIVACY_AND_INTEGRITY. - pem_root_certs is the NULL-terminated string containing the PEM encoding of the server root certificates. If this parameter is NULL, the implementation will first try to dereference the file pointed by the GRPC_DEFAULT_SSL_ROOTS_FILE_PATH environment variable, and if that fails, try to get the roots set by grpc_override_ssl_default_roots. Eventually, if all these fail, it will try to get the roots from a well-known place on disk (in the grpc install directory). gRPC has implemented root cache if the underlying OpenSSL library supports it. The gRPC root certificates cache is only applicable on the default root certificates, which is used when this parameter is nullptr. If user provides their own pem_root_certs, when creating an SSL credential object, gRPC would not be able to cache it, and each subchannel will generate a copy of the root store. So it is recommended to avoid providing large room pem with pem_root_certs parameter to avoid excessive memory consumption, particularly on mobile platforms such as iOS. - pem_key_cert_pair is a pointer on the object containing client's private key and certificate chain. This parameter can be NULL if the client does not have such a key/cert pair. - verify_options is an optional verify_peer_options object which holds additional options controlling how peer certificates are verified. For example, you can supply a callback which receives the peer's certificate with which you can do additional verification. Can be NULL, in which case verification will retain default behavior. Any settings in verify_options are copied during this call, so the verify_options object can be released afterwards. */ GRPCAPI grpc_channel_credentials* grpc_ssl_credentials_create( const char* pem_root_certs, grpc_ssl_pem_key_cert_pair* pem_key_cert_pair, const verify_peer_options* verify_options, void* reserved); /* Creates an SSL credentials object. The security level of the resulting connection is GRPC_PRIVACY_AND_INTEGRITY. - pem_root_certs is the NULL-terminated string containing the PEM encoding of the server root certificates. If this parameter is NULL, the implementation will first try to dereference the file pointed by the GRPC_DEFAULT_SSL_ROOTS_FILE_PATH environment variable, and if that fails, try to get the roots set by grpc_override_ssl_default_roots. Eventually, if all these fail, it will try to get the roots from a well-known place on disk (in the grpc install directory). gRPC has implemented root cache if the underlying OpenSSL library supports it. The gRPC root certificates cache is only applicable on the default root certificates, which is used when this parameter is nullptr. If user provides their own pem_root_certs, when creating an SSL credential object, gRPC would not be able to cache it, and each subchannel will generate a copy of the root store. So it is recommended to avoid providing large room pem with pem_root_certs parameter to avoid excessive memory consumption, particularly on mobile platforms such as iOS. - pem_key_cert_pair is a pointer on the object containing client's private key and certificate chain. This parameter can be NULL if the client does not have such a key/cert pair. - verify_options is an optional verify_peer_options object which holds additional options controlling how peer certificates are verified. For example, you can supply a callback which receives the peer's certificate with which you can do additional verification. Can be NULL, in which case verification will retain default behavior. Any settings in verify_options are copied during this call, so the verify_options object can be released afterwards. */ GRPCAPI grpc_channel_credentials* grpc_ssl_credentials_create_ex( const char* pem_root_certs, grpc_ssl_pem_key_cert_pair* pem_key_cert_pair, const grpc_ssl_verify_peer_options* verify_options, void* reserved); /** --- grpc_call_credentials object. A call credentials object represents a way to authenticate on a particular call. These credentials can be composed with a channel credentials object so that they are sent with every call on this channel. */ typedef struct grpc_call_credentials grpc_call_credentials; /** Releases a call credentials object. The creator of the credentials object is responsible for its release. */ GRPCAPI void grpc_call_credentials_release(grpc_call_credentials* creds); /** Creates a composite channel credentials object. The security level of * resulting connection is determined by channel_creds. */ GRPCAPI grpc_channel_credentials* grpc_composite_channel_credentials_create( grpc_channel_credentials* channel_creds, grpc_call_credentials* call_creds, void* reserved); /** Creates a composite call credentials object. */ GRPCAPI grpc_call_credentials* grpc_composite_call_credentials_create( grpc_call_credentials* creds1, grpc_call_credentials* creds2, void* reserved); /** Creates a compute engine credentials object for connecting to Google. WARNING: Do NOT use this credentials to connect to a non-google service as this could result in an oauth2 token leak. */ GRPCAPI grpc_call_credentials* grpc_google_compute_engine_credentials_create( void* reserved); GRPCAPI gpr_timespec grpc_max_auth_token_lifetime(void); /** Creates a JWT credentials object. May return NULL if the input is invalid. - json_key is the JSON key string containing the client's private key. - token_lifetime is the lifetime of each Json Web Token (JWT) created with this credentials. It should not exceed grpc_max_auth_token_lifetime or will be cropped to this value. */ GRPCAPI grpc_call_credentials* grpc_service_account_jwt_access_credentials_create(const char* json_key, gpr_timespec token_lifetime, void* reserved); /** Creates an Oauth2 Refresh Token credentials object for connecting to Google. May return NULL if the input is invalid. WARNING: Do NOT use this credentials to connect to a non-google service as this could result in an oauth2 token leak. - json_refresh_token is the JSON string containing the refresh token itself along with a client_id and client_secret. */ GRPCAPI grpc_call_credentials* grpc_google_refresh_token_credentials_create( const char* json_refresh_token, void* reserved); /** Creates an Oauth2 Access Token credentials with an access token that was acquired by an out of band mechanism. */ GRPCAPI grpc_call_credentials* grpc_access_token_credentials_create( const char* access_token, void* reserved); /** Creates an IAM credentials object for connecting to Google. */ GRPCAPI grpc_call_credentials* grpc_google_iam_credentials_create( const char* authorization_token, const char* authority_selector, void* reserved); /** Options for creating STS Oauth Token Exchange credentials following the IETF draft https://tools.ietf.org/html/draft-ietf-oauth-token-exchange-16. Optional fields may be set to NULL or empty string. It is the responsibility of the caller to ensure that the subject and actor tokens are refreshed on disk at the specified paths. This API is used for experimental purposes for now and may change in the future. */ typedef struct { const char* token_exchange_service_uri; /* Required. */ const char* resource; /* Optional. */ const char* audience; /* Optional. */ const char* scope; /* Optional. */ const char* requested_token_type; /* Optional. */ const char* subject_token_path; /* Required. */ const char* subject_token_type; /* Required. */ const char* actor_token_path; /* Optional. */ const char* actor_token_type; /* Optional. */ } grpc_sts_credentials_options; /** Creates an STS credentials following the STS Token Exchanged specifed in the IETF draft https://tools.ietf.org/html/draft-ietf-oauth-token-exchange-16. This API is used for experimental purposes for now and may change in the future. */ GRPCAPI grpc_call_credentials* grpc_sts_credentials_create( const grpc_sts_credentials_options* options, void* reserved); /** Callback function to be called by the metadata credentials plugin implementation when the metadata is ready. - user_data is the opaque pointer that was passed in the get_metadata method of the grpc_metadata_credentials_plugin (see below). - creds_md is an array of credentials metadata produced by the plugin. It may be set to NULL in case of an error. - num_creds_md is the number of items in the creds_md array. - status must be GRPC_STATUS_OK in case of success or another specific error code otherwise. - error_details contains details about the error if any. In case of success it should be NULL and will be otherwise ignored. */ typedef void (*grpc_credentials_plugin_metadata_cb)( void* user_data, const grpc_metadata* creds_md, size_t num_creds_md, grpc_status_code status, const char* error_details); /** Context that can be used by metadata credentials plugin in order to create auth related metadata. */ typedef struct { /** The fully qualifed service url. */ const char* service_url; /** The method name of the RPC being called (not fully qualified). The fully qualified method name can be built from the service_url: full_qualified_method_name = ctx->service_url + '/' + ctx->method_name. */ const char* method_name; /** The auth_context of the channel which gives the server's identity. */ const grpc_auth_context* channel_auth_context; /** Reserved for future use. */ void* reserved; } grpc_auth_metadata_context; /** Performs a deep copy from \a from to \a to. **/ GRPCAPI void grpc_auth_metadata_context_copy(grpc_auth_metadata_context* from, grpc_auth_metadata_context* to); /** Releases internal resources held by \a context. **/ GRPCAPI void grpc_auth_metadata_context_reset( grpc_auth_metadata_context* context); /** Maximum number of metadata entries returnable by a credentials plugin via a synchronous return. */ #define GRPC_METADATA_CREDENTIALS_PLUGIN_SYNC_MAX 4 /** grpc_metadata_credentials plugin is an API user provided structure used to create grpc_credentials objects that can be set on a channel (composed) or a call. See grpc_credentials_metadata_create_from_plugin below. The grpc client stack will call the get_metadata method of the plugin for every call in scope for the credentials created from it. */ typedef struct { /** The implementation of this method has to be non-blocking, but can be performed synchronously or asynchronously. If processing occurs synchronously, returns non-zero and populates creds_md, num_creds_md, status, and error_details. In this case, the caller takes ownership of the entries in creds_md and of error_details. Note that if the plugin needs to return more than GRPC_METADATA_CREDENTIALS_PLUGIN_SYNC_MAX entries in creds_md, it must return asynchronously. If processing occurs asynchronously, returns zero and invokes \a cb when processing is completed. \a user_data will be passed as the first parameter of the callback. NOTE: \a cb MUST be invoked in a different thread, not from the thread in which \a get_metadata() is invoked. \a context is the information that can be used by the plugin to create auth metadata. */ int (*get_metadata)( void* state, grpc_auth_metadata_context context, grpc_credentials_plugin_metadata_cb cb, void* user_data, grpc_metadata creds_md[GRPC_METADATA_CREDENTIALS_PLUGIN_SYNC_MAX], size_t* num_creds_md, grpc_status_code* status, const char** error_details); /** Implements debug string of the given plugin. This method returns an * allocated string that the caller needs to free using gpr_free() */ char* (*debug_string)(void* state); /** Destroys the plugin state. */ void (*destroy)(void* state); /** State that will be set as the first parameter of the methods above. */ void* state; /** Type of credentials that this plugin is implementing. */ const char* type; } grpc_metadata_credentials_plugin; /** Creates a credentials object from a plugin with a specified minimum security * level. */ GRPCAPI grpc_call_credentials* grpc_metadata_credentials_create_from_plugin( grpc_metadata_credentials_plugin plugin, grpc_security_level min_security_level, void* reserved); /** --- Secure channel creation. --- */ /** Creates a secure channel using the passed-in credentials. Additional channel level configuration MAY be provided by grpc_channel_args, though the expectation is that most clients will want to simply pass NULL. The user data in 'args' need only live through the invocation of this function. However, if any args of the 'pointer' type are passed, then the referenced vtable must be maintained by the caller until grpc_channel_destroy terminates. See grpc_channel_args definition for more on this. */ GRPCAPI grpc_channel* grpc_secure_channel_create( grpc_channel_credentials* creds, const char* target, const grpc_channel_args* args, void* reserved); /** --- grpc_server_credentials object. --- A server credentials object represents a way to authenticate a server. */ typedef struct grpc_server_credentials grpc_server_credentials; /** Releases a server_credentials object. The creator of the server_credentials object is responsible for its release. */ GRPCAPI void grpc_server_credentials_release(grpc_server_credentials* creds); /** Server certificate config object holds the server's public certificates and associated private keys, as well as any CA certificates needed for client certificate validation (if applicable). Create using grpc_ssl_server_certificate_config_create(). */ typedef struct grpc_ssl_server_certificate_config grpc_ssl_server_certificate_config; /** Creates a grpc_ssl_server_certificate_config object. - pem_roots_cert is the NULL-terminated string containing the PEM encoding of the client root certificates. This parameter may be NULL if the server does not want the client to be authenticated with SSL. - pem_key_cert_pairs is an array private key / certificate chains of the server. This parameter cannot be NULL. - num_key_cert_pairs indicates the number of items in the private_key_files and cert_chain_files parameters. It must be at least 1. - It is the caller's responsibility to free this object via grpc_ssl_server_certificate_config_destroy(). */ GRPCAPI grpc_ssl_server_certificate_config* grpc_ssl_server_certificate_config_create( const char* pem_root_certs, const grpc_ssl_pem_key_cert_pair* pem_key_cert_pairs, size_t num_key_cert_pairs); /** Destroys a grpc_ssl_server_certificate_config object. */ GRPCAPI void grpc_ssl_server_certificate_config_destroy( grpc_ssl_server_certificate_config* config); /** Callback to retrieve updated SSL server certificates, private keys, and trusted CAs (for client authentication). - user_data parameter, if not NULL, contains opaque data to be used by the callback. - Use grpc_ssl_server_certificate_config_create to create the config. - The caller assumes ownership of the config. */ typedef grpc_ssl_certificate_config_reload_status ( *grpc_ssl_server_certificate_config_callback)( void* user_data, grpc_ssl_server_certificate_config** config); /** Deprecated in favor of grpc_ssl_server_credentials_create_ex. Creates an SSL server_credentials object. - pem_roots_cert is the NULL-terminated string containing the PEM encoding of the client root certificates. This parameter may be NULL if the server does not want the client to be authenticated with SSL. - pem_key_cert_pairs is an array private key / certificate chains of the server. This parameter cannot be NULL. - num_key_cert_pairs indicates the number of items in the private_key_files and cert_chain_files parameters. It should be at least 1. - force_client_auth, if set to non-zero will force the client to authenticate with an SSL cert. Note that this option is ignored if pem_root_certs is NULL. */ GRPCAPI grpc_server_credentials* grpc_ssl_server_credentials_create( const char* pem_root_certs, grpc_ssl_pem_key_cert_pair* pem_key_cert_pairs, size_t num_key_cert_pairs, int force_client_auth, void* reserved); /** Deprecated in favor of grpc_ssl_server_credentials_create_with_options. Same as grpc_ssl_server_credentials_create method except uses grpc_ssl_client_certificate_request_type enum to support more ways to authenticate client certificates.*/ GRPCAPI grpc_server_credentials* grpc_ssl_server_credentials_create_ex( const char* pem_root_certs, grpc_ssl_pem_key_cert_pair* pem_key_cert_pairs, size_t num_key_cert_pairs, grpc_ssl_client_certificate_request_type client_certificate_request, void* reserved); typedef struct grpc_ssl_server_credentials_options grpc_ssl_server_credentials_options; /** Creates an options object using a certificate config. Use this method when the certificates and keys of the SSL server will not change during the server's lifetime. - Takes ownership of the certificate_config parameter. */ GRPCAPI grpc_ssl_server_credentials_options* grpc_ssl_server_credentials_create_options_using_config( grpc_ssl_client_certificate_request_type client_certificate_request, grpc_ssl_server_certificate_config* certificate_config); /** Creates an options object using a certificate config fetcher. Use this method to reload the certificates and keys of the SSL server without interrupting the operation of the server. Initial certificate config will be fetched during server initialization. - user_data parameter, if not NULL, contains opaque data which will be passed to the fetcher (see definition of grpc_ssl_server_certificate_config_callback). */ GRPCAPI grpc_ssl_server_credentials_options* grpc_ssl_server_credentials_create_options_using_config_fetcher( grpc_ssl_client_certificate_request_type client_certificate_request, grpc_ssl_server_certificate_config_callback cb, void* user_data); /** Destroys a grpc_ssl_server_credentials_options object. */ GRPCAPI void grpc_ssl_server_credentials_options_destroy( grpc_ssl_server_credentials_options* options); /** Creates an SSL server_credentials object using the provided options struct. - Takes ownership of the options parameter. */ GRPCAPI grpc_server_credentials* grpc_ssl_server_credentials_create_with_options( grpc_ssl_server_credentials_options* options); /** --- Server-side secure ports. --- */ /** Add a HTTP2 over an encrypted link over tcp listener. Returns bound port number on success, 0 on failure. REQUIRES: server not started */ GRPCAPI int grpc_server_add_secure_http2_port(grpc_server* server, const char* addr, grpc_server_credentials* creds); /** --- Call specific credentials. --- */ /** Sets a credentials to a call. Can only be called on the client side before grpc_call_start_batch. */ GRPCAPI grpc_call_error grpc_call_set_credentials(grpc_call* call, grpc_call_credentials* creds); /** --- Auth Metadata Processing --- */ /** Callback function that is called when the metadata processing is done. - Consumed metadata will be removed from the set of metadata available on the call. consumed_md may be NULL if no metadata has been consumed. - Response metadata will be set on the response. response_md may be NULL. - status is GRPC_STATUS_OK for success or a specific status for an error. Common error status for auth metadata processing is either GRPC_STATUS_UNAUTHENTICATED in case of an authentication failure or GRPC_STATUS PERMISSION_DENIED in case of an authorization failure. - error_details gives details about the error. May be NULL. */ typedef void (*grpc_process_auth_metadata_done_cb)( void* user_data, const grpc_metadata* consumed_md, size_t num_consumed_md, const grpc_metadata* response_md, size_t num_response_md, grpc_status_code status, const char* error_details); /** Pluggable server-side metadata processor object. */ typedef struct { /** The context object is read/write: it contains the properties of the channel peer and it is the job of the process function to augment it with properties derived from the passed-in metadata. The lifetime of these objects is guaranteed until cb is invoked. */ void (*process)(void* state, grpc_auth_context* context, const grpc_metadata* md, size_t num_md, grpc_process_auth_metadata_done_cb cb, void* user_data); void (*destroy)(void* state); void* state; } grpc_auth_metadata_processor; GRPCAPI void grpc_server_credentials_set_auth_metadata_processor( grpc_server_credentials* creds, grpc_auth_metadata_processor processor); /** --- ALTS channel/server credentials --- **/ /** * Main interface for ALTS credentials options. The options will contain * information that will be passed from grpc to TSI layer such as RPC protocol * versions. ALTS client (channel) and server credentials will have their own * implementation of this interface. The APIs listed in this header are * thread-compatible. It is used for experimental purpose for now and subject * to change. */ typedef struct grpc_alts_credentials_options grpc_alts_credentials_options; /** * This method creates a grpc ALTS credentials client options instance. * It is used for experimental purpose for now and subject to change. */ GRPCAPI grpc_alts_credentials_options* grpc_alts_credentials_client_options_create(void); /** * This method creates a grpc ALTS credentials server options instance. * It is used for experimental purpose for now and subject to change. */ GRPCAPI grpc_alts_credentials_options* grpc_alts_credentials_server_options_create(void); /** * This method adds a target service account to grpc client's ALTS credentials * options instance. It is used for experimental purpose for now and subject * to change. * * - options: grpc ALTS credentials options instance. * - service_account: service account of target endpoint. */ GRPCAPI void grpc_alts_credentials_client_options_add_target_service_account( grpc_alts_credentials_options* options, const char* service_account); /** * This method destroys a grpc_alts_credentials_options instance by * de-allocating all of its occupied memory. It is used for experimental purpose * for now and subject to change. * * - options: a grpc_alts_credentials_options instance that needs to be * destroyed. */ GRPCAPI void grpc_alts_credentials_options_destroy( grpc_alts_credentials_options* options); /** * This method creates an ALTS channel credential object. The security * level of the resulting connection is GRPC_PRIVACY_AND_INTEGRITY. * It is used for experimental purpose for now and subject to change. * * - options: grpc ALTS credentials options instance for client. * * It returns the created ALTS channel credential object. */ GRPCAPI grpc_channel_credentials* grpc_alts_credentials_create( const grpc_alts_credentials_options* options); /** * This method creates an ALTS server credential object. It is used for * experimental purpose for now and subject to change. * * - options: grpc ALTS credentials options instance for server. * * It returns the created ALTS server credential object. */ GRPCAPI grpc_server_credentials* grpc_alts_server_credentials_create( const grpc_alts_credentials_options* options); /** --- Local channel/server credentials --- **/ /** * This method creates a local channel credential object. The security level * of the resulting connection is GRPC_PRIVACY_AND_INTEGRITY for UDS and * GRPC_SECURITY_NONE for LOCAL_TCP. It is used for experimental purpose * for now and subject to change. * * - type: local connection type * * It returns the created local channel credential object. */ GRPCAPI grpc_channel_credentials* grpc_local_credentials_create( grpc_local_connect_type type); /** * This method creates a local server credential object. It is used for * experimental purpose for now and subject to change. * * - type: local connection type * * It returns the created local server credential object. */ GRPCAPI grpc_server_credentials* grpc_local_server_credentials_create( grpc_local_connect_type type); /** --- TLS channel/server credentials --- * It is used for experimental purpose for now and subject to change. */ /** Struct for indicating errors. It is used for * experimental purpose for now and subject to change. */ typedef struct grpc_tls_error_details grpc_tls_error_details; /** Config for TLS key materials. It is used for * experimental purpose for now and subject to change. */ typedef struct grpc_tls_key_materials_config grpc_tls_key_materials_config; /** Config for TLS credential reload. It is used for * experimental purpose for now and subject to change. */ typedef struct grpc_tls_credential_reload_config grpc_tls_credential_reload_config; /** Config for TLS server authorization check. It is used for * experimental purpose for now and subject to change. */ typedef struct grpc_tls_server_authorization_check_config grpc_tls_server_authorization_check_config; /** TLS credentials options. It is used for * experimental purpose for now and subject to change. */ typedef struct grpc_tls_credentials_options grpc_tls_credentials_options; /** Create an empty TLS credentials options. It is used for * experimental purpose for now and subject to change. */ GRPCAPI grpc_tls_credentials_options* grpc_tls_credentials_options_create(void); /** Set grpc_ssl_client_certificate_request_type field in credentials options with the provided type. options should not be NULL. It returns 1 on success and 0 on failure. It is used for experimental purpose for now and subject to change. */ GRPCAPI int grpc_tls_credentials_options_set_cert_request_type( grpc_tls_credentials_options* options, grpc_ssl_client_certificate_request_type type); /** Set grpc_tls_server_verification_option field in credentials options with the provided server_verification_option. options should not be NULL. This should be called only on the client side. If grpc_tls_server_verification_option is not GRPC_TLS_SERVER_VERIFICATION, use of a customer server authorization check (grpc_tls_server_authorization_check_config) will be mandatory. It returns 1 on success and 0 on failure. It is used for experimental purpose for now and subject to change. */ GRPCAPI int grpc_tls_credentials_options_set_server_verification_option( grpc_tls_credentials_options* options, grpc_tls_server_verification_option server_verification_option); /** Set grpc_tls_key_materials_config field in credentials options with the provided config struct whose ownership is transferred. Both parameters should not be NULL. It returns 1 on success and 0 on failure. It is used for experimental purpose for now and subject to change. */ GRPCAPI int grpc_tls_credentials_options_set_key_materials_config( grpc_tls_credentials_options* options, grpc_tls_key_materials_config* config); /** Set grpc_tls_credential_reload_config field in credentials options with the provided config struct whose ownership is transferred. Both parameters should not be NULL. It returns 1 on success and 0 on failure. It is used for experimental purpose for now and subject to change. */ GRPCAPI int grpc_tls_credentials_options_set_credential_reload_config( grpc_tls_credentials_options* options, grpc_tls_credential_reload_config* config); /** Set grpc_tls_server_authorization_check_config field in credentials options with the provided config struct whose ownership is transferred. Both parameters should not be NULL. It returns 1 on success and 0 on failure. It is used for experimental purpose for now and subject to change. */ GRPCAPI int grpc_tls_credentials_options_set_server_authorization_check_config( grpc_tls_credentials_options* options, grpc_tls_server_authorization_check_config* config); /** --- TLS key materials config. --- It is used for experimental purpose for now and subject to change. */ /** Create an empty grpc_tls_key_materials_config instance. * It is used for experimental purpose for now and subject to change. */ GRPCAPI grpc_tls_key_materials_config* grpc_tls_key_materials_config_create( void); /** Set grpc_tls_key_materials_config instance with provided a TLS certificate. It's valid for the caller to provide nullptr pem_root_certs, in which case the gRPC-provided root cert will be used. pem_key_cert_pairs should not be NULL. The ownerships of |pem_root_certs| and |pem_key_cert_pairs| remain with the caller. It returns 1 on success and 0 on failure. It is used for experimental purpose for now and subject to change. */ GRPCAPI int grpc_tls_key_materials_config_set_key_materials( grpc_tls_key_materials_config* config, const char* pem_root_certs, const grpc_ssl_pem_key_cert_pair** pem_key_cert_pairs, size_t num_key_cert_pairs); /** Set grpc_tls_key_materials_config instance with a provided version number, which is used to keep track of the version of key materials. It returns 1 on success and 0 on failure. It is used for experimental purpose for now and subject to change. */ GRPCAPI int grpc_tls_key_materials_config_set_version( grpc_tls_key_materials_config* config, int version); /** Get the version number of a grpc_tls_key_materials_config instance. It returns the version number on success and -1 on failure. It is used for experimental purpose for now and subject to change. */ GRPCAPI int grpc_tls_key_materials_config_get_version( grpc_tls_key_materials_config* config); /** --- TLS credential reload config. --- It is used for experimental purpose for now and subject to change.*/ typedef struct grpc_tls_credential_reload_arg grpc_tls_credential_reload_arg; /** A callback function provided by gRPC to handle the result of credential reload. It is used when schedule API is implemented asynchronously and serves to bring the control back to grpc C core. It is used for experimental purpose for now and subject to change. */ typedef void (*grpc_tls_on_credential_reload_done_cb)( grpc_tls_credential_reload_arg* arg); /** A struct containing all information necessary to schedule/cancel a credential reload request. - cb and cb_user_data represent a gRPC-provided callback and an argument passed to it. - key_materials_config is an in/output parameter containing currently used/newly reloaded credentials. If credential reload does not result in a new credential, key_materials_config should not be modified. The same key_materials_config object can be updated if new key materials is available. - status and error_details are used to hold information about errors occurred when a credential reload request is scheduled/cancelled. - config is a pointer to the unique grpc_tls_credential_reload_config instance that this argument corresponds to. - context is a pointer to a wrapped language implementation of this grpc_tls_credential_reload_arg instance. - destroy_context is a pointer to a caller-provided method that cleans up any data associated with the context pointer. It is used for experimental purposes for now and subject to change. */ struct grpc_tls_credential_reload_arg { grpc_tls_on_credential_reload_done_cb cb; void* cb_user_data; grpc_tls_key_materials_config* key_materials_config; grpc_ssl_certificate_config_reload_status status; grpc_tls_error_details* error_details; grpc_tls_credential_reload_config* config; void* context; void (*destroy_context)(void* ctx); }; /** Create a grpc_tls_credential_reload_config instance. - config_user_data is config-specific, read-only user data that works for all channels created with a credential using the config. - schedule is a pointer to an application-provided callback used to invoke credential reload API. The implementation of this method has to be non-blocking, but can be performed synchronously or asynchronously. 1) If processing occurs synchronously, it populates arg->key_materials_config, arg->status, and arg->error_details and returns zero. 2) If processing occurs asynchronously, it returns a non-zero value. The application then invokes arg->cb when processing is completed. Note that arg->cb cannot be invoked before schedule API returns. - cancel is a pointer to an application-provided callback used to cancel a credential reload request scheduled via an asynchronous schedule API. arg is used to pinpoint an exact reloading request to be cancelled. The operation may not have any effect if the request has already been processed. - destruct is a pointer to an application-provided callback used to clean up any data associated with the config. It is used for experimental purpose for now and subject to change. */ GRPCAPI grpc_tls_credential_reload_config* grpc_tls_credential_reload_config_create( const void* config_user_data, int (*schedule)(void* config_user_data, grpc_tls_credential_reload_arg* arg), void (*cancel)(void* config_user_data, grpc_tls_credential_reload_arg* arg), void (*destruct)(void* config_user_data)); /** --- TLS server authorization check config. --- * It is used for experimental purpose for now and subject to change. */ typedef struct grpc_tls_server_authorization_check_arg grpc_tls_server_authorization_check_arg; /** callback function provided by gRPC used to handle the result of server authorization check. It is used when schedule API is implemented asynchronously, and serves to bring the control back to gRPC C core. It is used for experimental purpose for now and subject to change. */ typedef void (*grpc_tls_on_server_authorization_check_done_cb)( grpc_tls_server_authorization_check_arg* arg); /** A struct containing all information necessary to schedule/cancel a server authorization check request. - cb and cb_user_data represent a gRPC-provided callback and an argument passed to it. - success will store the result of server authorization check. That is, if success returns a non-zero value, it means the authorization check passes and if returning zero, it means the check fails. - target_name is the name of an endpoint the channel is connecting to. - peer_cert represents a complete certificate chain including both signing and leaf certificates. - status and error_details contain information about errors occurred when a server authorization check request is scheduled/cancelled. - config is a pointer to the unique grpc_tls_server_authorization_check_config instance that this argument corresponds to. - context is a pointer to a wrapped language implementation of this grpc_tls_server_authorization_check_arg instance. - destroy_context is a pointer to a caller-provided method that cleans up any data associated with the context pointer. It is used for experimental purpose for now and subject to change. */ struct grpc_tls_server_authorization_check_arg { grpc_tls_on_server_authorization_check_done_cb cb; void* cb_user_data; int success; const char* target_name; const char* peer_cert; const char* peer_cert_full_chain; grpc_status_code status; grpc_tls_error_details* error_details; grpc_tls_server_authorization_check_config* config; void* context; void (*destroy_context)(void* ctx); }; /** Create a grpc_tls_server_authorization_check_config instance. - config_user_data is config-specific, read-only user data that works for all channels created with a credential using the config. - schedule is a pointer to an application-provided callback used to invoke server authorization check API. The implementation of this method has to be non-blocking, but can be performed synchronously or asynchronously. 1)If processing occurs synchronously, it populates arg->result, arg->status, and arg->error_details and returns zero. 2) If processing occurs asynchronously, it returns a non-zero value. The application then invokes arg->cb when processing is completed. Note that arg->cb cannot be invoked before schedule API returns. - cancel is a pointer to an application-provided callback used to cancel a server authorization check request scheduled via an asynchronous schedule API. arg is used to pinpoint an exact check request to be cancelled. The operation may not have any effect if the request has already been processed. - destruct is a pointer to an application-provided callback used to clean up any data associated with the config. It is used for experimental purpose for now and subject to change. */ GRPCAPI grpc_tls_server_authorization_check_config* grpc_tls_server_authorization_check_config_create( const void* config_user_data, int (*schedule)(void* config_user_data, grpc_tls_server_authorization_check_arg* arg), void (*cancel)(void* config_user_data, grpc_tls_server_authorization_check_arg* arg), void (*destruct)(void* config_user_data)); /** * This method creates a TLS channel credential object. * It takes ownership of the options parameter. The security level * of the resulting connection is GRPC_PRIVACY_AND_INTEGRITY. * * - options: grpc TLS credentials options instance. * * It returns the created credential object. * * It is used for experimental purpose for now and subject * to change. */ grpc_channel_credentials* grpc_tls_credentials_create( grpc_tls_credentials_options* options); /** * This method creates a TLS server credential object. * It takes ownership of the options parameter. * * - options: grpc TLS credentials options instance. * * It returns the created credential object. * * It is used for experimental purpose for now and subject * to change. */ grpc_server_credentials* grpc_tls_server_credentials_create( grpc_tls_credentials_options* options); #ifdef __cplusplus } #endif #endif /* GRPC_GRPC_SECURITY_H */ grpc-1.30.2/include/grpc/grpc_security_constants.h000066400000000000000000000137541370425124100222460ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPC_GRPC_SECURITY_CONSTANTS_H #define GRPC_GRPC_SECURITY_CONSTANTS_H #ifdef __cplusplus extern "C" { #endif #define GRPC_TRANSPORT_SECURITY_TYPE_PROPERTY_NAME "transport_security_type" #define GRPC_SSL_TRANSPORT_SECURITY_TYPE "ssl" #define GRPC_X509_CN_PROPERTY_NAME "x509_common_name" #define GRPC_X509_SAN_PROPERTY_NAME "x509_subject_alternative_name" #define GRPC_X509_PEM_CERT_PROPERTY_NAME "x509_pem_cert" #define GRPC_X509_PEM_CERT_CHAIN_PROPERTY_NAME "x509_pem_cert_chain" #define GRPC_SSL_SESSION_REUSED_PROPERTY "ssl_session_reused" #define GRPC_TRANSPORT_SECURITY_LEVEL_PROPERTY_NAME "security_level" #define GRPC_PEER_SPIFFE_ID_PROPERTY_NAME "peer_spiffe_id" /** Environment variable that points to the default SSL roots file. This file must be a PEM encoded file with all the roots such as the one that can be downloaded from https://pki.google.com/roots.pem. */ #define GRPC_DEFAULT_SSL_ROOTS_FILE_PATH_ENV_VAR \ "GRPC_DEFAULT_SSL_ROOTS_FILE_PATH" /** Environment variable that points to the google default application credentials json key or refresh token. Used in the grpc_google_default_credentials_create function. */ #define GRPC_GOOGLE_CREDENTIALS_ENV_VAR "GOOGLE_APPLICATION_CREDENTIALS" /** Results for the SSL roots override callback. */ typedef enum { GRPC_SSL_ROOTS_OVERRIDE_OK, GRPC_SSL_ROOTS_OVERRIDE_FAIL_PERMANENTLY, /** Do not try fallback options. */ GRPC_SSL_ROOTS_OVERRIDE_FAIL } grpc_ssl_roots_override_result; /** Callback results for dynamically loading a SSL certificate config. */ typedef enum { GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED, GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_NEW, GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_FAIL } grpc_ssl_certificate_config_reload_status; typedef enum { /** Server does not request client certificate. The certificate presented by the client is not checked by the server at all. (A client may present a self signed or signed certificate or not present a certificate at all and any of those option would be accepted) */ GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE, /** Server requests client certificate but does not enforce that the client presents a certificate. If the client presents a certificate, the client authentication is left to the application (the necessary metadata will be available to the application via authentication context properties, see grpc_auth_context). The client's key certificate pair must be valid for the SSL connection to be established. */ GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY, /** Server requests client certificate but does not enforce that the client presents a certificate. If the client presents a certificate, the client authentication is done by the gRPC framework. (For a successful connection the client needs to either present a certificate that can be verified against the root certificate configured by the server or not present a certificate at all) The client's key certificate pair must be valid for the SSL connection to be established. */ GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY, /** Server requests client certificate and enforces that the client presents a certificate. If the client presents a certificate, the client authentication is left to the application (the necessary metadata will be available to the application via authentication context properties, see grpc_auth_context). The client's key certificate pair must be valid for the SSL connection to be established. */ GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY, /** Server requests client certificate and enforces that the client presents a certificate. The certificate presented by the client is verified by the gRPC framework. (For a successful connection the client needs to present a certificate that can be verified against the root certificate configured by the server) The client's key certificate pair must be valid for the SSL connection to be established. */ GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY } grpc_ssl_client_certificate_request_type; /* Security levels of grpc transport security. It represents an inherent * property of a backend connection and is determined by a channel credential * used to create the connection. */ typedef enum { GRPC_SECURITY_MIN, GRPC_SECURITY_NONE = GRPC_SECURITY_MIN, GRPC_INTEGRITY_ONLY, GRPC_PRIVACY_AND_INTEGRITY, GRPC_SECURITY_MAX = GRPC_PRIVACY_AND_INTEGRITY, } grpc_security_level; typedef enum { /** Default option: performs server certificate verification and hostname verification. */ GRPC_TLS_SERVER_VERIFICATION, /** Performs server certificate verification, but skips hostname verification Client is responsible for verifying server's identity via server authorization check callback. */ GRPC_TLS_SKIP_HOSTNAME_VERIFICATION, /** Skips both server certificate and hostname verification. Client is responsible for verifying server's identity and server's certificate via server authorization check callback. */ GRPC_TLS_SKIP_ALL_SERVER_VERIFICATION } grpc_tls_server_verification_option; /** * Type of local connections for which local channel/server credentials will be * applied. It supports UDS and local TCP connections. */ typedef enum { UDS = 0, LOCAL_TCP } grpc_local_connect_type; #ifdef __cplusplus } #endif #endif /* GRPC_GRPC_SECURITY_CONSTANTS_H */ grpc-1.30.2/include/grpc/impl/000077500000000000000000000000001370425124100160465ustar00rootroot00000000000000grpc-1.30.2/include/grpc/impl/codegen/000077500000000000000000000000001370425124100174525ustar00rootroot00000000000000grpc-1.30.2/include/grpc/impl/codegen/atm.h000066400000000000000000000064761370425124100204210ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_IMPL_CODEGEN_ATM_H #define GRPC_IMPL_CODEGEN_ATM_H /** This interface provides atomic operations and barriers. It is internal to gpr support code and should not be used outside it. If an operation with acquire semantics precedes another memory access by the same thread, the operation will precede that other access as seen by other threads. If an operation with release semantics follows another memory access by the same thread, the operation will follow that other access as seen by other threads. Routines with "acq" or "full" in the name have acquire semantics. Routines with "rel" or "full" in the name have release semantics. Routines with "no_barrier" in the name have neither acquire not release semantics. The routines may be implemented as macros. // Atomic operations act on an intergral_type gpr_atm that is guaranteed to // be the same size as a pointer. typedef intptr_t gpr_atm; // A memory barrier, providing both acquire and release semantics, but not // otherwise acting on memory. void gpr_atm_full_barrier(void); // Atomically return *p, with acquire semantics. gpr_atm gpr_atm_acq_load(gpr_atm *p); gpr_atm gpr_atm_no_barrier_load(gpr_atm *p); // Atomically set *p = value, with release semantics. void gpr_atm_rel_store(gpr_atm *p, gpr_atm value); // Atomically add delta to *p, and return the old value of *p, with // the barriers specified. gpr_atm gpr_atm_no_barrier_fetch_add(gpr_atm *p, gpr_atm delta); gpr_atm gpr_atm_full_fetch_add(gpr_atm *p, gpr_atm delta); // Atomically, if *p==o, set *p=n and return non-zero otherwise return 0, // with the barriers specified if the operation succeeds. int gpr_atm_no_barrier_cas(gpr_atm *p, gpr_atm o, gpr_atm n); int gpr_atm_acq_cas(gpr_atm *p, gpr_atm o, gpr_atm n); int gpr_atm_rel_cas(gpr_atm *p, gpr_atm o, gpr_atm n); int gpr_atm_full_cas(gpr_atm *p, gpr_atm o, gpr_atm n); // Atomically, set *p=n and return the old value of *p gpr_atm gpr_atm_full_xchg(gpr_atm *p, gpr_atm n); */ #include #if defined(GPR_GCC_ATOMIC) #include #elif defined(GPR_GCC_SYNC) #include #elif defined(GPR_WINDOWS_ATOMIC) #include #else #error could not determine platform for atm #endif #ifdef __cplusplus extern "C" { #endif /** Adds \a delta to \a *value, clamping the result to the range specified by \a min and \a max. Returns the new value. */ gpr_atm gpr_atm_no_barrier_clamped_add(gpr_atm* value, gpr_atm delta, gpr_atm min, gpr_atm max); #ifdef __cplusplus } #endif #endif /* GRPC_IMPL_CODEGEN_ATM_H */ grpc-1.30.2/include/grpc/impl/codegen/atm_gcc_atomic.h000066400000000000000000000060621370425124100225600ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_IMPL_CODEGEN_ATM_GCC_ATOMIC_H #define GRPC_IMPL_CODEGEN_ATM_GCC_ATOMIC_H /* atm_platform.h for gcc and gcc-like compilers with the __atomic_* interface. */ #include #ifdef __cplusplus extern "C" { #endif typedef intptr_t gpr_atm; #define GPR_ATM_MAX INTPTR_MAX #define GPR_ATM_MIN INTPTR_MIN #ifdef GPR_LOW_LEVEL_COUNTERS extern gpr_atm gpr_counter_atm_cas; extern gpr_atm gpr_counter_atm_add; #define GPR_ATM_INC_COUNTER(counter) \ __atomic_fetch_add(&counter, 1, __ATOMIC_RELAXED) #define GPR_ATM_INC_CAS_THEN(blah) \ (GPR_ATM_INC_COUNTER(gpr_counter_atm_cas), blah) #define GPR_ATM_INC_ADD_THEN(blah) \ (GPR_ATM_INC_COUNTER(gpr_counter_atm_add), blah) #else #define GPR_ATM_INC_CAS_THEN(blah) blah #define GPR_ATM_INC_ADD_THEN(blah) blah #endif #define gpr_atm_full_barrier() (__atomic_thread_fence(__ATOMIC_SEQ_CST)) #define gpr_atm_acq_load(p) (__atomic_load_n((p), __ATOMIC_ACQUIRE)) #define gpr_atm_no_barrier_load(p) (__atomic_load_n((p), __ATOMIC_RELAXED)) #define gpr_atm_rel_store(p, value) \ (__atomic_store_n((p), (intptr_t)(value), __ATOMIC_RELEASE)) #define gpr_atm_no_barrier_store(p, value) \ (__atomic_store_n((p), (intptr_t)(value), __ATOMIC_RELAXED)) #define gpr_atm_no_barrier_fetch_add(p, delta) \ GPR_ATM_INC_ADD_THEN( \ __atomic_fetch_add((p), (intptr_t)(delta), __ATOMIC_RELAXED)) #define gpr_atm_full_fetch_add(p, delta) \ GPR_ATM_INC_ADD_THEN( \ __atomic_fetch_add((p), (intptr_t)(delta), __ATOMIC_ACQ_REL)) static __inline int gpr_atm_no_barrier_cas(gpr_atm* p, gpr_atm o, gpr_atm n) { return GPR_ATM_INC_CAS_THEN(__atomic_compare_exchange_n( p, &o, n, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED)); } static __inline int gpr_atm_acq_cas(gpr_atm* p, gpr_atm o, gpr_atm n) { return GPR_ATM_INC_CAS_THEN(__atomic_compare_exchange_n( p, &o, n, 0, __ATOMIC_ACQUIRE, __ATOMIC_RELAXED)); } static __inline int gpr_atm_rel_cas(gpr_atm* p, gpr_atm o, gpr_atm n) { return GPR_ATM_INC_CAS_THEN(__atomic_compare_exchange_n( p, &o, n, 0, __ATOMIC_RELEASE, __ATOMIC_RELAXED)); } static __inline int gpr_atm_full_cas(gpr_atm* p, gpr_atm o, gpr_atm n) { return GPR_ATM_INC_CAS_THEN(__atomic_compare_exchange_n( p, &o, n, 0, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED)); } #define gpr_atm_full_xchg(p, n) \ GPR_ATM_INC_CAS_THEN(__atomic_exchange_n((p), (n), __ATOMIC_ACQ_REL)) #ifdef __cplusplus } #endif #endif /* GRPC_IMPL_CODEGEN_ATM_GCC_ATOMIC_H */ grpc-1.30.2/include/grpc/impl/codegen/atm_gcc_sync.h000066400000000000000000000050341370425124100222560ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_IMPL_CODEGEN_ATM_GCC_SYNC_H #define GRPC_IMPL_CODEGEN_ATM_GCC_SYNC_H /* variant of atm_platform.h for gcc and gcc-like compiers with __sync_* interface */ #include typedef intptr_t gpr_atm; #define GPR_ATM_MAX INTPTR_MAX #define GPR_ATM_MIN INTPTR_MIN #define GPR_ATM_INC_CAS_THEN(blah) blah #define GPR_ATM_INC_ADD_THEN(blah) blah #define GPR_ATM_COMPILE_BARRIER_() __asm__ __volatile__("" : : : "memory") #if defined(__i386) || defined(__x86_64__) /* All loads are acquire loads and all stores are release stores. */ #define GPR_ATM_LS_BARRIER_() GPR_ATM_COMPILE_BARRIER_() #else #define GPR_ATM_LS_BARRIER_() gpr_atm_full_barrier() #endif #define gpr_atm_full_barrier() (__sync_synchronize()) static __inline gpr_atm gpr_atm_acq_load(const gpr_atm* p) { gpr_atm value = *p; GPR_ATM_LS_BARRIER_(); return value; } static __inline gpr_atm gpr_atm_no_barrier_load(const gpr_atm* p) { gpr_atm value = *p; GPR_ATM_COMPILE_BARRIER_(); return value; } static __inline void gpr_atm_rel_store(gpr_atm* p, gpr_atm value) { GPR_ATM_LS_BARRIER_(); *p = value; } static __inline void gpr_atm_no_barrier_store(gpr_atm* p, gpr_atm value) { GPR_ATM_COMPILE_BARRIER_(); *p = value; } #undef GPR_ATM_LS_BARRIER_ #undef GPR_ATM_COMPILE_BARRIER_ #define gpr_atm_no_barrier_fetch_add(p, delta) \ gpr_atm_full_fetch_add((p), (delta)) #define gpr_atm_full_fetch_add(p, delta) (__sync_fetch_and_add((p), (delta))) #define gpr_atm_no_barrier_cas(p, o, n) gpr_atm_acq_cas((p), (o), (n)) #define gpr_atm_acq_cas(p, o, n) (__sync_bool_compare_and_swap((p), (o), (n))) #define gpr_atm_rel_cas(p, o, n) gpr_atm_acq_cas((p), (o), (n)) #define gpr_atm_full_cas(p, o, n) gpr_atm_acq_cas((p), (o), (n)) static __inline gpr_atm gpr_atm_full_xchg(gpr_atm* p, gpr_atm n) { gpr_atm cur; do { cur = gpr_atm_acq_load(p); } while (!gpr_atm_rel_cas(p, cur, n)); return cur; } #endif /* GRPC_IMPL_CODEGEN_ATM_GCC_SYNC_H */ grpc-1.30.2/include/grpc/impl/codegen/atm_windows.h000066400000000000000000000103351370425124100221600ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_IMPL_CODEGEN_ATM_WINDOWS_H #define GRPC_IMPL_CODEGEN_ATM_WINDOWS_H /** Win32 variant of atm_platform.h */ #include typedef intptr_t gpr_atm; #define GPR_ATM_MAX INTPTR_MAX #define GPR_ATM_MIN INTPTR_MIN #define GPR_ATM_INC_CAS_THEN(blah) blah #define GPR_ATM_INC_ADD_THEN(blah) blah #define gpr_atm_full_barrier MemoryBarrier static __inline gpr_atm gpr_atm_acq_load(const gpr_atm* p) { gpr_atm result = *p; gpr_atm_full_barrier(); return result; } static __inline gpr_atm gpr_atm_no_barrier_load(const gpr_atm* p) { /* TODO(dklempner): Can we implement something better here? */ return gpr_atm_acq_load(p); } static __inline void gpr_atm_rel_store(gpr_atm* p, gpr_atm value) { gpr_atm_full_barrier(); *p = value; } static __inline void gpr_atm_no_barrier_store(gpr_atm* p, gpr_atm value) { /* TODO(ctiller): Can we implement something better here? */ gpr_atm_rel_store(p, value); } static __inline int gpr_atm_no_barrier_cas(gpr_atm* p, gpr_atm o, gpr_atm n) { /** InterlockedCompareExchangePointerNoFence() not available on vista or windows7 */ #ifdef GPR_ARCH_64 return o == (gpr_atm)InterlockedCompareExchangeAcquire64( (volatile LONGLONG*)p, (LONGLONG)n, (LONGLONG)o); #else return o == (gpr_atm)InterlockedCompareExchangeAcquire((volatile LONG*)p, (LONG)n, (LONG)o); #endif } static __inline int gpr_atm_acq_cas(gpr_atm* p, gpr_atm o, gpr_atm n) { #ifdef GPR_ARCH_64 return o == (gpr_atm)InterlockedCompareExchangeAcquire64( (volatile LONGLONG*)p, (LONGLONG)n, (LONGLONG)o); #else return o == (gpr_atm)InterlockedCompareExchangeAcquire((volatile LONG*)p, (LONG)n, (LONG)o); #endif } static __inline int gpr_atm_rel_cas(gpr_atm* p, gpr_atm o, gpr_atm n) { #ifdef GPR_ARCH_64 return o == (gpr_atm)InterlockedCompareExchangeRelease64( (volatile LONGLONG*)p, (LONGLONG)n, (LONGLONG)o); #else return o == (gpr_atm)InterlockedCompareExchangeRelease((volatile LONG*)p, (LONG)n, (LONG)o); #endif } static __inline int gpr_atm_full_cas(gpr_atm* p, gpr_atm o, gpr_atm n) { #ifdef GPR_ARCH_64 return o == (gpr_atm)InterlockedCompareExchange64((volatile LONGLONG*)p, (LONGLONG)n, (LONGLONG)o); #else return o == (gpr_atm)InterlockedCompareExchange((volatile LONG*)p, (LONG)n, (LONG)o); #endif } static __inline gpr_atm gpr_atm_no_barrier_fetch_add(gpr_atm* p, gpr_atm delta) { /** Use the CAS operation to get pointer-sized fetch and add */ gpr_atm old; do { old = *p; } while (!gpr_atm_no_barrier_cas(p, old, old + delta)); return old; } static __inline gpr_atm gpr_atm_full_fetch_add(gpr_atm* p, gpr_atm delta) { /** Use a CAS operation to get pointer-sized fetch and add */ gpr_atm old; #ifdef GPR_ARCH_64 do { old = *p; } while (old != (gpr_atm)InterlockedCompareExchange64((volatile LONGLONG*)p, (LONGLONG)old + delta, (LONGLONG)old)); #else do { old = *p; } while (old != (gpr_atm)InterlockedCompareExchange( (volatile LONG*)p, (LONG)old + delta, (LONG)old)); #endif return old; } static __inline gpr_atm gpr_atm_full_xchg(gpr_atm* p, gpr_atm n) { return (gpr_atm)InterlockedExchangePointer((PVOID*)p, (PVOID)n); } #endif /* GRPC_IMPL_CODEGEN_ATM_WINDOWS_H */ grpc-1.30.2/include/grpc/impl/codegen/byte_buffer.h000066400000000000000000000101011370425124100221100ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_IMPL_CODEGEN_BYTE_BUFFER_H #define GRPC_IMPL_CODEGEN_BYTE_BUFFER_H #include #include #ifdef __cplusplus extern "C" { #endif /** Returns a RAW byte buffer instance over the given slices (up to \a nslices). * * Increases the reference count for all \a slices processed. The user is * responsible for invoking grpc_byte_buffer_destroy on the returned instance.*/ GRPCAPI grpc_byte_buffer* grpc_raw_byte_buffer_create(grpc_slice* slices, size_t nslices); /** Returns a *compressed* RAW byte buffer instance over the given slices (up to * \a nslices). The \a compression argument defines the compression algorithm * used to generate the data in \a slices. * * Increases the reference count for all \a slices processed. The user is * responsible for invoking grpc_byte_buffer_destroy on the returned instance.*/ GRPCAPI grpc_byte_buffer* grpc_raw_compressed_byte_buffer_create( grpc_slice* slices, size_t nslices, grpc_compression_algorithm compression); /** Copies input byte buffer \a bb. * * Increases the reference count of all the source slices. The user is * responsible for calling grpc_byte_buffer_destroy over the returned copy. */ GRPCAPI grpc_byte_buffer* grpc_byte_buffer_copy(grpc_byte_buffer* bb); /** Returns the size of the given byte buffer, in bytes. */ GRPCAPI size_t grpc_byte_buffer_length(grpc_byte_buffer* bb); /** Destroys \a byte_buffer deallocating all its memory. */ GRPCAPI void grpc_byte_buffer_destroy(grpc_byte_buffer* byte_buffer); /** Reader for byte buffers. Iterates over slices in the byte buffer */ struct grpc_byte_buffer_reader; typedef struct grpc_byte_buffer_reader grpc_byte_buffer_reader; /** Initialize \a reader to read over \a buffer. * Returns 1 upon success, 0 otherwise. */ GRPCAPI int grpc_byte_buffer_reader_init(grpc_byte_buffer_reader* reader, grpc_byte_buffer* buffer); /** Cleanup and destroy \a reader */ GRPCAPI void grpc_byte_buffer_reader_destroy(grpc_byte_buffer_reader* reader); /** Updates \a slice with the next piece of data from from \a reader and returns * 1. Returns 0 at the end of the stream. Caller is responsible for calling * grpc_slice_unref on the result. */ GRPCAPI int grpc_byte_buffer_reader_next(grpc_byte_buffer_reader* reader, grpc_slice* slice); /** EXPERIMENTAL API - This function may be removed and changed, in the future. * * Updates \a slice with the next piece of data from from \a reader and returns * 1. Returns 0 at the end of the stream. Caller is responsible for making sure * the slice pointer remains valid when accessed. * * NOTE: Do not use this function unless the caller can guarantee that the * underlying grpc_byte_buffer outlasts the use of the slice. This is only * safe when the underlying grpc_byte_buffer remains immutable while slice * is being accessed. */ GRPCAPI int grpc_byte_buffer_reader_peek(grpc_byte_buffer_reader* reader, grpc_slice** slice); /** Merge all data from \a reader into single slice */ GRPCAPI grpc_slice grpc_byte_buffer_reader_readall(grpc_byte_buffer_reader* reader); /** Returns a RAW byte buffer instance from the output of \a reader. */ GRPCAPI grpc_byte_buffer* grpc_raw_byte_buffer_from_reader( grpc_byte_buffer_reader* reader); #ifdef __cplusplus } #endif #endif /* GRPC_IMPL_CODEGEN_BYTE_BUFFER_H */ grpc-1.30.2/include/grpc/impl/codegen/byte_buffer_reader.h000066400000000000000000000022231370425124100234400ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_IMPL_CODEGEN_BYTE_BUFFER_READER_H #define GRPC_IMPL_CODEGEN_BYTE_BUFFER_READER_H #ifdef __cplusplus extern "C" { #endif struct grpc_byte_buffer; struct grpc_byte_buffer_reader { struct grpc_byte_buffer* buffer_in; struct grpc_byte_buffer* buffer_out; /** Different current objects correspond to different types of byte buffers */ union grpc_byte_buffer_reader_current { /** Index into a slice buffer's array of slices */ unsigned index; } current; }; #ifdef __cplusplus } #endif #endif /* GRPC_IMPL_CODEGEN_BYTE_BUFFER_READER_H */ grpc-1.30.2/include/grpc/impl/codegen/compression_types.h000066400000000000000000000076201370425124100234150ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPC_IMPL_CODEGEN_COMPRESSION_TYPES_H #define GRPC_IMPL_CODEGEN_COMPRESSION_TYPES_H #include #ifdef __cplusplus extern "C" { #endif /** To be used as initial metadata key for the request of a concrete compression * algorithm */ #define GRPC_COMPRESSION_REQUEST_ALGORITHM_MD_KEY \ "grpc-internal-encoding-request" /** To be used in channel arguments. * * \addtogroup grpc_arg_keys * \{ */ /** Default compression algorithm for the channel. * Its value is an int from the \a grpc_compression_algorithm enum. */ #define GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM \ "grpc.default_compression_algorithm" /** Default compression level for the channel. * Its value is an int from the \a grpc_compression_level enum. */ #define GRPC_COMPRESSION_CHANNEL_DEFAULT_LEVEL "grpc.default_compression_level" /** Compression algorithms supported by the channel. * Its value is a bitset (an int). Bits correspond to algorithms in \a * grpc_compression_algorithm. For example, its LSB corresponds to * GRPC_COMPRESS_NONE, the next bit to GRPC_COMPRESS_DEFLATE, etc. * Unset bits disable support for the algorithm. By default all algorithms are * supported. It's not possible to disable GRPC_COMPRESS_NONE (the attempt will * be ignored). */ #define GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET \ "grpc.compression_enabled_algorithms_bitset" /** \} */ /** The various compression algorithms supported by gRPC (not sorted by * compression level) */ typedef enum { GRPC_COMPRESS_NONE = 0, GRPC_COMPRESS_DEFLATE, GRPC_COMPRESS_GZIP, /* EXPERIMENTAL: Stream compression is currently experimental. */ GRPC_COMPRESS_STREAM_GZIP, /* TODO(ctiller): snappy */ GRPC_COMPRESS_ALGORITHMS_COUNT } grpc_compression_algorithm; /** Compression levels allow a party with knowledge of its peer's accepted * encodings to request compression in an abstract way. The level-algorithm * mapping is performed internally and depends on the peer's supported * compression algorithms. */ typedef enum { GRPC_COMPRESS_LEVEL_NONE = 0, GRPC_COMPRESS_LEVEL_LOW, GRPC_COMPRESS_LEVEL_MED, GRPC_COMPRESS_LEVEL_HIGH, GRPC_COMPRESS_LEVEL_COUNT } grpc_compression_level; typedef struct grpc_compression_options { /** All algs are enabled by default. This option corresponds to the channel * argument key behind \a GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET */ uint32_t enabled_algorithms_bitset; /** The default compression level. It'll be used in the absence of call * specific settings. This option corresponds to the channel * argument key behind \a GRPC_COMPRESSION_CHANNEL_DEFAULT_LEVEL. If present, * takes precedence over \a default_algorithm. * TODO(dgq): currently only available for server channels. */ struct grpc_compression_options_default_level { int is_set; grpc_compression_level level; } default_level; /** The default message compression algorithm. It'll be used in the absence of * call specific settings. This option corresponds to the channel argument key * behind \a GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM. */ struct grpc_compression_options_default_algorithm { int is_set; grpc_compression_algorithm algorithm; } default_algorithm; } grpc_compression_options; #ifdef __cplusplus } #endif #endif /* GRPC_IMPL_CODEGEN_COMPRESSION_TYPES_H */ grpc-1.30.2/include/grpc/impl/codegen/connectivity_state.h000066400000000000000000000023351370425124100235440ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPC_IMPL_CODEGEN_CONNECTIVITY_STATE_H #define GRPC_IMPL_CODEGEN_CONNECTIVITY_STATE_H #ifdef __cplusplus extern "C" { #endif /** Connectivity state of a channel. */ typedef enum { /** channel is idle */ GRPC_CHANNEL_IDLE, /** channel is connecting */ GRPC_CHANNEL_CONNECTING, /** channel is ready for work */ GRPC_CHANNEL_READY, /** channel has seen a failure but expects to recover */ GRPC_CHANNEL_TRANSIENT_FAILURE, /** channel has seen a failure that it cannot recover from */ GRPC_CHANNEL_SHUTDOWN } grpc_connectivity_state; #ifdef __cplusplus } #endif #endif /* GRPC_IMPL_CODEGEN_CONNECTIVITY_STATE_H */ grpc-1.30.2/include/grpc/impl/codegen/fork.h000066400000000000000000000023401370425124100205630ustar00rootroot00000000000000/* * * Copyright 2017 gRPC 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 * * 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. * */ #ifndef GRPC_IMPL_CODEGEN_FORK_H #define GRPC_IMPL_CODEGEN_FORK_H /** * gRPC applications should call this before calling fork(). There should be no * active gRPC function calls between calling grpc_prefork() and * grpc_postfork_parent()/grpc_postfork_child(). * * * Typical use: * grpc_prefork(); * int pid = fork(); * if (pid) { * grpc_postfork_parent(); * // Parent process.. * } else { * grpc_postfork_child(); * // Child process... * } */ void grpc_prefork(void); void grpc_postfork_parent(void); void grpc_postfork_child(void); void grpc_fork_handlers_auto_register(void); #endif /* GRPC_IMPL_CODEGEN_FORK_H */ grpc-1.30.2/include/grpc/impl/codegen/gpr_slice.h000066400000000000000000000055311370425124100215760ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPC_IMPL_CODEGEN_GPR_SLICE_H #define GRPC_IMPL_CODEGEN_GPR_SLICE_H /** WARNING: Please do not use this header. This was added as a temporary * measure to not break some of the external projects that depend on * gpr_slice_* functions. We are actively working on moving all the * gpr_slice_* references to grpc_slice_* and this file will be removed */ /* TODO (sreek) - Allowed by default but will be very soon turned off */ #define GRPC_ALLOW_GPR_SLICE_FUNCTIONS 1 #ifdef GRPC_ALLOW_GPR_SLICE_FUNCTIONS #define gpr_slice_refcount grpc_slice_refcount #define gpr_slice grpc_slice #define gpr_slice_buffer grpc_slice_buffer #define gpr_slice_ref grpc_slice_ref #define gpr_slice_unref grpc_slice_unref #define gpr_slice_new grpc_slice_new #define gpr_slice_new_with_user_data grpc_slice_new_with_user_data #define gpr_slice_new_with_len grpc_slice_new_with_len #define gpr_slice_malloc grpc_slice_malloc #define gpr_slice_from_copied_string grpc_slice_from_copied_string #define gpr_slice_from_copied_buffer grpc_slice_from_copied_buffer #define gpr_slice_from_static_string grpc_slice_from_static_string #define gpr_slice_sub grpc_slice_sub #define gpr_slice_sub_no_ref grpc_slice_sub_no_ref #define gpr_slice_split_tail grpc_slice_split_tail #define gpr_slice_split_head grpc_slice_split_head #define gpr_slice_cmp grpc_slice_cmp #define gpr_slice_str_cmp grpc_slice_str_cmp #define gpr_slice_buffer grpc_slice_buffer #define gpr_slice_buffer_init grpc_slice_buffer_init #define gpr_slice_buffer_destroy grpc_slice_buffer_destroy #define gpr_slice_buffer_add grpc_slice_buffer_add #define gpr_slice_buffer_add_indexed grpc_slice_buffer_add_indexed #define gpr_slice_buffer_addn grpc_slice_buffer_addn #define gpr_slice_buffer_tiny_add grpc_slice_buffer_tiny_add #define gpr_slice_buffer_pop grpc_slice_buffer_pop #define gpr_slice_buffer_reset_and_unref grpc_slice_buffer_reset_and_unref #define gpr_slice_buffer_swap grpc_slice_buffer_swap #define gpr_slice_buffer_move_into grpc_slice_buffer_move_into #define gpr_slice_buffer_trim_end grpc_slice_buffer_trim_end #define gpr_slice_buffer_move_first grpc_slice_buffer_move_first #define gpr_slice_buffer_take_first grpc_slice_buffer_take_first #endif /* GRPC_ALLOW_GPR_SLICE_FUNCTIONS */ #endif /* GRPC_IMPL_CODEGEN_GPR_SLICE_H */ grpc-1.30.2/include/grpc/impl/codegen/gpr_types.h000066400000000000000000000033641370425124100216450ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPC_IMPL_CODEGEN_GPR_TYPES_H #define GRPC_IMPL_CODEGEN_GPR_TYPES_H #include #include #ifdef __cplusplus extern "C" { #endif /** The clocks we support. */ typedef enum { /** Monotonic clock. Epoch undefined. Always moves forwards. */ GPR_CLOCK_MONOTONIC = 0, /** Realtime clock. May jump forwards or backwards. Settable by the system administrator. Has its epoch at 0:00:00 UTC 1 Jan 1970. */ GPR_CLOCK_REALTIME, /** CPU cycle time obtained by rdtsc instruction on x86 platforms. Epoch undefined. Degrades to GPR_CLOCK_REALTIME on other platforms. */ GPR_CLOCK_PRECISE, /** Unmeasurable clock type: no base, created by taking the difference between two times */ GPR_TIMESPAN } gpr_clock_type; /** Analogous to struct timespec. On some machines, absolute times may be in * local time. */ typedef struct gpr_timespec { int64_t tv_sec; int32_t tv_nsec; /** Against which clock was this time measured? (or GPR_TIMESPAN if this is a relative time measure) */ gpr_clock_type clock_type; } gpr_timespec; #ifdef __cplusplus } #endif #endif /* GRPC_IMPL_CODEGEN_GPR_TYPES_H */ grpc-1.30.2/include/grpc/impl/codegen/grpc_types.h000066400000000000000000001100441370425124100220020ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_IMPL_CODEGEN_GRPC_TYPES_H #define GRPC_IMPL_CODEGEN_GRPC_TYPES_H #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif typedef enum { GRPC_BB_RAW /** Future types may include GRPC_BB_PROTOBUF, etc. */ } grpc_byte_buffer_type; typedef struct grpc_byte_buffer { void* reserved; grpc_byte_buffer_type type; union grpc_byte_buffer_data { struct /* internal */ { void* reserved[8]; } reserved; struct grpc_compressed_buffer { grpc_compression_algorithm compression; grpc_slice_buffer slice_buffer; } raw; } data; } grpc_byte_buffer; /** Completion Queues enable notification of the completion of * asynchronous actions. */ typedef struct grpc_completion_queue grpc_completion_queue; /** An alarm associated with a completion queue. */ typedef struct grpc_alarm grpc_alarm; /** The Channel interface allows creation of Call objects. */ typedef struct grpc_channel grpc_channel; /** A server listens to some port and responds to request calls */ typedef struct grpc_server grpc_server; /** A Call represents an RPC. When created, it is in a configuration state allowing properties to be set until it is invoked. After invoke, the Call can have messages written to it and read from it. */ typedef struct grpc_call grpc_call; /** The Socket Mutator interface allows changes on socket options */ typedef struct grpc_socket_mutator grpc_socket_mutator; /** The Socket Factory interface creates and binds sockets */ typedef struct grpc_socket_factory grpc_socket_factory; /** Type specifier for grpc_arg */ typedef enum { GRPC_ARG_STRING, GRPC_ARG_INTEGER, GRPC_ARG_POINTER } grpc_arg_type; typedef struct grpc_arg_pointer_vtable { void* (*copy)(void* p); void (*destroy)(void* p); int (*cmp)(void* p, void* q); } grpc_arg_pointer_vtable; /** A single argument... each argument has a key and a value A note on naming keys: Keys are namespaced into groups, usually grouped by library, and are keys for module XYZ are named XYZ.key1, XYZ.key2, etc. Module names must be restricted to the regex [A-Za-z][_A-Za-z0-9]{,15}. Key names must be restricted to the regex [A-Za-z][_A-Za-z0-9]{,47}. GRPC core library keys are prefixed by grpc. Library authors are strongly encouraged to \#define symbolic constants for their keys so that it's possible to change them in the future. */ typedef struct { grpc_arg_type type; char* key; union grpc_arg_value { char* string; int integer; struct grpc_arg_pointer { void* p; const grpc_arg_pointer_vtable* vtable; } pointer; } value; } grpc_arg; /** An array of arguments that can be passed around. Used to set optional channel-level configuration. These configuration options are modelled as key-value pairs as defined by grpc_arg; keys are strings to allow easy backwards-compatible extension by arbitrary parties. All evaluation is performed at channel creation time (i.e. the keys and values in this structure need only live through the creation invocation). However, if one of the args has grpc_arg_type==GRPC_ARG_POINTER, then the grpc_arg_pointer_vtable must live until the channel args are done being used by core (i.e. when the object for use with which they were passed is destroyed). See the description of the \ref grpc_arg_keys "available args" for more details. */ typedef struct { size_t num_args; grpc_arg* args; } grpc_channel_args; /** \defgroup grpc_arg_keys * Channel argument keys. * \{ */ /** If non-zero, enable census for tracing and stats collection. */ #define GRPC_ARG_ENABLE_CENSUS "grpc.census" /** If non-zero, enable load reporting. */ #define GRPC_ARG_ENABLE_LOAD_REPORTING "grpc.loadreporting" /** Request that optional features default to off (regardless of what they usually default to) - to enable tight control over what gets enabled */ #define GRPC_ARG_MINIMAL_STACK "grpc.minimal_stack" /** Maximum number of concurrent incoming streams to allow on a http2 connection. Int valued. */ #define GRPC_ARG_MAX_CONCURRENT_STREAMS "grpc.max_concurrent_streams" /** Maximum message length that the channel can receive. Int valued, bytes. -1 means unlimited. */ #define GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH "grpc.max_receive_message_length" /** \deprecated For backward compatibility. * Use GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH instead. */ #define GRPC_ARG_MAX_MESSAGE_LENGTH GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH /** Maximum message length that the channel can send. Int valued, bytes. -1 means unlimited. */ #define GRPC_ARG_MAX_SEND_MESSAGE_LENGTH "grpc.max_send_message_length" /** Maximum time that a channel may have no outstanding rpcs, after which the * server will close the connection. Int valued, milliseconds. INT_MAX means * unlimited. */ #define GRPC_ARG_MAX_CONNECTION_IDLE_MS "grpc.max_connection_idle_ms" /** Maximum time that a channel may exist. Int valued, milliseconds. * INT_MAX means unlimited. */ #define GRPC_ARG_MAX_CONNECTION_AGE_MS "grpc.max_connection_age_ms" /** Grace period after the channel reaches its max age. Int valued, milliseconds. INT_MAX means unlimited. */ #define GRPC_ARG_MAX_CONNECTION_AGE_GRACE_MS "grpc.max_connection_age_grace_ms" /** Timeout after the last RPC finishes on the client channel at which the * channel goes back into IDLE state. Int valued, milliseconds. INT_MAX means * unlimited. The default value is 30 minutes and the min value is 1 second. */ #define GRPC_ARG_CLIENT_IDLE_TIMEOUT_MS "grpc.client_idle_timeout_ms" /** Enable/disable support for per-message compression. Defaults to 1, unless GRPC_ARG_MINIMAL_STACK is enabled, in which case it defaults to 0. */ #define GRPC_ARG_ENABLE_PER_MESSAGE_COMPRESSION "grpc.per_message_compression" /** Experimental Arg. Enable/disable support for per-message decompression. Defaults to 1. If disabled, decompression will not be performed and the application will see the compressed message in the byte buffer. */ #define GRPC_ARG_ENABLE_PER_MESSAGE_DECOMPRESSION \ "grpc.per_message_decompression" /** Enable/disable support for deadline checking. Defaults to 1, unless GRPC_ARG_MINIMAL_STACK is enabled, in which case it defaults to 0 */ #define GRPC_ARG_ENABLE_DEADLINE_CHECKS "grpc.enable_deadline_checking" /** Initial stream ID for http2 transports. Int valued. */ #define GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER \ "grpc.http2.initial_sequence_number" /** Amount to read ahead on individual streams. Defaults to 64kb, larger values can help throughput on high-latency connections. NOTE: at some point we'd like to auto-tune this, and this parameter will become a no-op. Int valued, bytes. */ #define GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES "grpc.http2.lookahead_bytes" /** How much memory to use for hpack decoding. Int valued, bytes. */ #define GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_DECODER \ "grpc.http2.hpack_table_size.decoder" /** How much memory to use for hpack encoding. Int valued, bytes. */ #define GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_ENCODER \ "grpc.http2.hpack_table_size.encoder" /** How big a frame are we willing to receive via HTTP2. Min 16384, max 16777215. Larger values give lower CPU usage for large messages, but more head of line blocking for small messages. */ #define GRPC_ARG_HTTP2_MAX_FRAME_SIZE "grpc.http2.max_frame_size" /** Should BDP probing be performed? */ #define GRPC_ARG_HTTP2_BDP_PROBE "grpc.http2.bdp_probe" /** Minimum time between sending successive ping frames without receiving any data/header/window_update frame, Int valued, milliseconds. */ #define GRPC_ARG_HTTP2_MIN_SENT_PING_INTERVAL_WITHOUT_DATA_MS \ "grpc.http2.min_time_between_pings_ms" /** Minimum allowed time between a server receiving successive ping frames without sending any data/header/window_update frame. Int valued, milliseconds */ #define GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS \ "grpc.http2.min_ping_interval_without_data_ms" /** Channel arg to override the http2 :scheme header */ #define GRPC_ARG_HTTP2_SCHEME "grpc.http2_scheme" /** How many pings can we send before needing to send a data/header/window_update frame? (0 indicates that an infinite number of pings can be sent without sending a data frame or header frame) */ #define GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA \ "grpc.http2.max_pings_without_data" /** How many misbehaving pings the server can bear before sending goaway and closing the transport? (0 indicates that the server can bear an infinite number of misbehaving pings) */ #define GRPC_ARG_HTTP2_MAX_PING_STRIKES "grpc.http2.max_ping_strikes" /** How much data are we willing to queue up per stream if GRPC_WRITE_BUFFER_HINT is set? This is an upper bound */ #define GRPC_ARG_HTTP2_WRITE_BUFFER_SIZE "grpc.http2.write_buffer_size" /** Should we allow receipt of true-binary data on http2 connections? Defaults to on (1) */ #define GRPC_ARG_HTTP2_ENABLE_TRUE_BINARY "grpc.http2.true_binary" /** After a duration of this time the client/server pings its peer to see if the transport is still alive. Int valued, milliseconds. */ #define GRPC_ARG_KEEPALIVE_TIME_MS "grpc.keepalive_time_ms" /** After waiting for a duration of this time, if the keepalive ping sender does not receive the ping ack, it will close the transport. Int valued, milliseconds. */ #define GRPC_ARG_KEEPALIVE_TIMEOUT_MS "grpc.keepalive_timeout_ms" /** Is it permissible to send keepalive pings without any outstanding streams. Int valued, 0(false)/1(true). */ #define GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS \ "grpc.keepalive_permit_without_calls" /** Default authority to pass if none specified on call construction. A string. * */ #define GRPC_ARG_DEFAULT_AUTHORITY "grpc.default_authority" /** Primary user agent: goes at the start of the user-agent metadata sent on each request. A string. */ #define GRPC_ARG_PRIMARY_USER_AGENT_STRING "grpc.primary_user_agent" /** Secondary user agent: goes at the end of the user-agent metadata sent on each request. A string. */ #define GRPC_ARG_SECONDARY_USER_AGENT_STRING "grpc.secondary_user_agent" /** The minimum time between subsequent connection attempts, in ms */ #define GRPC_ARG_MIN_RECONNECT_BACKOFF_MS "grpc.min_reconnect_backoff_ms" /** The maximum time between subsequent connection attempts, in ms */ #define GRPC_ARG_MAX_RECONNECT_BACKOFF_MS "grpc.max_reconnect_backoff_ms" /** The time between the first and second connection attempts, in ms */ #define GRPC_ARG_INITIAL_RECONNECT_BACKOFF_MS \ "grpc.initial_reconnect_backoff_ms" /** Minimum amount of time between DNS resolutions, in ms */ #define GRPC_ARG_DNS_MIN_TIME_BETWEEN_RESOLUTIONS_MS \ "grpc.dns_min_time_between_resolutions_ms" /** The timeout used on servers for finishing handshaking on an incoming connection. Defaults to 120 seconds. */ #define GRPC_ARG_SERVER_HANDSHAKE_TIMEOUT_MS "grpc.server_handshake_timeout_ms" /** This *should* be used for testing only. The caller of the secure_channel_create functions may override the target name used for SSL host name checking using this channel argument which is of type \a GRPC_ARG_STRING. If this argument is not specified, the name used for SSL host name checking will be the target parameter (assuming that the secure channel is an SSL channel). If this parameter is specified and the underlying is not an SSL channel, it will just be ignored. */ #define GRPC_SSL_TARGET_NAME_OVERRIDE_ARG "grpc.ssl_target_name_override" /** If non-zero, a pointer to a session cache (a pointer of type grpc_ssl_session_cache*). (use grpc_ssl_session_cache_arg_vtable() to fetch an appropriate pointer arg vtable) */ #define GRPC_SSL_SESSION_CACHE_ARG "grpc.ssl_session_cache" /** If non-zero, it will determine the maximum frame size used by TSI's frame * protector. * * NOTE: Be aware that using a large "max_frame_size" is memory inefficient * for non-zerocopy protectors. Also, increasing this value above 1MiB * can break old binaries that don't support larger than 1MiB frame * size. */ #define GRPC_ARG_TSI_MAX_FRAME_SIZE "grpc.tsi.max_frame_size" /** Maximum metadata size, in bytes. Note this limit applies to the max sum of all metadata key-value entries in a batch of headers. */ #define GRPC_ARG_MAX_METADATA_SIZE "grpc.max_metadata_size" /** If non-zero, allow the use of SO_REUSEPORT if it's available (default 1) */ #define GRPC_ARG_ALLOW_REUSEPORT "grpc.so_reuseport" /** If non-zero, a pointer to a buffer pool (a pointer of type * grpc_resource_quota*). (use grpc_resource_quota_arg_vtable() to fetch an * appropriate pointer arg vtable) */ #define GRPC_ARG_RESOURCE_QUOTA "grpc.resource_quota" /** If non-zero, expand wildcard addresses to a list of local addresses. */ #define GRPC_ARG_EXPAND_WILDCARD_ADDRS "grpc.expand_wildcard_addrs" /** Service config data in JSON form. This value will be ignored if the name resolver returns a service config. */ #define GRPC_ARG_SERVICE_CONFIG "grpc.service_config" /** Disable looking up the service config via the name resolver. */ #define GRPC_ARG_SERVICE_CONFIG_DISABLE_RESOLUTION \ "grpc.service_config_disable_resolution" /** LB policy name. */ #define GRPC_ARG_LB_POLICY_NAME "grpc.lb_policy_name" /** The grpc_socket_mutator instance that set the socket options. A pointer. */ #define GRPC_ARG_SOCKET_MUTATOR "grpc.socket_mutator" /** The grpc_socket_factory instance to create and bind sockets. A pointer. */ #define GRPC_ARG_SOCKET_FACTORY "grpc.socket_factory" /** The maximum amount of memory used by trace events per channel trace node. * Once the maximum is reached, subsequent events will evict the oldest events * from the buffer. The unit for this knob is bytes. Setting it to zero causes * channel tracing to be disabled. */ #define GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE \ "grpc.max_channel_trace_event_memory_per_node" /** If non-zero, gRPC library will track stats and information at at per channel * level. Disabling channelz naturally disables channel tracing. The default * is for channelz to be enabled. */ #define GRPC_ARG_ENABLE_CHANNELZ "grpc.enable_channelz" /** If non-zero, Cronet transport will coalesce packets to fewer frames * when possible. */ #define GRPC_ARG_USE_CRONET_PACKET_COALESCING \ "grpc.use_cronet_packet_coalescing" /** Channel arg (integer) setting how large a slice to try and read from the wire each time recvmsg (or equivalent) is called **/ #define GRPC_ARG_TCP_READ_CHUNK_SIZE "grpc.experimental.tcp_read_chunk_size" /** Note this is not a "channel arg" key. This is the default slice size to use * when trying to read from the wire if the GRPC_ARG_TCP_READ_CHUNK_SIZE * channel arg is unspecified. */ #define GRPC_TCP_DEFAULT_READ_SLICE_SIZE 8192 #define GRPC_ARG_TCP_MIN_READ_CHUNK_SIZE \ "grpc.experimental.tcp_min_read_chunk_size" #define GRPC_ARG_TCP_MAX_READ_CHUNK_SIZE \ "grpc.experimental.tcp_max_read_chunk_size" /* TCP TX Zerocopy enable state: zero is disabled, non-zero is enabled. By default, it is disabled. */ #define GRPC_ARG_TCP_TX_ZEROCOPY_ENABLED \ "grpc.experimental.tcp_tx_zerocopy_enabled" /* TCP TX Zerocopy send threshold: only zerocopy if >= this many bytes sent. By default, this is set to 16KB. */ #define GRPC_ARG_TCP_TX_ZEROCOPY_SEND_BYTES_THRESHOLD \ "grpc.experimental.tcp_tx_zerocopy_send_bytes_threshold" /* TCP TX Zerocopy max simultaneous sends: limit for maximum number of pending calls to tcp_write() using zerocopy. A tcp_write() is considered pending until the kernel performs the zerocopy-done callback for all sendmsg() calls issued by the tcp_write(). By default, this is set to 4. */ #define GRPC_ARG_TCP_TX_ZEROCOPY_MAX_SIMULT_SENDS \ "grpc.experimental.tcp_tx_zerocopy_max_simultaneous_sends" /* Timeout in milliseconds to use for calls to the grpclb load balancer. If 0 or unset, the balancer calls will have no deadline. */ #define GRPC_ARG_GRPCLB_CALL_TIMEOUT_MS "grpc.grpclb_call_timeout_ms" /* Timeout in milliseconds to wait for the serverlist from the grpclb load balancer before using fallback backend addresses from the resolver. If 0, enter fallback mode immediately. Default value is 10000. */ #define GRPC_ARG_GRPCLB_FALLBACK_TIMEOUT_MS "grpc.grpclb_fallback_timeout_ms" /* Timeout in milliseconds to wait for the child of a specific priority to complete its initial connection attempt before the priority LB policy fails over to the next priority. Default value is 10 seconds. */ #define GRPC_ARG_PRIORITY_FAILOVER_TIMEOUT_MS \ "grpc.priority_failover_timeout_ms" /* Timeout in milliseconds to wait for a resource to be returned from * the xds server before assuming that it does not exist. * The default is 15 seconds. */ #define GRPC_ARG_XDS_RESOURCE_DOES_NOT_EXIST_TIMEOUT_MS \ "grpc.xds_resource_does_not_exist_timeout_ms" /** If non-zero, grpc server's cronet compression workaround will be enabled */ #define GRPC_ARG_WORKAROUND_CRONET_COMPRESSION \ "grpc.workaround.cronet_compression" /** String defining the optimization target for a channel. Can be: "latency" - attempt to minimize latency at the cost of throughput "blend" - try to balance latency and throughput "throughput" - attempt to maximize throughput at the expense of latency Defaults to "blend". In the current implementation "blend" is equivalent to "latency". */ #define GRPC_ARG_OPTIMIZATION_TARGET "grpc.optimization_target" /** If set to zero, disables retry behavior. Otherwise, transparent retries are enabled for all RPCs, and configurable retries are enabled when they are configured via the service config. For details, see: https://github.com/grpc/proposal/blob/master/A6-client-retries.md */ #define GRPC_ARG_ENABLE_RETRIES "grpc.enable_retries" /** Per-RPC retry buffer size, in bytes. Default is 256 KiB. */ #define GRPC_ARG_PER_RPC_RETRY_BUFFER_SIZE "grpc.per_rpc_retry_buffer_size" /** Channel arg that carries the bridged objective c object for custom metrics * logging filter. */ #define GRPC_ARG_MOBILE_LOG_CONTEXT "grpc.mobile_log_context" /** If non-zero, client authority filter is disabled for the channel */ #define GRPC_ARG_DISABLE_CLIENT_AUTHORITY_FILTER \ "grpc.disable_client_authority_filter" /** If set to zero, disables use of http proxies. Enabled by default. */ #define GRPC_ARG_ENABLE_HTTP_PROXY "grpc.enable_http_proxy" /** Channel arg to set http proxy per channel. If set, the channel arg * value will be prefered over the envrionment variable settings. */ #define GRPC_ARG_HTTP_PROXY "grpc.http_proxy" /** If set to non zero, surfaces the user agent string to the server. User agent is surfaced by default. */ #define GRPC_ARG_SURFACE_USER_AGENT "grpc.surface_user_agent" /** If set, inhibits health checking (which may be enabled via the * service config.) */ #define GRPC_ARG_INHIBIT_HEALTH_CHECKING "grpc.inhibit_health_checking" /** If set, the channel's resolver is allowed to query for SRV records. * For example, this is useful as a way to enable the "grpclb" * load balancing policy. Note that this only works with the "ares" * DNS resolver, and isn't supported by the "native" DNS resolver. */ #define GRPC_ARG_DNS_ENABLE_SRV_QUERIES "grpc.dns_enable_srv_queries" /** If set, determines an upper bound on the number of milliseconds that the * c-ares based DNS resolver will wait on queries before cancelling them. * The default value is 120,000. Setting this to "0" will disable the * overall timeout entirely. Note that this doesn't include internal c-ares * timeouts/backoff/retry logic, and so the actual DNS resolution may time out * sooner than the value specified here. */ #define GRPC_ARG_DNS_ARES_QUERY_TIMEOUT_MS "grpc.dns_ares_query_timeout" /** If set, uses a local subchannel pool within the channel. Otherwise, uses the * global subchannel pool. */ #define GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL "grpc.use_local_subchannel_pool" /** gRPC Objective-C channel pooling domain string. */ #define GRPC_ARG_CHANNEL_POOL_DOMAIN "grpc.channel_pooling_domain" /** gRPC Objective-C channel pooling id. */ #define GRPC_ARG_CHANNEL_ID "grpc.channel_id" /** \} */ /** Result of a grpc call. If the caller satisfies the prerequisites of a particular operation, the grpc_call_error returned will be GRPC_CALL_OK. Receiving any other value listed here is an indication of a bug in the caller. */ typedef enum grpc_call_error { /** everything went ok */ GRPC_CALL_OK = 0, /** something failed, we don't know what */ GRPC_CALL_ERROR, /** this method is not available on the server */ GRPC_CALL_ERROR_NOT_ON_SERVER, /** this method is not available on the client */ GRPC_CALL_ERROR_NOT_ON_CLIENT, /** this method must be called before server_accept */ GRPC_CALL_ERROR_ALREADY_ACCEPTED, /** this method must be called before invoke */ GRPC_CALL_ERROR_ALREADY_INVOKED, /** this method must be called after invoke */ GRPC_CALL_ERROR_NOT_INVOKED, /** this call is already finished (writes_done or write_status has already been called) */ GRPC_CALL_ERROR_ALREADY_FINISHED, /** there is already an outstanding read/write operation on the call */ GRPC_CALL_ERROR_TOO_MANY_OPERATIONS, /** the flags value was illegal for this call */ GRPC_CALL_ERROR_INVALID_FLAGS, /** invalid metadata was passed to this call */ GRPC_CALL_ERROR_INVALID_METADATA, /** invalid message was passed to this call */ GRPC_CALL_ERROR_INVALID_MESSAGE, /** completion queue for notification has not been registered * with the server */ GRPC_CALL_ERROR_NOT_SERVER_COMPLETION_QUEUE, /** this batch of operations leads to more operations than allowed */ GRPC_CALL_ERROR_BATCH_TOO_BIG, /** payload type requested is not the type registered */ GRPC_CALL_ERROR_PAYLOAD_TYPE_MISMATCH, /** completion queue has been shutdown */ GRPC_CALL_ERROR_COMPLETION_QUEUE_SHUTDOWN } grpc_call_error; /** Default send/receive message size limits in bytes. -1 for unlimited. */ /** TODO(roth) Make this match the default receive limit after next release */ #define GRPC_DEFAULT_MAX_SEND_MESSAGE_LENGTH -1 #define GRPC_DEFAULT_MAX_RECV_MESSAGE_LENGTH (4 * 1024 * 1024) /** Write Flags: */ /** Hint that the write may be buffered and need not go out on the wire immediately. GRPC is free to buffer the message until the next non-buffered write, or until writes_done, but it need not buffer completely or at all. */ #define GRPC_WRITE_BUFFER_HINT (0x00000001u) /** Force compression to be disabled for a particular write (start_write/add_metadata). Illegal on invoke/accept. */ #define GRPC_WRITE_NO_COMPRESS (0x00000002u) /** Force this message to be written to the socket before completing it */ #define GRPC_WRITE_THROUGH (0x00000004u) /** Mask of all valid flags. */ #define GRPC_WRITE_USED_MASK \ (GRPC_WRITE_BUFFER_HINT | GRPC_WRITE_NO_COMPRESS | GRPC_WRITE_THROUGH) /** Initial metadata flags */ /** Signal that the call is idempotent */ #define GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST (0x00000010u) /** Signal that the call should not return UNAVAILABLE before it has started */ #define GRPC_INITIAL_METADATA_WAIT_FOR_READY (0x00000020u) /** Signal that the call is cacheable. GRPC is free to use GET verb */ #define GRPC_INITIAL_METADATA_CACHEABLE_REQUEST (0x00000040u) /** Signal that GRPC_INITIAL_METADATA_WAIT_FOR_READY was explicitly set by the calling application. */ #define GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET (0x00000080u) /** Signal that the initial metadata should be corked */ #define GRPC_INITIAL_METADATA_CORKED (0x00000100u) /** Mask of all valid flags */ #define GRPC_INITIAL_METADATA_USED_MASK \ (GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST | \ GRPC_INITIAL_METADATA_WAIT_FOR_READY | \ GRPC_INITIAL_METADATA_CACHEABLE_REQUEST | \ GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET | \ GRPC_INITIAL_METADATA_CORKED | GRPC_WRITE_THROUGH) /** A single metadata element */ typedef struct grpc_metadata { /** the key, value values are expected to line up with grpc_mdelem: if changing them, update metadata.h at the same time. */ grpc_slice key; grpc_slice value; uint32_t flags; /** The following fields are reserved for grpc internal use. There is no need to initialize them, and they will be set to garbage during calls to grpc. */ struct /* internal */ { void* obfuscated[4]; } internal_data; } grpc_metadata; /** The type of completion (for grpc_event) */ typedef enum grpc_completion_type { /** Shutting down */ GRPC_QUEUE_SHUTDOWN, /** No event before timeout */ GRPC_QUEUE_TIMEOUT, /** Operation completion */ GRPC_OP_COMPLETE } grpc_completion_type; /** The result of an operation. Returned by a completion queue when the operation started with tag. */ typedef struct grpc_event { /** The type of the completion. */ grpc_completion_type type; /** If the grpc_completion_type is GRPC_OP_COMPLETE, this field indicates whether the operation was successful or not; 0 in case of failure and non-zero in case of success. If grpc_completion_type is GRPC_QUEUE_SHUTDOWN or GRPC_QUEUE_TIMEOUT, this field is guaranteed to be 0 */ int success; /** The tag passed to grpc_call_start_batch etc to start this operation. *Only* GRPC_OP_COMPLETE has a tag. For all other grpc_completion_type values, tag is uninitialized. */ void* tag; } grpc_event; typedef struct { size_t count; size_t capacity; grpc_metadata* metadata; } grpc_metadata_array; typedef struct { grpc_slice method; grpc_slice host; gpr_timespec deadline; uint32_t flags; void* reserved; } grpc_call_details; typedef enum { /** Send initial metadata: one and only one instance MUST be sent for each call, unless the call was cancelled - in which case this can be skipped. This op completes after all bytes of metadata have been accepted by outgoing flow control. */ GRPC_OP_SEND_INITIAL_METADATA = 0, /** Send a message: 0 or more of these operations can occur for each call. This op completes after all bytes for the message have been accepted by outgoing flow control. */ GRPC_OP_SEND_MESSAGE, /** Send a close from the client: one and only one instance MUST be sent from the client, unless the call was cancelled - in which case this can be skipped. This op completes after all bytes for the call (including the close) have passed outgoing flow control. */ GRPC_OP_SEND_CLOSE_FROM_CLIENT, /** Send status from the server: one and only one instance MUST be sent from the server unless the call was cancelled - in which case this can be skipped. This op completes after all bytes for the call (including the status) have passed outgoing flow control. */ GRPC_OP_SEND_STATUS_FROM_SERVER, /** Receive initial metadata: one and only one MUST be made on the client, must not be made on the server. This op completes after all initial metadata has been read from the peer. */ GRPC_OP_RECV_INITIAL_METADATA, /** Receive a message: 0 or more of these operations can occur for each call. This op completes after all bytes of the received message have been read, or after a half-close has been received on this call. */ GRPC_OP_RECV_MESSAGE, /** Receive status on the client: one and only one must be made on the client. This operation always succeeds, meaning ops paired with this operation will also appear to succeed, even though they may not have. In that case the status will indicate some failure. This op completes after all activity on the call has completed. */ GRPC_OP_RECV_STATUS_ON_CLIENT, /** Receive close on the server: one and only one must be made on the server. This op completes after the close has been received by the server. This operation always succeeds, meaning ops paired with this operation will also appear to succeed, even though they may not have. */ GRPC_OP_RECV_CLOSE_ON_SERVER } grpc_op_type; struct grpc_byte_buffer; /** Operation data: one field for each op type (except SEND_CLOSE_FROM_CLIENT which has no arguments) */ typedef struct grpc_op { /** Operation type, as defined by grpc_op_type */ grpc_op_type op; /** Write flags bitset for grpc_begin_messages */ uint32_t flags; /** Reserved for future usage */ void* reserved; union grpc_op_data { /** Reserved for future usage */ struct /* internal */ { void* reserved[8]; } reserved; struct grpc_op_send_initial_metadata { size_t count; grpc_metadata* metadata; /** If \a is_set, \a compression_level will be used for the call. * Otherwise, \a compression_level won't be considered */ struct grpc_op_send_initial_metadata_maybe_compression_level { uint8_t is_set; grpc_compression_level level; } maybe_compression_level; } send_initial_metadata; struct grpc_op_send_message { /** This op takes ownership of the slices in send_message. After * a call completes, the contents of send_message are not guaranteed * and likely empty. The original owner should still call * grpc_byte_buffer_destroy() on this object however. */ struct grpc_byte_buffer* send_message; } send_message; struct grpc_op_send_status_from_server { size_t trailing_metadata_count; grpc_metadata* trailing_metadata; grpc_status_code status; /** optional: set to NULL if no details need sending, non-NULL if they do * pointer will not be retained past the start_batch call */ grpc_slice* status_details; } send_status_from_server; /** ownership of the array is with the caller, but ownership of the elements stays with the call object (ie key, value members are owned by the call object, recv_initial_metadata->array is owned by the caller). After the operation completes, call grpc_metadata_array_destroy on this value, or reuse it in a future op. */ struct grpc_op_recv_initial_metadata { grpc_metadata_array* recv_initial_metadata; } recv_initial_metadata; /** ownership of the byte buffer is moved to the caller; the caller must call grpc_byte_buffer_destroy on this value, or reuse it in a future op. The returned byte buffer will be NULL if trailing metadata was received instead of a message. */ struct grpc_op_recv_message { struct grpc_byte_buffer** recv_message; } recv_message; struct grpc_op_recv_status_on_client { /** ownership of the array is with the caller, but ownership of the elements stays with the call object (ie key, value members are owned by the call object, trailing_metadata->array is owned by the caller). After the operation completes, call grpc_metadata_array_destroy on this value, or reuse it in a future op. */ grpc_metadata_array* trailing_metadata; grpc_status_code* status; grpc_slice* status_details; /** If this is not nullptr, it will be populated with the full fidelity * error string for debugging purposes. The application is responsible * for freeing the data by using gpr_free(). */ const char** error_string; } recv_status_on_client; struct grpc_op_recv_close_on_server { /** out argument, set to 1 if the call failed in any way (seen as a cancellation on the server), or 0 if the call succeeded */ int* cancelled; } recv_close_on_server; } data; } grpc_op; /** Information requested from the channel. */ typedef struct { /** If non-NULL, will be set to point to a string indicating the LB * policy name. Caller takes ownership. */ char** lb_policy_name; /** If non-NULL, will be set to point to a string containing the * service config used by the channel in JSON form. */ char** service_config_json; } grpc_channel_info; typedef struct grpc_resource_quota grpc_resource_quota; /** Completion queues internally MAY maintain a set of file descriptors in a structure called 'pollset'. This enum specifies if a completion queue has an associated pollset and any restrictions on the type of file descriptors that can be present in the pollset. I/O progress can only be made when grpc_completion_queue_next() or grpc_completion_queue_pluck() are called on the completion queue (unless the grpc_cq_polling_type is GRPC_CQ_NON_POLLING) and hence it is very important to actively call these APIs */ typedef enum { /** The completion queue will have an associated pollset and there is no restriction on the type of file descriptors the pollset may contain */ GRPC_CQ_DEFAULT_POLLING, /** Similar to GRPC_CQ_DEFAULT_POLLING except that the completion queues will not contain any 'listening file descriptors' (i.e file descriptors used to listen to incoming channels) */ GRPC_CQ_NON_LISTENING, /** The completion queue will not have an associated pollset. Note that grpc_completion_queue_next() or grpc_completion_queue_pluck() MUST still be called to pop events from the completion queue; it is not required to call them actively to make I/O progress */ GRPC_CQ_NON_POLLING } grpc_cq_polling_type; /** Specifies the type of APIs to use to pop events from the completion queue */ typedef enum { /** Events are popped out by calling grpc_completion_queue_next() API ONLY */ GRPC_CQ_NEXT, /** Events are popped out by calling grpc_completion_queue_pluck() API ONLY*/ GRPC_CQ_PLUCK, /** EXPERIMENTAL: Events trigger a callback specified as the tag */ GRPC_CQ_CALLBACK } grpc_cq_completion_type; /** EXPERIMENTAL: Specifies an interface class to be used as a tag for callback-based completion queues. This can be used directly, as the first element of a struct in C, or as a base class in C++. Its "run" value should be assigned to some non-member function, such as a static method. */ typedef struct grpc_experimental_completion_queue_functor { /** The run member specifies a function that will be called when this tag is extracted from the completion queue. Its arguments will be a pointer to this functor and a boolean that indicates whether the operation succeeded (non-zero) or failed (zero) */ void (*functor_run)(struct grpc_experimental_completion_queue_functor*, int); /** The inlineable member specifies whether this functor can be run inline. This should only be used for trivial internally-defined functors. */ int inlineable; /** The following fields are not API. They are meant for internal use. */ int internal_success; struct grpc_experimental_completion_queue_functor* internal_next; } grpc_experimental_completion_queue_functor; /* The upgrade to version 2 is currently experimental. */ #define GRPC_CQ_CURRENT_VERSION 2 #define GRPC_CQ_VERSION_MINIMUM_FOR_CALLBACKABLE 2 typedef struct grpc_completion_queue_attributes { /** The version number of this structure. More fields might be added to this structure in future. */ int version; /** Set to GRPC_CQ_CURRENT_VERSION */ grpc_cq_completion_type cq_completion_type; grpc_cq_polling_type cq_polling_type; /* END OF VERSION 1 CQ ATTRIBUTES */ /* EXPERIMENTAL: START OF VERSION 2 CQ ATTRIBUTES */ /** When creating a callbackable CQ, pass in a functor to get invoked when * shutdown is complete */ grpc_experimental_completion_queue_functor* cq_shutdown_cb; /* END OF VERSION 2 CQ ATTRIBUTES */ } grpc_completion_queue_attributes; /** The completion queue factory structure is opaque to the callers of grpc */ typedef struct grpc_completion_queue_factory grpc_completion_queue_factory; #ifdef __cplusplus } #endif #endif /* GRPC_IMPL_CODEGEN_GRPC_TYPES_H */ grpc-1.30.2/include/grpc/impl/codegen/log.h000066400000000000000000000067161370425124100204160ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_IMPL_CODEGEN_LOG_H #define GRPC_IMPL_CODEGEN_LOG_H #include #include #include /* for abort() */ #ifdef __cplusplus extern "C" { #endif /** GPR log API. Usage (within grpc): int argument1 = 3; char* argument2 = "hello"; gpr_log(GPR_DEBUG, "format string %d", argument1); gpr_log(GPR_INFO, "hello world"); gpr_log(GPR_ERROR, "%d %s!!", argument1, argument2); */ /** The severity of a log message - use the #defines below when calling into gpr_log to additionally supply file and line data */ typedef enum gpr_log_severity { GPR_LOG_SEVERITY_DEBUG, GPR_LOG_SEVERITY_INFO, GPR_LOG_SEVERITY_ERROR } gpr_log_severity; #define GPR_LOG_VERBOSITY_UNSET -1 /** Returns a string representation of the log severity */ GPRAPI const char* gpr_log_severity_string(gpr_log_severity severity); /** Macros to build log contexts at various severity levels */ #define GPR_DEBUG __FILE__, __LINE__, GPR_LOG_SEVERITY_DEBUG #define GPR_INFO __FILE__, __LINE__, GPR_LOG_SEVERITY_INFO #define GPR_ERROR __FILE__, __LINE__, GPR_LOG_SEVERITY_ERROR /** Log a message. It's advised to use GPR_xxx above to generate the context * for each message */ GPRAPI void gpr_log(const char* file, int line, gpr_log_severity severity, const char* format, ...) GPR_PRINT_FORMAT_CHECK(4, 5); GPRAPI int gpr_should_log(gpr_log_severity severity); GPRAPI void gpr_log_message(const char* file, int line, gpr_log_severity severity, const char* message); /** Set global log verbosity */ GPRAPI void gpr_set_log_verbosity(gpr_log_severity min_severity_to_print); GPRAPI void gpr_log_verbosity_init(void); /** Log overrides: applications can use this API to intercept logging calls and use their own implementations */ struct gpr_log_func_args { const char* file; int line; gpr_log_severity severity; const char* message; }; typedef struct gpr_log_func_args gpr_log_func_args; typedef void (*gpr_log_func)(gpr_log_func_args* args); GPRAPI void gpr_set_log_function(gpr_log_func func); /** abort() the process if x is zero, having written a line to the log. Intended for internal invariants. If the error can be recovered from, without the possibility of corruption, or might best be reflected via an exception in a higher-level language, consider returning error code. */ #define GPR_ASSERT(x) \ do { \ if (GPR_UNLIKELY(!(x))) { \ gpr_log(GPR_ERROR, "assertion failed: %s", #x); \ abort(); \ } \ } while (0) #ifndef NDEBUG #define GPR_DEBUG_ASSERT(x) GPR_ASSERT(x) #else #define GPR_DEBUG_ASSERT(x) #endif #ifdef __cplusplus } #endif #endif /* GRPC_IMPL_CODEGEN_LOG_H */ grpc-1.30.2/include/grpc/impl/codegen/port_platform.h000066400000000000000000000473471370425124100225320ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_IMPL_CODEGEN_PORT_PLATFORM_H #define GRPC_IMPL_CODEGEN_PORT_PLATFORM_H /* * Define GPR_BACKWARDS_COMPATIBILITY_MODE to try harder to be ABI * compatible with older platforms (currently only on Linux) * Causes: * - some libc calls to be gotten via dlsym * - some syscalls to be made directly */ /* * Defines GRPC_USE_ABSL to use Abseil Common Libraries (C++) */ #ifndef GRPC_USE_ABSL #define GRPC_USE_ABSL 1 #endif /* * Defines GPR_ABSEIL_SYNC to use synchronization features from Abseil */ #ifndef GPR_ABSEIL_SYNC /* #define GPR_ABSEIL_SYNC 1 */ #endif /* Get windows.h included everywhere (we need it) */ #if defined(_WIN64) || defined(WIN64) || defined(_WIN32) || defined(WIN32) #ifndef WIN32_LEAN_AND_MEAN #define GRPC_WIN32_LEAN_AND_MEAN_WAS_NOT_DEFINED #define WIN32_LEAN_AND_MEAN #endif /* WIN32_LEAN_AND_MEAN */ #ifndef NOMINMAX #define GRPC_NOMINMX_WAS_NOT_DEFINED #define NOMINMAX #endif /* NOMINMAX */ #include #ifndef _WIN32_WINNT #error \ "Please compile grpc with _WIN32_WINNT of at least 0x600 (aka Windows Vista)" #else /* !defined(_WIN32_WINNT) */ #if (_WIN32_WINNT < 0x0600) #error \ "Please compile grpc with _WIN32_WINNT of at least 0x600 (aka Windows Vista)" #endif /* _WIN32_WINNT < 0x0600 */ #endif /* defined(_WIN32_WINNT) */ #ifdef GRPC_WIN32_LEAN_AND_MEAN_WAS_NOT_DEFINED #undef GRPC_WIN32_LEAN_AND_MEAN_WAS_NOT_DEFINED #undef WIN32_LEAN_AND_MEAN #endif /* GRPC_WIN32_LEAN_AND_MEAN_WAS_NOT_DEFINED */ #ifdef GRPC_NOMINMAX_WAS_NOT_DEFINED #undef GRPC_NOMINMAX_WAS_NOT_DEFINED #undef NOMINMAX #endif /* GRPC_WIN32_LEAN_AND_MEAN_WAS_NOT_DEFINED */ #endif /* defined(_WIN64) || defined(WIN64) || defined(_WIN32) || \ defined(WIN32) */ /* Override this file with one for your platform if you need to redefine things. */ #if !defined(GPR_NO_AUTODETECT_PLATFORM) #if defined(_WIN64) || defined(WIN64) || defined(_WIN32) || defined(WIN32) #if defined(_WIN64) || defined(WIN64) #define GPR_ARCH_64 1 #else #define GPR_ARCH_32 1 #endif #define GPR_PLATFORM_STRING "windows" #define GPR_WINDOWS 1 #define GPR_WINDOWS_SUBPROCESS 1 #define GPR_WINDOWS_ENV #ifdef __MSYS__ #define GPR_GETPID_IN_UNISTD_H 1 #define GPR_MSYS_TMPFILE #define GPR_POSIX_LOG #define GPR_POSIX_STRING #define GPR_POSIX_TIME #else #define GPR_GETPID_IN_PROCESS_H 1 #define GPR_WINDOWS_TMPFILE #define GPR_WINDOWS_LOG #define GPR_WINDOWS_CRASH_HANDLER 1 #define GPR_WINDOWS_STRING #define GPR_WINDOWS_TIME #endif #ifdef __GNUC__ #define GPR_GCC_ATOMIC 1 #define GPR_GCC_TLS 1 #else #define GPR_WINDOWS_ATOMIC 1 #define GPR_MSVC_TLS 1 #endif #elif defined(GPR_MANYLINUX1) // TODO(atash): manylinux1 is just another __linux__ but with ancient // libraries; it should be integrated with the `__linux__` definitions below. #define GPR_PLATFORM_STRING "manylinux" #define GPR_POSIX_CRASH_HANDLER 1 #define GPR_CPU_POSIX 1 #define GPR_GCC_ATOMIC 1 #define GPR_GCC_TLS 1 #define GPR_LINUX 1 #define GPR_LINUX_LOG 1 #define GPR_SUPPORT_CHANNELS_FROM_FD 1 #define GPR_LINUX_ENV 1 #define GPR_POSIX_TMPFILE 1 #define GPR_POSIX_STRING 1 #define GPR_POSIX_SUBPROCESS 1 #define GPR_POSIX_SYNC 1 #define GPR_POSIX_TIME 1 #define GPR_HAS_PTHREAD_H 1 #define GPR_GETPID_IN_UNISTD_H 1 #ifdef _LP64 #define GPR_ARCH_64 1 #else /* _LP64 */ #define GPR_ARCH_32 1 #endif /* _LP64 */ #include #elif defined(ANDROID) || defined(__ANDROID__) #define GPR_PLATFORM_STRING "android" #define GPR_ANDROID 1 // TODO(apolcyn): re-evaluate support for c-ares // on android after upgrading our c-ares dependency. // See https://github.com/grpc/grpc/issues/18038. #define GRPC_ARES 0 #ifdef _LP64 #define GPR_ARCH_64 1 #else /* _LP64 */ #define GPR_ARCH_32 1 #endif /* _LP64 */ #define GPR_CPU_POSIX 1 #define GPR_GCC_SYNC 1 #define GPR_GCC_TLS 1 #define GPR_POSIX_ENV 1 #define GPR_POSIX_TMPFILE 1 #define GPR_ANDROID_LOG 1 #define GPR_POSIX_STRING 1 #define GPR_POSIX_SUBPROCESS 1 #define GPR_POSIX_SYNC 1 #define GPR_POSIX_TIME 1 #define GPR_HAS_PTHREAD_H 1 #define GPR_GETPID_IN_UNISTD_H 1 #define GPR_SUPPORT_CHANNELS_FROM_FD 1 #elif defined(__linux__) #define GPR_PLATFORM_STRING "linux" #ifndef _BSD_SOURCE #define _BSD_SOURCE #endif #ifndef _DEFAULT_SOURCE #define _DEFAULT_SOURCE #endif #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif #include #define GPR_CPU_LINUX 1 #define GPR_GCC_ATOMIC 1 #define GPR_GCC_TLS 1 #define GPR_LINUX 1 #define GPR_LINUX_LOG #define GPR_SUPPORT_CHANNELS_FROM_FD 1 #define GPR_LINUX_ENV 1 #define GPR_POSIX_TMPFILE 1 #define GPR_POSIX_STRING 1 #define GPR_POSIX_SUBPROCESS 1 #define GPR_POSIX_SYNC 1 #define GPR_POSIX_TIME 1 #define GPR_HAS_PTHREAD_H 1 #define GPR_GETPID_IN_UNISTD_H 1 #ifdef _LP64 #define GPR_ARCH_64 1 #else /* _LP64 */ #define GPR_ARCH_32 1 #endif /* _LP64 */ #ifdef __GLIBC__ #define GPR_POSIX_CRASH_HANDLER 1 #define GPR_LINUX_PTHREAD_NAME 1 #include #else /* musl libc */ #define GPR_MUSL_LIBC_COMPAT 1 #endif #elif defined(__ASYLO__) #define GPR_ARCH_64 1 #define GPR_CPU_POSIX 1 #define GPR_GCC_TLS 1 #define GPR_PLATFORM_STRING "asylo" #define GPR_GCC_SYNC 1 #define GPR_POSIX_SYNC 1 #define GPR_POSIX_STRING 1 #define GPR_POSIX_LOG 1 #define GPR_POSIX_TIME 1 #define GPR_POSIX_ENV 1 #define GPR_ASYLO 1 #define GRPC_POSIX_SOCKET 1 #define GRPC_POSIX_SOCKETADDR #define GRPC_POSIX_SOCKETUTILS 1 #define GRPC_TIMER_USE_GENERIC 1 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1 #define GRPC_POSIX_WAKEUP_FD 1 #define GRPC_ARES 0 #define GPR_NO_AUTODETECT_PLATFORM 1 #elif defined(__APPLE__) #include #include #ifndef _BSD_SOURCE #define _BSD_SOURCE #endif #if TARGET_OS_IPHONE #define GPR_PLATFORM_STRING "ios" #define GPR_CPU_IPHONE 1 #define GPR_PTHREAD_TLS 1 #define GRPC_CFSTREAM 1 /* the c-ares resolver isn't safe to enable on iOS */ #define GRPC_ARES 0 #else /* TARGET_OS_IPHONE */ #define GPR_PLATFORM_STRING "osx" #ifdef __MAC_OS_X_VERSION_MIN_REQUIRED #if __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_7 #define GPR_CPU_IPHONE 1 #define GPR_PTHREAD_TLS 1 #else /* __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_7 */ #define GPR_CPU_POSIX 1 /* TODO(vjpai): there is a reported issue in bazel build for Mac where __thread in a header is currently not working (bazelbuild/bazel#4341). Remove the following conditional and use GPR_GCC_TLS when that is fixed */ #ifndef GRPC_BAZEL_BUILD #define GPR_GCC_TLS 1 #else /* GRPC_BAZEL_BUILD */ #define GPR_PTHREAD_TLS 1 #endif /* GRPC_BAZEL_BUILD */ #define GPR_APPLE_PTHREAD_NAME 1 #endif #else /* __MAC_OS_X_VERSION_MIN_REQUIRED */ #define GPR_CPU_POSIX 1 /* TODO(vjpai): Remove the following conditional and use only GPR_GCC_TLS when bazelbuild/bazel#4341 is fixed */ #ifndef GRPC_BAZEL_BUILD #define GPR_GCC_TLS 1 #else /* GRPC_BAZEL_BUILD */ #define GPR_PTHREAD_TLS 1 #endif /* GRPC_BAZEL_BUILD */ #endif #define GPR_POSIX_CRASH_HANDLER 1 #endif #define GPR_APPLE 1 #define GPR_GCC_ATOMIC 1 #define GPR_POSIX_LOG 1 #define GPR_POSIX_ENV 1 #define GPR_POSIX_TMPFILE 1 #define GPR_POSIX_STRING 1 #define GPR_POSIX_SUBPROCESS 1 #define GPR_POSIX_SYNC 1 #define GPR_POSIX_TIME 1 #define GPR_HAS_PTHREAD_H 1 #define GPR_GETPID_IN_UNISTD_H 1 #ifndef GRPC_CFSTREAM #define GPR_SUPPORT_CHANNELS_FROM_FD 1 #endif #ifdef _LP64 #define GPR_ARCH_64 1 #else /* _LP64 */ #define GPR_ARCH_32 1 #endif /* _LP64 */ #elif defined(__FreeBSD__) #define GPR_PLATFORM_STRING "freebsd" #ifndef _BSD_SOURCE #define _BSD_SOURCE #endif #define GPR_FREEBSD 1 #define GPR_CPU_POSIX 1 #define GPR_GCC_ATOMIC 1 #define GPR_GCC_TLS 1 #define GPR_POSIX_LOG 1 #define GPR_POSIX_ENV 1 #define GPR_POSIX_TMPFILE 1 #define GPR_POSIX_STRING 1 #define GPR_POSIX_SUBPROCESS 1 #define GPR_POSIX_SYNC 1 #define GPR_POSIX_TIME 1 #define GPR_HAS_PTHREAD_H 1 #define GPR_GETPID_IN_UNISTD_H 1 #define GPR_SUPPORT_CHANNELS_FROM_FD 1 #ifdef _LP64 #define GPR_ARCH_64 1 #else /* _LP64 */ #define GPR_ARCH_32 1 #endif /* _LP64 */ #elif defined(__OpenBSD__) #define GPR_PLATFORM_STRING "openbsd" #ifndef _BSD_SOURCE #define _BSD_SOURCE #endif #define GPR_OPENBSD 1 #define GPR_CPU_POSIX 1 #define GPR_GCC_ATOMIC 1 #define GPR_GCC_TLS 1 #define GPR_POSIX_LOG 1 #define GPR_POSIX_ENV 1 #define GPR_POSIX_TMPFILE 1 #define GPR_POSIX_STRING 1 #define GPR_POSIX_SUBPROCESS 1 #define GPR_POSIX_SYNC 1 #define GPR_POSIX_TIME 1 #define GPR_HAS_PTHREAD_H 1 #define GPR_GETPID_IN_UNISTD_H 1 #define GPR_SUPPORT_CHANNELS_FROM_FD 1 #ifdef _LP64 #define GPR_ARCH_64 1 #else /* _LP64 */ #define GPR_ARCH_32 1 #endif /* _LP64 */ #elif defined(__sun) && defined(__SVR4) #define GPR_PLATFORM_STRING "solaris" #define GPR_SOLARIS 1 #define GPR_CPU_POSIX 1 #define GPR_GCC_ATOMIC 1 #define GPR_GCC_TLS 1 #define GPR_POSIX_LOG 1 #define GPR_POSIX_ENV 1 #define GPR_POSIX_TMPFILE 1 #define GPR_POSIX_STRING 1 #define GPR_POSIX_SUBPROCESS 1 #define GPR_POSIX_SYNC 1 #define GPR_POSIX_TIME 1 #define GPR_HAS_PTHREAD_H 1 #define GPR_GETPID_IN_UNISTD_H 1 #ifdef _LP64 #define GPR_ARCH_64 1 #else /* _LP64 */ #define GPR_ARCH_32 1 #endif /* _LP64 */ #elif defined(_AIX) #define GPR_PLATFORM_STRING "aix" #ifndef _ALL_SOURCE #define _ALL_SOURCE #endif #define GPR_AIX 1 #define GPR_CPU_POSIX 1 #define GPR_GCC_ATOMIC 1 #define GPR_GCC_TLS 1 #define GPR_POSIX_LOG 1 #define GPR_POSIX_ENV 1 #define GPR_POSIX_TMPFILE 1 #define GPR_POSIX_STRING 1 #define GPR_POSIX_SUBPROCESS 1 #define GPR_POSIX_SYNC 1 #define GPR_POSIX_TIME 1 #define GPR_HAS_PTHREAD_H 1 #define GPR_GETPID_IN_UNISTD_H 1 #ifdef _LP64 #define GPR_ARCH_64 1 #else /* _LP64 */ #define GPR_ARCH_32 1 #endif /* _LP64 */ #elif defined(__native_client__) #define GPR_PLATFORM_STRING "nacl" #ifndef _BSD_SOURCE #define _BSD_SOURCE #endif #ifndef _DEFAULT_SOURCE #define _DEFAULT_SOURCE #endif #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif #define GPR_NACL 1 #define GPR_CPU_POSIX 1 #define GPR_GCC_ATOMIC 1 #define GPR_GCC_TLS 1 #define GPR_POSIX_LOG 1 #define GPR_POSIX_ENV 1 #define GPR_POSIX_TMPFILE 1 #define GPR_POSIX_STRING 1 #define GPR_POSIX_SUBPROCESS 1 #define GPR_POSIX_SYNC 1 #define GPR_POSIX_TIME 1 #define GPR_HAS_PTHREAD_H 1 #define GPR_GETPID_IN_UNISTD_H 1 #ifdef _LP64 #define GPR_ARCH_64 1 #else /* _LP64 */ #define GPR_ARCH_32 1 #endif /* _LP64 */ #elif defined(__Fuchsia__) #define GPR_FUCHSIA 1 #define GPR_ARCH_64 1 #define GPR_PLATFORM_STRING "fuchsia" #include // Specifying musl libc affects wrap_memcpy.c. It causes memmove() to be // invoked. #define GPR_MUSL_LIBC_COMPAT 1 #define GPR_CPU_POSIX 1 #define GPR_GCC_ATOMIC 1 #define GPR_PTHREAD_TLS 1 #define GPR_POSIX_LOG 1 #define GPR_POSIX_SYNC 1 #define GPR_POSIX_ENV 1 #define GPR_POSIX_TMPFILE 1 #define GPR_POSIX_SUBPROCESS 1 #define GPR_POSIX_SYNC 1 #define GPR_POSIX_STRING 1 #define GPR_POSIX_TIME 1 #define GPR_HAS_PTHREAD_H 1 #define GPR_GETPID_IN_UNISTD_H 1 #else #error "Could not auto-detect platform" #endif #endif /* GPR_NO_AUTODETECT_PLATFORM */ #if defined(GPR_BACKWARDS_COMPATIBILITY_MODE) /* * For backward compatibility mode, reset _FORTIFY_SOURCE to prevent * a library from having non-standard symbols such as __asprintf_chk. * This helps non-glibc systems such as alpine using musl to find symbols. */ #if defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 0 #undef _FORTIFY_SOURCE #define _FORTIFY_SOURCE 0 #endif #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: * TLS isn't supported until NDK r12b per * https://developer.android.com/ndk/downloads/revision_history.html * TLS also does not work with Android NDK if GCC is being used as the compiler * instead of Clang. * 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(GPR_GCC_TLS) #if __has_include() #include #endif /* __has_include() */ #if (defined(__clang__) && defined(__NDK_MAJOR__) && defined(__NDK_MINOR__) && \ ((__NDK_MAJOR__ < 12) || \ ((__NDK_MAJOR__ == 12) && (__NDK_MINOR__ < 1)))) || \ (defined(__GNUC__) && !defined(__clang__)) #undef GPR_GCC_TLS #define GPR_PTHREAD_TLS 1 #endif #endif /*defined(__ANDROID__) && defined(GPR_GCC_TLS) */ #if defined(__has_include) #if __has_include() #define GRPC_HAS_CXX11_ATOMIC #endif /* __has_include() */ #endif /* defined(__has_include) */ #ifndef GPR_PLATFORM_STRING #warning "GPR_PLATFORM_STRING not auto-detected" #define GPR_PLATFORM_STRING "unknown" #endif #ifdef GPR_GCOV #undef GPR_FORBID_UNREACHABLE_CODE #define GPR_FORBID_UNREACHABLE_CODE 1 #endif #ifdef _MSC_VER #if _MSC_VER < 1700 typedef __int8 int8_t; typedef __int16 int16_t; typedef __int32 int32_t; typedef __int64 int64_t; typedef unsigned __int8 uint8_t; typedef unsigned __int16 uint16_t; typedef unsigned __int32 uint32_t; typedef unsigned __int64 uint64_t; #else #include #endif /* _MSC_VER < 1700 */ #else #include #endif /* _MSC_VER */ /* Type of cycle clock implementation */ #ifdef GPR_LINUX /* Disable cycle clock by default. TODO(soheil): enable when we support fallback for unstable cycle clocks. #if defined(__i386__) #define GPR_CYCLE_COUNTER_RDTSC_32 1 #elif defined(__x86_64__) || defined(__amd64__) #define GPR_CYCLE_COUNTER_RDTSC_64 1 #else #define GPR_CYCLE_COUNTER_FALLBACK 1 #endif */ #define GPR_CYCLE_COUNTER_FALLBACK 1 #else #define GPR_CYCLE_COUNTER_FALLBACK 1 #endif /* GPR_LINUX */ /* Cache line alignment */ #ifndef GPR_CACHELINE_SIZE_LOG #if defined(__i386__) || defined(__x86_64__) #define GPR_CACHELINE_SIZE_LOG 6 #endif #ifndef GPR_CACHELINE_SIZE_LOG /* A reasonable default guess. Note that overestimates tend to waste more space, while underestimates tend to waste more time. */ #define GPR_CACHELINE_SIZE_LOG 6 #endif /* GPR_CACHELINE_SIZE_LOG */ #endif /* GPR_CACHELINE_SIZE_LOG */ #define GPR_CACHELINE_SIZE (1 << GPR_CACHELINE_SIZE_LOG) /* scrub GCC_ATOMIC if it's not available on this compiler */ #if defined(GPR_GCC_ATOMIC) && !defined(__ATOMIC_RELAXED) #undef GPR_GCC_ATOMIC #define GPR_GCC_SYNC 1 #endif /* Validate platform combinations */ #if defined(GPR_GCC_ATOMIC) + defined(GPR_GCC_SYNC) + \ defined(GPR_WINDOWS_ATOMIC) != \ 1 #error Must define exactly one of GPR_GCC_ATOMIC, GPR_GCC_SYNC, GPR_WINDOWS_ATOMIC #endif #if defined(GPR_ARCH_32) + defined(GPR_ARCH_64) != 1 #error Must define exactly one of GPR_ARCH_32, GPR_ARCH_64 #endif #if defined(GPR_CPU_LINUX) + defined(GPR_CPU_POSIX) + defined(GPR_WINDOWS) + \ defined(GPR_CPU_IPHONE) + defined(GPR_CPU_CUSTOM) != \ 1 #error Must define exactly one of GPR_CPU_LINUX, GPR_CPU_POSIX, GPR_WINDOWS, GPR_CPU_IPHONE, GPR_CPU_CUSTOM #endif #if defined(GPR_MSVC_TLS) + defined(GPR_GCC_TLS) + defined(GPR_PTHREAD_TLS) + \ defined(GPR_CUSTOM_TLS) != \ 1 #error Must define exactly one of GPR_MSVC_TLS, GPR_GCC_TLS, GPR_PTHREAD_TLS, GPR_CUSTOM_TLS #endif /* maximum alignment needed for any type on this platform, rounded up to a power of two */ #define GPR_MAX_ALIGNMENT 16 #ifndef GRPC_ARES #define GRPC_ARES 1 #endif #ifndef GRPC_IF_NAMETOINDEX #define GRPC_IF_NAMETOINDEX 1 #endif #ifndef GRPC_MUST_USE_RESULT #if defined(__GNUC__) && !defined(__MINGW32__) #define GRPC_MUST_USE_RESULT __attribute__((warn_unused_result)) #define GPR_ALIGN_STRUCT(n) __attribute__((aligned(n))) #else #define GRPC_MUST_USE_RESULT #define GPR_ALIGN_STRUCT(n) #endif #endif #ifndef GRPC_UNUSED #if defined(__GNUC__) && !defined(__MINGW32__) #define GRPC_UNUSED __attribute__((unused)) #else #define GRPC_UNUSED #endif #endif #ifndef GPR_PRINT_FORMAT_CHECK #ifdef __GNUC__ #define GPR_PRINT_FORMAT_CHECK(FORMAT_STR, ARGS) \ __attribute__((format(printf, FORMAT_STR, ARGS))) #else #define GPR_PRINT_FORMAT_CHECK(FORMAT_STR, ARGS) #endif #endif /* GPR_PRINT_FORMAT_CHECK */ #if GPR_FORBID_UNREACHABLE_CODE #define GPR_UNREACHABLE_CODE(STATEMENT) #else #define GPR_UNREACHABLE_CODE(STATEMENT) \ do { \ gpr_log(GPR_ERROR, "Should never reach here."); \ abort(); \ STATEMENT; \ } while (0) #endif /* GPR_FORBID_UNREACHABLE_CODE */ #ifndef GPRAPI #define GPRAPI #endif #ifndef GRPCAPI #define GRPCAPI GPRAPI #endif #ifndef CENSUSAPI #define CENSUSAPI GRPCAPI #endif #ifndef GPR_HAS_ATTRIBUTE #ifdef __has_attribute #define GPR_HAS_ATTRIBUTE(a) __has_attribute(a) #else #define GPR_HAS_ATTRIBUTE(a) 0 #endif #endif /* GPR_HAS_ATTRIBUTE */ #ifndef GPR_HAS_FEATURE #ifdef __has_feature #define GPR_HAS_FEATURE(a) __has_feature(a) #else #define GPR_HAS_FEATURE(a) 0 #endif #endif /* GPR_HAS_FEATURE */ #ifndef GPR_ATTRIBUTE_NOINLINE #if GPR_HAS_ATTRIBUTE(noinline) || (defined(__GNUC__) && !defined(__clang__)) #define GPR_ATTRIBUTE_NOINLINE __attribute__((noinline)) #define GPR_HAS_ATTRIBUTE_NOINLINE 1 #else #define GPR_ATTRIBUTE_NOINLINE #endif #endif /* GPR_ATTRIBUTE_NOINLINE */ #ifndef GPR_ATTRIBUTE_WEAK /* Attribute weak is broken on LLVM/windows: * https://bugs.llvm.org/show_bug.cgi?id=37598 */ #if (GPR_HAS_ATTRIBUTE(weak) || (defined(__GNUC__) && !defined(__clang__))) && \ !(defined(__llvm__) && defined(_WIN32)) #define GPR_ATTRIBUTE_WEAK __attribute__((weak)) #define GPR_HAS_ATTRIBUTE_WEAK 1 #else #define GPR_ATTRIBUTE_WEAK #endif #endif /* GPR_ATTRIBUTE_WEAK */ #ifndef GPR_ATTRIBUTE_NO_TSAN /* (1) */ #if GPR_HAS_FEATURE(thread_sanitizer) #define GPR_ATTRIBUTE_NO_TSAN __attribute__((no_sanitize("thread"))) #endif /* GPR_HAS_FEATURE */ #ifndef GPR_ATTRIBUTE_NO_TSAN /* (2) */ #define GPR_ATTRIBUTE_NO_TSAN #endif /* GPR_ATTRIBUTE_NO_TSAN (2) */ #endif /* GPR_ATTRIBUTE_NO_TSAN (1) */ /* GRPC_TSAN_ENABLED will be defined, when compiled with thread sanitizer. */ #ifndef GRPC_TSAN_SUPPRESSED #if defined(__SANITIZE_THREAD__) #define GRPC_TSAN_ENABLED #elif GPR_HAS_FEATURE(thread_sanitizer) #define GRPC_TSAN_ENABLED #endif #endif /* GRPC_ASAN_ENABLED will be defined, when compiled with address sanitizer. */ #ifndef GRPC_ASAN_SUPPRESSED #if defined(__SANITIZE_ADDRESS__) #define GRPC_ASAN_ENABLED #elif GPR_HAS_FEATURE(address_sanitizer) #define GRPC_ASAN_ENABLED #endif #endif /* GRPC_ALLOW_EXCEPTIONS should be 0 or 1 if exceptions are allowed or not */ #ifndef GRPC_ALLOW_EXCEPTIONS #ifdef GPR_WINDOWS #if defined(_MSC_VER) && defined(_CPPUNWIND) #define GRPC_ALLOW_EXCEPTIONS 1 #elif defined(__EXCEPTIONS) #define GRPC_ALLOW_EXCEPTIONS 1 #else #define GRPC_ALLOW_EXCEPTIONS 0 #endif #else /* GPR_WINDOWS */ #ifdef __EXCEPTIONS #define GRPC_ALLOW_EXCEPTIONS 1 #else /* __EXCEPTIONS */ #define GRPC_ALLOW_EXCEPTIONS 0 #endif /* __EXCEPTIONS */ #endif /* __GPR_WINDOWS */ #endif /* GRPC_ALLOW_EXCEPTIONS */ /* Use GPR_LIKELY only in cases where you are sure that a certain outcome is the * most likely. Ideally, also collect performance numbers to justify the claim. */ #ifdef __GNUC__ #define GPR_LIKELY(x) __builtin_expect((x), 1) #define GPR_UNLIKELY(x) __builtin_expect((x), 0) #else /* __GNUC__ */ #define GPR_LIKELY(x) (x) #define GPR_UNLIKELY(x) (x) #endif /* __GNUC__ */ #ifndef __STDC_FORMAT_MACROS #define __STDC_FORMAT_MACROS #endif #endif /* GRPC_IMPL_CODEGEN_PORT_PLATFORM_H */ grpc-1.30.2/include/grpc/impl/codegen/propagation_bits.h000066400000000000000000000035761370425124100232020ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPC_IMPL_CODEGEN_PROPAGATION_BITS_H #define GRPC_IMPL_CODEGEN_PROPAGATION_BITS_H #include #ifdef __cplusplus extern "C" { #endif /** Propagation bits: this can be bitwise or-ed to form propagation_mask for * grpc_call */ /** Propagate deadline */ #define GRPC_PROPAGATE_DEADLINE ((uint32_t)1) /** Propagate census context */ #define GRPC_PROPAGATE_CENSUS_STATS_CONTEXT ((uint32_t)2) #define GRPC_PROPAGATE_CENSUS_TRACING_CONTEXT ((uint32_t)4) /** Propagate cancellation */ #define GRPC_PROPAGATE_CANCELLATION ((uint32_t)8) /** Default propagation mask: clients of the core API are encouraged to encode deltas from this in their implementations... ie write: GRPC_PROPAGATE_DEFAULTS & ~GRPC_PROPAGATE_DEADLINE to disable deadline propagation. Doing so gives flexibility in the future to define new propagation types that are default inherited or not. */ #define GRPC_PROPAGATE_DEFAULTS \ ((uint32_t)(( \ 0xffff | GRPC_PROPAGATE_DEADLINE | GRPC_PROPAGATE_CENSUS_STATS_CONTEXT | \ GRPC_PROPAGATE_CENSUS_TRACING_CONTEXT | GRPC_PROPAGATE_CANCELLATION))) #ifdef __cplusplus } #endif #endif /* GRPC_IMPL_CODEGEN_PROPAGATION_BITS_H */ grpc-1.30.2/include/grpc/impl/codegen/slice.h000066400000000000000000000112701370425124100207230ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_IMPL_CODEGEN_SLICE_H #define GRPC_IMPL_CODEGEN_SLICE_H #include #include #include typedef struct grpc_slice grpc_slice; /** Slice API A slice represents a contiguous reference counted array of bytes. It is cheap to take references to a slice, and it is cheap to create a slice pointing to a subset of another slice. The data-structure for slices is exposed here to allow non-gpr code to build slices from whatever data they have available. When defining interfaces that handle slices, care should be taken to define reference ownership semantics (who should call unref?) and mutability constraints (is the callee allowed to modify the slice?) */ /* Inlined half of grpc_slice is allowed to expand the size of the overall type by this many bytes */ #define GRPC_SLICE_INLINE_EXTRA_SIZE sizeof(void*) #define GRPC_SLICE_INLINED_SIZE \ (sizeof(size_t) + sizeof(uint8_t*) - 1 + GRPC_SLICE_INLINE_EXTRA_SIZE) struct grpc_slice_refcount; /** A grpc_slice s, if initialized, represents the byte range s.bytes[0..s.length-1]. It can have an associated ref count which has a destruction routine to be run when the ref count reaches zero (see grpc_slice_new() and grp_slice_unref()). Multiple grpc_slice values may share a ref count. If the slice does not have a refcount, it represents an inlined small piece of data that is copied by value. */ struct grpc_slice { struct grpc_slice_refcount* refcount; union grpc_slice_data { struct grpc_slice_refcounted { size_t length; uint8_t* bytes; } refcounted; struct grpc_slice_inlined { uint8_t length; uint8_t bytes[GRPC_SLICE_INLINED_SIZE]; } inlined; } data; }; #define GRPC_SLICE_BUFFER_INLINE_ELEMENTS 8 /** Represents an expandable array of slices, to be interpreted as a single item. */ typedef struct grpc_slice_buffer { /** This is for internal use only. External users (i.e any code outside grpc * core) MUST NOT use this field */ grpc_slice* base_slices; /** slices in the array (Points to the first valid grpc_slice in the array) */ grpc_slice* slices; /** the number of slices in the array */ size_t count; /** the number of slices allocated in the array. External users (i.e any code * outside grpc core) MUST NOT use this field */ size_t capacity; /** the combined length of all slices in the array */ size_t length; /** inlined elements to avoid allocations */ grpc_slice inlined[GRPC_SLICE_BUFFER_INLINE_ELEMENTS]; } grpc_slice_buffer; #define GRPC_SLICE_START_PTR(slice) \ ((slice).refcount ? (slice).data.refcounted.bytes \ : (slice).data.inlined.bytes) #define GRPC_SLICE_LENGTH(slice) \ ((slice).refcount ? (slice).data.refcounted.length \ : (slice).data.inlined.length) #define GRPC_SLICE_SET_LENGTH(slice, newlen) \ ((slice).refcount ? ((slice).data.refcounted.length = (size_t)(newlen)) \ : ((slice).data.inlined.length = (uint8_t)(newlen))) #define GRPC_SLICE_END_PTR(slice) \ GRPC_SLICE_START_PTR(slice) + GRPC_SLICE_LENGTH(slice) #define GRPC_SLICE_IS_EMPTY(slice) (GRPC_SLICE_LENGTH(slice) == 0) #ifdef GRPC_ALLOW_GPR_SLICE_FUNCTIONS /* Duplicate GPR_* definitions */ #define GPR_SLICE_START_PTR(slice) \ ((slice).refcount ? (slice).data.refcounted.bytes \ : (slice).data.inlined.bytes) #define GPR_SLICE_LENGTH(slice) \ ((slice).refcount ? (slice).data.refcounted.length \ : (slice).data.inlined.length) #define GPR_SLICE_SET_LENGTH(slice, newlen) \ ((slice).refcount ? ((slice).data.refcounted.length = (size_t)(newlen)) \ : ((slice).data.inlined.length = (uint8_t)(newlen))) #define GPR_SLICE_END_PTR(slice) \ GRPC_SLICE_START_PTR(slice) + GRPC_SLICE_LENGTH(slice) #define GPR_SLICE_IS_EMPTY(slice) (GRPC_SLICE_LENGTH(slice) == 0) #endif /* GRPC_ALLOW_GPR_SLICE_FUNCTIONS */ #endif /* GRPC_IMPL_CODEGEN_SLICE_H */ grpc-1.30.2/include/grpc/impl/codegen/status.h000066400000000000000000000141601370425124100211500ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_IMPL_CODEGEN_STATUS_H #define GRPC_IMPL_CODEGEN_STATUS_H #ifdef __cplusplus extern "C" { #endif typedef enum { /** Not an error; returned on success */ GRPC_STATUS_OK = 0, /** The operation was cancelled (typically by the caller). */ GRPC_STATUS_CANCELLED = 1, /** Unknown error. An example of where this error may be returned is if a Status value received from another address space belongs to an error-space that is not known in this address space. Also errors raised by APIs that do not return enough error information may be converted to this error. */ GRPC_STATUS_UNKNOWN = 2, /** Client specified an invalid argument. Note that this differs from FAILED_PRECONDITION. INVALID_ARGUMENT indicates arguments that are problematic regardless of the state of the system (e.g., a malformed file name). */ GRPC_STATUS_INVALID_ARGUMENT = 3, /** Deadline expired before operation could complete. For operations that change the state of the system, this error may be returned even if the operation has completed successfully. For example, a successful response from a server could have been delayed long enough for the deadline to expire. */ GRPC_STATUS_DEADLINE_EXCEEDED = 4, /** Some requested entity (e.g., file or directory) was not found. */ GRPC_STATUS_NOT_FOUND = 5, /** Some entity that we attempted to create (e.g., file or directory) already exists. */ GRPC_STATUS_ALREADY_EXISTS = 6, /** The caller does not have permission to execute the specified operation. PERMISSION_DENIED must not be used for rejections caused by exhausting some resource (use RESOURCE_EXHAUSTED instead for those errors). PERMISSION_DENIED must not be used if the caller can not be identified (use UNAUTHENTICATED instead for those errors). */ GRPC_STATUS_PERMISSION_DENIED = 7, /** The request does not have valid authentication credentials for the operation. */ GRPC_STATUS_UNAUTHENTICATED = 16, /** Some resource has been exhausted, perhaps a per-user quota, or perhaps the entire file system is out of space. */ GRPC_STATUS_RESOURCE_EXHAUSTED = 8, /** Operation was rejected because the system is not in a state required for the operation's execution. For example, directory to be deleted may be non-empty, an rmdir operation is applied to a non-directory, etc. A litmus test that may help a service implementor in deciding between FAILED_PRECONDITION, ABORTED, and UNAVAILABLE: (a) Use UNAVAILABLE if the client can retry just the failing call. (b) Use ABORTED if the client should retry at a higher-level (e.g., restarting a read-modify-write sequence). (c) Use FAILED_PRECONDITION if the client should not retry until the system state has been explicitly fixed. E.g., if an "rmdir" fails because the directory is non-empty, FAILED_PRECONDITION should be returned since the client should not retry unless they have first fixed up the directory by deleting files from it. (d) Use FAILED_PRECONDITION if the client performs conditional REST Get/Update/Delete on a resource and the resource on the server does not match the condition. E.g., conflicting read-modify-write on the same resource. */ GRPC_STATUS_FAILED_PRECONDITION = 9, /** The operation was aborted, typically due to a concurrency issue like sequencer check failures, transaction aborts, etc. See litmus test above for deciding between FAILED_PRECONDITION, ABORTED, and UNAVAILABLE. */ GRPC_STATUS_ABORTED = 10, /** Operation was attempted past the valid range. E.g., seeking or reading past end of file. Unlike INVALID_ARGUMENT, this error indicates a problem that may be fixed if the system state changes. For example, a 32-bit file system will generate INVALID_ARGUMENT if asked to read at an offset that is not in the range [0,2^32-1], but it will generate OUT_OF_RANGE if asked to read from an offset past the current file size. There is a fair bit of overlap between FAILED_PRECONDITION and OUT_OF_RANGE. We recommend using OUT_OF_RANGE (the more specific error) when it applies so that callers who are iterating through a space can easily look for an OUT_OF_RANGE error to detect when they are done. */ GRPC_STATUS_OUT_OF_RANGE = 11, /** Operation is not implemented or not supported/enabled in this service. */ GRPC_STATUS_UNIMPLEMENTED = 12, /** Internal errors. Means some invariants expected by underlying system has been broken. If you see one of these errors, something is very broken. */ GRPC_STATUS_INTERNAL = 13, /** The service is currently unavailable. This is a most likely a transient condition and may be corrected by retrying with a backoff. Note that it is not always safe to retry non-idempotent operations. WARNING: Although data MIGHT not have been transmitted when this status occurs, there is NOT A GUARANTEE that the server has not seen anything. So in general it is unsafe to retry on this status code if the call is non-idempotent. See litmus test above for deciding between FAILED_PRECONDITION, ABORTED, and UNAVAILABLE. */ GRPC_STATUS_UNAVAILABLE = 14, /** Unrecoverable data loss or corruption. */ GRPC_STATUS_DATA_LOSS = 15, /** Force users to include a default branch: */ GRPC_STATUS__DO_NOT_USE = -1 } grpc_status_code; #ifdef __cplusplus } #endif #endif /* GRPC_IMPL_CODEGEN_STATUS_H */ grpc-1.30.2/include/grpc/impl/codegen/sync.h000066400000000000000000000037451370425124100206100ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPC_IMPL_CODEGEN_SYNC_H #define GRPC_IMPL_CODEGEN_SYNC_H /** Synchronization primitives for GPR. The type gpr_mu provides a non-reentrant mutex (lock). The type gpr_cv provides a condition variable. The type gpr_once provides for one-time initialization. The type gpr_event provides one-time-setting, reading, and waiting of a void*, with memory barriers. The type gpr_refcount provides an object reference counter, with memory barriers suitable to control object lifetimes. The type gpr_stats_counter provides an atomic statistics counter. It provides no memory barriers. */ #ifdef __cplusplus extern "C" { #endif /* Platform-specific type declarations of gpr_mu and gpr_cv. */ #include #include #if defined(GPR_CUSTOM_SYNC) #include #elif defined(GPR_ABSEIL_SYNC) #include #elif defined(GPR_POSIX_SYNC) #include #elif defined(GPR_WINDOWS) #include #else #error Unable to determine platform for sync #endif #ifdef __cplusplus } #endif #endif /* GRPC_IMPL_CODEGEN_SYNC_H */ grpc-1.30.2/include/grpc/impl/codegen/sync_abseil.h000066400000000000000000000016731370425124100221250ustar00rootroot00000000000000/* * * Copyright 2020 gRPC 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 * * 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. * */ #ifndef GRPC_IMPL_CODEGEN_SYNC_ABSEIL_H #define GRPC_IMPL_CODEGEN_SYNC_ABSEIL_H #include #include #ifdef GPR_ABSEIL_SYNC typedef intptr_t gpr_mu; typedef intptr_t gpr_cv; typedef int32_t gpr_once; #define GPR_ONCE_INIT 0 #endif #endif /* GRPC_IMPL_CODEGEN_SYNC_ABSEIL_H */ grpc-1.30.2/include/grpc/impl/codegen/sync_custom.h000066400000000000000000000020721370425124100221720ustar00rootroot00000000000000/* * * Copyright 2017 gRPC 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 * * 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. * */ #ifndef GRPC_IMPL_CODEGEN_SYNC_CUSTOM_H #define GRPC_IMPL_CODEGEN_SYNC_CUSTOM_H #include #include /* Users defining GPR_CUSTOM_SYNC need to define the following macros. */ #ifdef GPR_CUSTOM_SYNC typedef GPR_CUSTOM_MU_TYPE gpr_mu; typedef GPR_CUSTOM_CV_TYPE gpr_cv; typedef GPR_CUSTOM_ONCE_TYPE gpr_once; #define GPR_ONCE_INIT GPR_CUSTOM_ONCE_INIT #endif #endif /* GRPC_IMPL_CODEGEN_SYNC_CUSTOM_H */ grpc-1.30.2/include/grpc/impl/codegen/sync_generic.h000066400000000000000000000021661370425124100223000ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_IMPL_CODEGEN_SYNC_GENERIC_H #define GRPC_IMPL_CODEGEN_SYNC_GENERIC_H /* Generic type definitions for gpr_sync. */ #include #include /* gpr_event */ typedef struct { gpr_atm state; } gpr_event; #define GPR_EVENT_INIT \ { 0 } /* gpr_refcount */ typedef struct { gpr_atm count; } gpr_refcount; /* gpr_stats_counter */ typedef struct { gpr_atm value; } gpr_stats_counter; #define GPR_STATS_INIT \ { 0 } #endif /* GRPC_IMPL_CODEGEN_SYNC_GENERIC_H */ grpc-1.30.2/include/grpc/impl/codegen/sync_posix.h000066400000000000000000000027161370425124100220270ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_IMPL_CODEGEN_SYNC_POSIX_H #define GRPC_IMPL_CODEGEN_SYNC_POSIX_H #include #include #include #ifdef GRPC_ASAN_ENABLED /* The member |leak_checker| is used to check whether there is a memory leak * caused by upper layer logic that's missing the |gpr_xx_destroy| call * to the object before freeing it. * This issue was reported at https://github.com/grpc/grpc/issues/17563 * and discussed at https://github.com/grpc/grpc/pull/17586 */ typedef struct { pthread_mutex_t mutex; int* leak_checker; } gpr_mu; typedef struct { pthread_cond_t cond_var; int* leak_checker; } gpr_cv; #else typedef pthread_mutex_t gpr_mu; typedef pthread_cond_t gpr_cv; #endif typedef pthread_once_t gpr_once; #define GPR_ONCE_INIT PTHREAD_ONCE_INIT #endif /* GRPC_IMPL_CODEGEN_SYNC_POSIX_H */ grpc-1.30.2/include/grpc/impl/codegen/sync_windows.h000066400000000000000000000020261370425124100223510ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_IMPL_CODEGEN_SYNC_WINDOWS_H #define GRPC_IMPL_CODEGEN_SYNC_WINDOWS_H #include #include typedef struct { CRITICAL_SECTION cs; /* Not an SRWLock until Vista is unsupported */ int locked; } gpr_mu; typedef CONDITION_VARIABLE gpr_cv; typedef INIT_ONCE gpr_once; #define GPR_ONCE_INIT INIT_ONCE_STATIC_INIT #endif /* GRPC_IMPL_CODEGEN_SYNC_WINDOWS_H */ grpc-1.30.2/include/grpc/load_reporting.h000066400000000000000000000027471370425124100203000ustar00rootroot00000000000000/* * * Copyright 2017 gRPC 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 * * 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. * */ #ifndef GRPC_LOAD_REPORTING_H #define GRPC_LOAD_REPORTING_H #include #ifdef __cplusplus extern "C" { #endif /** Metadata key for the gRPC LB load balancer token. * * The value corresponding to this key is an opaque token that is given to the * frontend as part of each pick; the frontend sends this token to the backend * in each request it sends when using that pick. The token is used by the * backend to verify the request and to allow the backend to report load to the * gRPC LB system. */ #define GRPC_LB_TOKEN_MD_KEY "lb-token" /** Metadata key for gRPC LB cost reporting. * * The value corresponding to this key is an opaque binary blob reported by the * backend as part of its trailing metadata containing cost information for the * call. */ #define GRPC_LB_COST_MD_KEY "lb-cost-bin" #ifdef __cplusplus } #endif #endif /* GRPC_LOAD_REPORTING_H */ grpc-1.30.2/include/grpc/module.modulemap000066400000000000000000000036441370425124100203060ustar00rootroot00000000000000 framework module grpc { umbrella header "grpc.h" header "impl/codegen/atm.h" header "impl/codegen/byte_buffer.h" header "impl/codegen/byte_buffer_reader.h" header "impl/codegen/compression_types.h" header "impl/codegen/connectivity_state.h" header "impl/codegen/fork.h" header "impl/codegen/gpr_slice.h" header "impl/codegen/gpr_types.h" header "impl/codegen/grpc_types.h" header "impl/codegen/log.h" header "impl/codegen/port_platform.h" header "impl/codegen/propagation_bits.h" header "impl/codegen/slice.h" header "impl/codegen/status.h" header "impl/codegen/sync.h" header "impl/codegen/sync_abseil.h" header "impl/codegen/sync_generic.h" header "support/alloc.h" header "support/atm.h" header "support/cpu.h" header "support/log.h" header "support/log_windows.h" header "support/port_platform.h" header "support/string_util.h" header "support/sync.h" header "support/sync_abseil.h" header "support/sync_generic.h" header "support/thd_id.h" header "support/time.h" header "byte_buffer.h" header "byte_buffer_reader.h" header "census.h" header "compression.h" header "fork.h" header "grpc.h" header "grpc_posix.h" header "grpc_security.h" header "grpc_security_constants.h" header "load_reporting.h" header "slice.h" header "slice_buffer.h" header "status.h" header "support/workaround_list.h" textual header "impl/codegen/atm_gcc_atomic.h" textual header "impl/codegen/atm_gcc_sync.h" textual header "impl/codegen/atm_windows.h" textual header "impl/codegen/sync_custom.h" textual header "impl/codegen/sync_posix.h" textual header "impl/codegen/sync_windows.h" textual header "support/atm_gcc_atomic.h" textual header "support/atm_gcc_sync.h" textual header "support/atm_windows.h" textual header "support/sync_custom.h" textual header "support/sync_posix.h" textual header "support/sync_windows.h" export * module * { export * } } grpc-1.30.2/include/grpc/slice.h000066400000000000000000000154561370425124100163700ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_SLICE_H #define GRPC_SLICE_H #include #include #include #ifdef __cplusplus extern "C" { #endif /** Increment the refcount of s. Requires slice is initialized. Returns s. */ GPRAPI grpc_slice grpc_slice_ref(grpc_slice s); /** Decrement the ref count of s. If the ref count of s reaches zero, all slices sharing the ref count are destroyed, and considered no longer initialized. If s is ultimately derived from a call to grpc_slice_new(start, len, dest) where dest!=NULL , then (*dest)(start) is called, else if s is ultimately derived from a call to grpc_slice_new_with_len(start, len, dest) where dest!=NULL , then (*dest)(start, len). Requires s initialized. */ GPRAPI void grpc_slice_unref(grpc_slice s); /** Copy slice - create a new slice that contains the same data as s */ GPRAPI grpc_slice grpc_slice_copy(grpc_slice s); /** Create a slice pointing at some data. Calls malloc to allocate a refcount for the object, and arranges that destroy will be called with the pointer passed in at destruction. */ GPRAPI grpc_slice grpc_slice_new(void* p, size_t len, void (*destroy)(void*)); /** Equivalent to grpc_slice_new, but with a separate pointer that is passed to the destroy function. This function can be useful when the data is part of a larger structure that must be destroyed when the data is no longer needed. */ GPRAPI grpc_slice grpc_slice_new_with_user_data(void* p, size_t len, void (*destroy)(void*), void* user_data); /** Equivalent to grpc_slice_new, but with a two argument destroy function that also takes the slice length. */ GPRAPI grpc_slice grpc_slice_new_with_len(void* p, size_t len, void (*destroy)(void*, size_t)); /** Equivalent to grpc_slice_new(malloc(len), len, free), but saves one malloc() call. Aborts if malloc() fails. */ GPRAPI grpc_slice grpc_slice_malloc(size_t length); GPRAPI grpc_slice grpc_slice_malloc_large(size_t length); #define GRPC_SLICE_MALLOC(len) grpc_slice_malloc(len) /** Intern a slice: The return value for two invocations of this function with the same sequence of bytes is a slice which points to the same memory. */ GPRAPI grpc_slice grpc_slice_intern(grpc_slice slice); /** Create a slice by copying a string. Does not preserve null terminators. Equivalent to: size_t len = strlen(source); grpc_slice slice = grpc_slice_malloc(len); memcpy(slice->data, source, len); */ GPRAPI grpc_slice grpc_slice_from_copied_string(const char* source); /** Create a slice by copying a buffer. Equivalent to: grpc_slice slice = grpc_slice_malloc(len); memcpy(slice->data, source, len); */ GPRAPI grpc_slice grpc_slice_from_copied_buffer(const char* source, size_t len); /** Create a slice pointing to constant memory */ GPRAPI grpc_slice grpc_slice_from_static_string(const char* source); /** Create a slice pointing to constant memory */ GPRAPI grpc_slice grpc_slice_from_static_buffer(const void* source, size_t len); /** Return a result slice derived from s, which shares a ref count with \a s, where result.data==s.data+begin, and result.length==end-begin. The ref count of \a s is increased by one. Do not assign result back to \a s. Requires s initialized, begin <= end, begin <= s.length, and end <= source->length. */ GPRAPI grpc_slice grpc_slice_sub(grpc_slice s, size_t begin, size_t end); /** The same as grpc_slice_sub, but without altering the ref count */ GPRAPI grpc_slice grpc_slice_sub_no_ref(grpc_slice s, size_t begin, size_t end); /** Splits s into two: modifies s to be s[0:split], and returns a new slice, sharing a refcount with s, that contains s[split:s.length]. Requires s initialized, split <= s.length */ GPRAPI grpc_slice grpc_slice_split_tail(grpc_slice* s, size_t split); typedef enum { GRPC_SLICE_REF_TAIL = 1, GRPC_SLICE_REF_HEAD = 2, GRPC_SLICE_REF_BOTH = 1 + 2 } grpc_slice_ref_whom; /** The same as grpc_slice_split_tail, but with an option to skip altering * refcounts (grpc_slice_split_tail_maybe_ref(..., true) is equivalent to * grpc_slice_split_tail(...)) */ GPRAPI grpc_slice grpc_slice_split_tail_maybe_ref(grpc_slice* s, size_t split, grpc_slice_ref_whom ref_whom); /** Splits s into two: modifies s to be s[split:s.length], and returns a new slice, sharing a refcount with s, that contains s[0:split]. Requires s initialized, split <= s.length */ GPRAPI grpc_slice grpc_slice_split_head(grpc_slice* s, size_t split); GPRAPI grpc_slice grpc_empty_slice(void); GPRAPI uint32_t grpc_slice_default_hash_impl(grpc_slice s); GPRAPI int grpc_slice_default_eq_impl(grpc_slice a, grpc_slice b); GPRAPI int grpc_slice_eq(grpc_slice a, grpc_slice b); /** Returns <0 if a < b, ==0 if a == b, >0 if a > b The order is arbitrary, and is not guaranteed to be stable across different versions of the API. */ GPRAPI int grpc_slice_cmp(grpc_slice a, grpc_slice b); GPRAPI int grpc_slice_str_cmp(grpc_slice a, const char* b); /** return non-zero if the first blen bytes of a are equal to b */ GPRAPI int grpc_slice_buf_start_eq(grpc_slice a, const void* b, size_t blen); /** return the index of the last instance of \a c in \a s, or -1 if not found */ GPRAPI int grpc_slice_rchr(grpc_slice s, char c); GPRAPI int grpc_slice_chr(grpc_slice s, char c); /** return the index of the first occurrence of \a needle in \a haystack, or -1 if it's not found */ GPRAPI int grpc_slice_slice(grpc_slice haystack, grpc_slice needle); GPRAPI uint32_t grpc_slice_hash(grpc_slice s); /** Do two slices point at the same memory, with the same length If a or b is inlined, actually compares data */ GPRAPI int grpc_slice_is_equivalent(grpc_slice a, grpc_slice b); /** Return a slice pointing to newly allocated memory that has the same contents * as \a s */ GPRAPI grpc_slice grpc_slice_dup(grpc_slice a); /** Return a copy of slice as a C string. Offers no protection against embedded NULL's. Returned string must be freed with gpr_free. */ GPRAPI char* grpc_slice_to_c_string(grpc_slice s); #ifdef __cplusplus } #endif #endif /* GRPC_SLICE_H */ grpc-1.30.2/include/grpc/slice_buffer.h000066400000000000000000000075071370425124100177170ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_SLICE_BUFFER_H #define GRPC_SLICE_BUFFER_H #include #include #ifdef __cplusplus extern "C" { #endif /** initialize a slice buffer */ GPRAPI void grpc_slice_buffer_init(grpc_slice_buffer* sb); /** destroy a slice buffer - unrefs any held elements */ GPRAPI void grpc_slice_buffer_destroy(grpc_slice_buffer* sb); /** Add an element to a slice buffer - takes ownership of the slice. This function is allowed to concatenate the passed in slice to the end of some other slice if desired by the slice buffer. */ GPRAPI void grpc_slice_buffer_add(grpc_slice_buffer* sb, grpc_slice slice); /** add an element to a slice buffer - takes ownership of the slice and returns the index of the slice. Guarantees that the slice will not be concatenated at the end of another slice (i.e. the data for this slice will begin at the first byte of the slice at the returned index in sb->slices) The implementation MAY decide to concatenate data at the end of a small slice added in this fashion. */ GPRAPI size_t grpc_slice_buffer_add_indexed(grpc_slice_buffer* sb, grpc_slice slice); GPRAPI void grpc_slice_buffer_addn(grpc_slice_buffer* sb, grpc_slice* slices, size_t n); /** add a very small (less than 8 bytes) amount of data to the end of a slice buffer: returns a pointer into which to add the data */ GPRAPI uint8_t* grpc_slice_buffer_tiny_add(grpc_slice_buffer* sb, size_t len); /** pop the last buffer, but don't unref it */ GPRAPI void grpc_slice_buffer_pop(grpc_slice_buffer* sb); /** clear a slice buffer, unref all elements */ GPRAPI void grpc_slice_buffer_reset_and_unref(grpc_slice_buffer* sb); /** swap the contents of two slice buffers */ GPRAPI void grpc_slice_buffer_swap(grpc_slice_buffer* a, grpc_slice_buffer* b); /** move all of the elements of src into dst */ GPRAPI void grpc_slice_buffer_move_into(grpc_slice_buffer* src, grpc_slice_buffer* dst); /** remove n bytes from the end of a slice buffer */ GPRAPI void grpc_slice_buffer_trim_end(grpc_slice_buffer* src, size_t n, grpc_slice_buffer* garbage); /** move the first n bytes of src into dst */ GPRAPI void grpc_slice_buffer_move_first(grpc_slice_buffer* src, size_t n, grpc_slice_buffer* dst); /** move the first n bytes of src into dst without adding references */ GPRAPI void grpc_slice_buffer_move_first_no_ref(grpc_slice_buffer* src, size_t n, grpc_slice_buffer* dst); /** move the first n bytes of src into dst (copying them) */ GPRAPI void grpc_slice_buffer_move_first_into_buffer(grpc_slice_buffer* src, size_t n, void* dst); /** take the first slice in the slice buffer */ GPRAPI grpc_slice grpc_slice_buffer_take_first(grpc_slice_buffer* src); /** undo the above with (a possibly different) \a slice */ GPRAPI void grpc_slice_buffer_undo_take_first(grpc_slice_buffer* src, grpc_slice slice); #ifdef __cplusplus } #endif #endif /* GRPC_SLICE_BUFFER_H */ grpc-1.30.2/include/grpc/status.h000066400000000000000000000013641370425124100166050ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_STATUS_H #define GRPC_STATUS_H #include #include #endif /* GRPC_STATUS_H */ grpc-1.30.2/include/grpc/support/000077500000000000000000000000001370425124100166215ustar00rootroot00000000000000grpc-1.30.2/include/grpc/support/alloc.h000066400000000000000000000027771370425124100201010ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_SUPPORT_ALLOC_H #define GRPC_SUPPORT_ALLOC_H #include #include #ifdef __cplusplus extern "C" { #endif /** malloc. * If size==0, always returns NULL. Otherwise this function never returns NULL. * The pointer returned is suitably aligned for any kind of variable it could * contain. */ GPRAPI void* gpr_malloc(size_t size); /** like malloc, but zero all bytes before returning them */ GPRAPI void* gpr_zalloc(size_t size); /** free */ GPRAPI void gpr_free(void* ptr); /** realloc, never returns NULL */ GPRAPI void* gpr_realloc(void* p, size_t size); /** aligned malloc, never returns NULL, will align to alignment, which * must be a power of 2. */ GPRAPI void* gpr_malloc_aligned(size_t size, size_t alignment); /** free memory allocated by gpr_malloc_aligned */ GPRAPI void gpr_free_aligned(void* ptr); #ifdef __cplusplus } #endif #endif /* GRPC_SUPPORT_ALLOC_H */ grpc-1.30.2/include/grpc/support/atm.h000066400000000000000000000014001370425124100175460ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_SUPPORT_ATM_H #define GRPC_SUPPORT_ATM_H #include #include #endif /* GRPC_SUPPORT_ATM_H */ grpc-1.30.2/include/grpc/support/atm_gcc_atomic.h000066400000000000000000000014541370425124100217270ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_SUPPORT_ATM_GCC_ATOMIC_H #define GRPC_SUPPORT_ATM_GCC_ATOMIC_H #include #include #endif /* GRPC_SUPPORT_ATM_GCC_ATOMIC_H */ grpc-1.30.2/include/grpc/support/atm_gcc_sync.h000066400000000000000000000014441370425124100214260ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_SUPPORT_ATM_GCC_SYNC_H #define GRPC_SUPPORT_ATM_GCC_SYNC_H #include #include #endif /* GRPC_SUPPORT_ATM_GCC_SYNC_H */ grpc-1.30.2/include/grpc/support/atm_windows.h000066400000000000000000000014401370425124100213240ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_SUPPORT_ATM_WINDOWS_H #define GRPC_SUPPORT_ATM_WINDOWS_H #include #include #endif /* GRPC_SUPPORT_ATM_WINDOWS_H */ grpc-1.30.2/include/grpc/support/cpu.h000066400000000000000000000024731370425124100175670ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_SUPPORT_CPU_H #define GRPC_SUPPORT_CPU_H #include #ifdef __cplusplus extern "C" { #endif /** Interface providing CPU information for currently running system */ /** Return the number of CPU cores on the current system. Will return 0 if the information is not available. */ GPRAPI unsigned gpr_cpu_num_cores(void); /** Return the CPU on which the current thread is executing; N.B. This should be considered advisory only - it is possible that the thread is switched to a different CPU at any time. Returns a value in range [0, gpr_cpu_num_cores() - 1] */ GPRAPI unsigned gpr_cpu_current_cpu(void); #ifdef __cplusplus } // extern "C" #endif #endif /* GRPC_SUPPORT_CPU_H */ grpc-1.30.2/include/grpc/support/log.h000066400000000000000000000014001370425124100175460ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_SUPPORT_LOG_H #define GRPC_SUPPORT_LOG_H #include #include #endif /* GRPC_SUPPORT_LOG_H */ grpc-1.30.2/include/grpc/support/log_windows.h000066400000000000000000000020531370425124100213250ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_SUPPORT_LOG_WINDOWS_H #define GRPC_SUPPORT_LOG_WINDOWS_H #include #ifdef __cplusplus extern "C" { #endif /** Returns a string allocated with gpr_malloc that contains a UTF-8 * formatted error message, corresponding to the error messageid. * Use in conjunction with GetLastError() et al. */ GPRAPI char* gpr_format_message(int messageid); #ifdef __cplusplus } #endif #endif /* GRPC_SUPPORT_LOG_WINDOWS_H */ grpc-1.30.2/include/grpc/support/port_platform.h000066400000000000000000000013771370425124100216720ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_SUPPORT_PORT_PLATFORM_H #define GRPC_SUPPORT_PORT_PLATFORM_H #include #endif /* GRPC_SUPPORT_PORT_PLATFORM_H */ grpc-1.30.2/include/grpc/support/string_util.h000066400000000000000000000027701370425124100213430ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_SUPPORT_STRING_UTIL_H #define GRPC_SUPPORT_STRING_UTIL_H #include #include #ifdef __cplusplus extern "C" { #endif /** String utility functions */ /** Returns a copy of src that can be passed to gpr_free(). If allocation fails or if src is NULL, returns NULL. */ GPRAPI char* gpr_strdup(const char* src); /** printf to a newly-allocated string. The set of supported formats may vary between platforms. On success, returns the number of bytes printed (excluding the final '\0'), and *strp points to a string which must later be destroyed with gpr_free(). On error, returns -1 and sets *strp to NULL. If the format string is bad, the result is undefined. */ GPRAPI int gpr_asprintf(char** strp, const char* format, ...) GPR_PRINT_FORMAT_CHECK(2, 3); #ifdef __cplusplus } #endif #endif /* GRPC_SUPPORT_STRING_UTIL_H */ grpc-1.30.2/include/grpc/support/sync.h000066400000000000000000000253621370425124100177560ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_SUPPORT_SYNC_H #define GRPC_SUPPORT_SYNC_H #include #include /* for gpr_timespec */ #include #ifdef __cplusplus extern "C" { #endif /** --- Mutex interface --- At most one thread may hold an exclusive lock on a mutex at any given time. Actions taken by a thread that holds a mutex exclusively happen after actions taken by all previous holders of the mutex. Variables of type gpr_mu are uninitialized when first declared. */ /** Initialize *mu. Requires: *mu uninitialized. */ GPRAPI void gpr_mu_init(gpr_mu* mu); /** Cause *mu no longer to be initialized, freeing any memory in use. Requires: *mu initialized; no other concurrent operation on *mu. */ GPRAPI void gpr_mu_destroy(gpr_mu* mu); /** Wait until no thread has a lock on *mu, cause the calling thread to own an exclusive lock on *mu, then return. May block indefinitely or crash if the calling thread has a lock on *mu. Requires: *mu initialized. */ GPRAPI void gpr_mu_lock(gpr_mu* mu); /** Release an exclusive lock on *mu held by the calling thread. Requires: *mu initialized; the calling thread holds an exclusive lock on *mu. */ GPRAPI void gpr_mu_unlock(gpr_mu* mu); /** Without blocking, attempt to acquire an exclusive lock on *mu for the calling thread, then return non-zero iff success. Fail, if any thread holds the lock; succeeds with high probability if no thread holds the lock. Requires: *mu initialized. */ GPRAPI int gpr_mu_trylock(gpr_mu* mu); /** --- Condition variable interface --- A while-loop should be used with gpr_cv_wait() when waiting for conditions to become true. See the example below. Variables of type gpr_cv are uninitialized when first declared. */ /** Initialize *cv. Requires: *cv uninitialized. */ GPRAPI void gpr_cv_init(gpr_cv* cv); /** Cause *cv no longer to be initialized, freeing any memory in use. Requires: *cv initialized; no other concurrent operation on *cv.*/ GPRAPI void gpr_cv_destroy(gpr_cv* cv); /** Atomically release *mu and wait on *cv. When the calling thread is woken from *cv or the deadline abs_deadline is exceeded, execute gpr_mu_lock(mu) and return whether the deadline was exceeded. Use abs_deadline==gpr_inf_future for no deadline. abs_deadline can be either an absolute deadline, or a GPR_TIMESPAN. May return even when not woken explicitly. Requires: *mu and *cv initialized; the calling thread holds an exclusive lock on *mu. */ GPRAPI int gpr_cv_wait(gpr_cv* cv, gpr_mu* mu, gpr_timespec abs_deadline); /** If any threads are waiting on *cv, wake at least one. Clients may treat this as an optimization of gpr_cv_broadcast() for use in the case where waking more than one waiter is not useful. Requires: *cv initialized. */ GPRAPI void gpr_cv_signal(gpr_cv* cv); /** Wake all threads waiting on *cv. Requires: *cv initialized. */ GPRAPI void gpr_cv_broadcast(gpr_cv* cv); /** --- One-time initialization --- gpr_once must be declared with static storage class, and initialized with GPR_ONCE_INIT. e.g., static gpr_once once_var = GPR_ONCE_INIT; */ /** Ensure that (*init_routine)() has been called exactly once (for the specified gpr_once instance) and then return. If multiple threads call gpr_once() on the same gpr_once instance, one of them will call (*init_routine)(), and the others will block until that call finishes.*/ GPRAPI void gpr_once_init(gpr_once* once, void (*init_routine)(void)); /** --- One-time event notification --- These operations act on a gpr_event, which should be initialized with gpr_ev_init(), or with GPR_EVENT_INIT if static, e.g., static gpr_event event_var = GPR_EVENT_INIT; It requires no destruction. */ /** Initialize *ev. */ GPRAPI void gpr_event_init(gpr_event* ev); /** Set *ev so that gpr_event_get() and gpr_event_wait() will return value. Requires: *ev initialized; value != NULL; no prior or concurrent calls to gpr_event_set(ev, ...) since initialization. */ GPRAPI void gpr_event_set(gpr_event* ev, void* value); /** Return the value set by gpr_event_set(ev, ...), or NULL if no such call has completed. If the result is non-NULL, all operations that occurred prior to the gpr_event_set(ev, ...) set will be visible after this call returns. Requires: *ev initialized. This operation is faster than acquiring a mutex on most platforms. */ GPRAPI void* gpr_event_get(gpr_event* ev); /** Wait until *ev is set by gpr_event_set(ev, ...), or abs_deadline is exceeded, then return gpr_event_get(ev). Requires: *ev initialized. Use abs_deadline==gpr_inf_future for no deadline. When the event has been signalled before the call, this operation is faster than acquiring a mutex on most platforms. */ GPRAPI void* gpr_event_wait(gpr_event* ev, gpr_timespec abs_deadline); /** --- Reference counting --- These calls act on the type gpr_refcount. It requires no destruction. */ /** Initialize *r to value n. */ GPRAPI void gpr_ref_init(gpr_refcount* r, int n); /** Increment the reference count *r. Requires *r initialized. */ GPRAPI void gpr_ref(gpr_refcount* r); /** Increment the reference count *r. Requires *r initialized. Crashes if refcount is zero */ GPRAPI void gpr_ref_non_zero(gpr_refcount* r); /** Increment the reference count *r by n. Requires *r initialized, n > 0. */ GPRAPI void gpr_refn(gpr_refcount* r, int n); /** Decrement the reference count *r and return non-zero iff it has reached zero. . Requires *r initialized. */ GPRAPI int gpr_unref(gpr_refcount* r); /** Return non-zero iff the reference count of *r is one, and thus is owned by exactly one object. */ GPRAPI int gpr_ref_is_unique(gpr_refcount* r); /** --- Stats counters --- These calls act on the integral type gpr_stats_counter. It requires no destruction. Static instances may be initialized with gpr_stats_counter c = GPR_STATS_INIT; Beware: These operations do not imply memory barriers. Do not use them to synchronize other events. */ /** Initialize *c to the value n. */ GPRAPI void gpr_stats_init(gpr_stats_counter* c, intptr_t n); /** *c += inc. Requires: *c initialized. */ GPRAPI void gpr_stats_inc(gpr_stats_counter* c, intptr_t inc); /** Return *c. Requires: *c initialized. */ GPRAPI intptr_t gpr_stats_read(const gpr_stats_counter* c); /** ==================Example use of interface=================== A producer-consumer queue of up to N integers, illustrating the use of the calls in this interface. */ #if 0 #define N 4 typedef struct queue { gpr_cv non_empty; /* Signalled when length becomes non-zero. */ gpr_cv non_full; /* Signalled when length becomes non-N. */ gpr_mu mu; /* Protects all fields below. (That is, except during initialization or destruction, the fields below should be accessed only by a thread that holds mu.) */ int head; /* Index of head of queue 0..N-1. */ int length; /* Number of valid elements in queue 0..N. */ int elem[N]; /* elem[head .. head+length-1] are queue elements. */ } queue; /* Initialize *q. */ void queue_init(queue *q) { gpr_mu_init(&q->mu); gpr_cv_init(&q->non_empty); gpr_cv_init(&q->non_full); q->head = 0; q->length = 0; } /* Free storage associated with *q. */ void queue_destroy(queue *q) { gpr_mu_destroy(&q->mu); gpr_cv_destroy(&q->non_empty); gpr_cv_destroy(&q->non_full); } /* Wait until there is room in *q, then append x to *q. */ void queue_append(queue *q, int x) { gpr_mu_lock(&q->mu); /* To wait for a predicate without a deadline, loop on the negation of the predicate, and use gpr_cv_wait(..., gpr_inf_future) inside the loop to release the lock, wait, and reacquire on each iteration. Code that makes the condition true should use gpr_cv_broadcast() on the corresponding condition variable. The predicate must be on state protected by the lock. */ while (q->length == N) { gpr_cv_wait(&q->non_full, &q->mu, gpr_inf_future); } if (q->length == 0) { /* Wake threads blocked in queue_remove(). */ /* It's normal to use gpr_cv_broadcast() or gpr_signal() while holding the lock. */ gpr_cv_broadcast(&q->non_empty); } q->elem[(q->head + q->length) % N] = x; q->length++; gpr_mu_unlock(&q->mu); } /* If it can be done without blocking, append x to *q and return non-zero. Otherwise return 0. */ int queue_try_append(queue *q, int x) { int result = 0; if (gpr_mu_trylock(&q->mu)) { if (q->length != N) { if (q->length == 0) { /* Wake threads blocked in queue_remove(). */ gpr_cv_broadcast(&q->non_empty); } q->elem[(q->head + q->length) % N] = x; q->length++; result = 1; } gpr_mu_unlock(&q->mu); } return result; } /* Wait until the *q is non-empty or deadline abs_deadline passes. If the queue is non-empty, remove its head entry, place it in *head, and return non-zero. Otherwise return 0. */ int queue_remove(queue *q, int *head, gpr_timespec abs_deadline) { int result = 0; gpr_mu_lock(&q->mu); /* To wait for a predicate with a deadline, loop on the negation of the predicate or until gpr_cv_wait() returns true. Code that makes the condition true should use gpr_cv_broadcast() on the corresponding condition variable. The predicate must be on state protected by the lock. */ while (q->length == 0 && !gpr_cv_wait(&q->non_empty, &q->mu, abs_deadline)) { } if (q->length != 0) { /* Queue is non-empty. */ result = 1; if (q->length == N) { /* Wake threads blocked in queue_append(). */ gpr_cv_broadcast(&q->non_full); } *head = q->elem[q->head]; q->head = (q->head + 1) % N; q->length--; } /* else deadline exceeded */ gpr_mu_unlock(&q->mu); return result; } #endif /* 0 */ #ifdef __cplusplus } // extern "C" #endif #endif /* GRPC_SUPPORT_SYNC_H */ grpc-1.30.2/include/grpc/support/sync_abseil.h000066400000000000000000000014401370425124100212640ustar00rootroot00000000000000/* * * Copyright 2020 gRPC 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 * * 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. * */ #ifndef GRPC_SUPPORT_SYNC_ABSEIL_H #define GRPC_SUPPORT_SYNC_ABSEIL_H #include #include #endif /* GRPC_SUPPORT_SYNC_ABSEIL_H */ grpc-1.30.2/include/grpc/support/sync_custom.h000066400000000000000000000014401370425124100213370ustar00rootroot00000000000000/* * * Copyright 2017 gRPC 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 * * 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. * */ #ifndef GRPC_SUPPORT_SYNC_CUSTOM_H #define GRPC_SUPPORT_SYNC_CUSTOM_H #include #include #endif /* GRPC_SUPPORT_SYNC_CUSTOM_H */ grpc-1.30.2/include/grpc/support/sync_generic.h000066400000000000000000000014441370425124100214450ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_SUPPORT_SYNC_GENERIC_H #define GRPC_SUPPORT_SYNC_GENERIC_H #include #include #endif /* GRPC_SUPPORT_SYNC_GENERIC_H */ grpc-1.30.2/include/grpc/support/sync_posix.h000066400000000000000000000014341370425124100211720ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_SUPPORT_SYNC_POSIX_H #define GRPC_SUPPORT_SYNC_POSIX_H #include #include #endif /* GRPC_SUPPORT_SYNC_POSIX_H */ grpc-1.30.2/include/grpc/support/sync_windows.h000066400000000000000000000014441370425124100215230ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_SUPPORT_SYNC_WINDOWS_H #define GRPC_SUPPORT_SYNC_WINDOWS_H #include #include #endif /* GRPC_SUPPORT_SYNC_WINDOWS_H */ grpc-1.30.2/include/grpc/support/thd_id.h000066400000000000000000000021251370425124100202250ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #ifndef GRPC_SUPPORT_THD_ID_H #define GRPC_SUPPORT_THD_ID_H /** Thread ID interface for GPR. Used by some wrapped languages for logging purposes. Types gpr_thd_id a unique opaque identifier for a thread. */ #include #ifdef __cplusplus extern "C" { #endif typedef uintptr_t gpr_thd_id; /** Returns the identifier of the current thread. */ GPRAPI gpr_thd_id gpr_thd_currentid(void); #ifdef __cplusplus } #endif #endif /* GRPC_SUPPORT_THD_ID_H */ grpc-1.30.2/include/grpc/support/time.h000066400000000000000000000062471370425124100177410ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_SUPPORT_TIME_H #define GRPC_SUPPORT_TIME_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif /** Time constants. */ GPRAPI gpr_timespec gpr_time_0(gpr_clock_type type); /** The zero time interval. */ GPRAPI gpr_timespec gpr_inf_future(gpr_clock_type type); /** The far future */ GPRAPI gpr_timespec gpr_inf_past(gpr_clock_type type); /** The far past. */ #define GPR_MS_PER_SEC 1000 #define GPR_US_PER_SEC 1000000 #define GPR_NS_PER_SEC 1000000000 #define GPR_NS_PER_MS 1000000 #define GPR_NS_PER_US 1000 #define GPR_US_PER_MS 1000 /** initialize time subsystem */ GPRAPI void gpr_time_init(void); /** Return the current time measured from the given clocks epoch. */ GPRAPI gpr_timespec gpr_now(gpr_clock_type clock); /** Convert a timespec from one clock to another */ GPRAPI gpr_timespec gpr_convert_clock_type(gpr_timespec t, gpr_clock_type target_clock); /** Return -ve, 0, or +ve according to whether a < b, a == b, or a > b respectively. */ GPRAPI int gpr_time_cmp(gpr_timespec a, gpr_timespec b); GPRAPI gpr_timespec gpr_time_max(gpr_timespec a, gpr_timespec b); GPRAPI gpr_timespec gpr_time_min(gpr_timespec a, gpr_timespec b); /** Add and subtract times. Calculations saturate at infinities. */ GPRAPI gpr_timespec gpr_time_add(gpr_timespec a, gpr_timespec b); GPRAPI gpr_timespec gpr_time_sub(gpr_timespec a, gpr_timespec b); /** Return a timespec representing a given number of time units. INT64_MIN is interpreted as gpr_inf_past, and INT64_MAX as gpr_inf_future. */ GPRAPI gpr_timespec gpr_time_from_micros(int64_t x, gpr_clock_type clock_type); GPRAPI gpr_timespec gpr_time_from_nanos(int64_t x, gpr_clock_type clock_type); GPRAPI gpr_timespec gpr_time_from_millis(int64_t x, gpr_clock_type clock_type); GPRAPI gpr_timespec gpr_time_from_seconds(int64_t x, gpr_clock_type clock_type); GPRAPI gpr_timespec gpr_time_from_minutes(int64_t x, gpr_clock_type clock_type); GPRAPI gpr_timespec gpr_time_from_hours(int64_t x, gpr_clock_type clock_type); GPRAPI int32_t gpr_time_to_millis(gpr_timespec timespec); /** Return 1 if two times are equal or within threshold of each other, 0 otherwise */ GPRAPI int gpr_time_similar(gpr_timespec a, gpr_timespec b, gpr_timespec threshold); /** Sleep until at least 'until' - an absolute timeout */ GPRAPI void gpr_sleep_until(gpr_timespec until); GPRAPI double gpr_timespec_to_micros(gpr_timespec t); #ifdef __cplusplus } #endif #endif /* GRPC_SUPPORT_TIME_H */ grpc-1.30.2/include/grpc/support/workaround_list.h000066400000000000000000000017501370425124100222230ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPC_SUPPORT_WORKAROUND_LIST_H #define GRPC_SUPPORT_WORKAROUND_LIST_H /* The list of IDs of server workarounds currently maintained by gRPC. For * explanation and detailed descriptions of workarounds, see * /doc/workarounds.md */ typedef enum { GRPC_WORKAROUND_ID_CRONET_COMPRESSION = 0, GRPC_MAX_WORKAROUND_ID } grpc_workaround_list; #endif /* GRPC_SUPPORT_WORKAROUND_LIST_H */ grpc-1.30.2/include/grpcpp/000077500000000000000000000000001370425124100154455ustar00rootroot00000000000000grpc-1.30.2/include/grpcpp/alarm.h000066400000000000000000000013741370425124100167170ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #ifndef GRPCPP_ALARM_H #define GRPCPP_ALARM_H #include namespace grpc { typedef ::grpc_impl::Alarm Alarm; } #endif // GRPCPP_ALARM_H grpc-1.30.2/include/grpcpp/alarm_impl.h000066400000000000000000000105601370425124100177350ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ /// An Alarm posts the user-provided tag to its associated completion queue or /// invokes the user-provided function on expiry or cancellation. #ifndef GRPCPP_ALARM_IMPL_H #define GRPCPP_ALARM_IMPL_H #include #include #include #include #include #include #include namespace grpc_impl { class Alarm : private ::grpc::GrpcLibraryCodegen { public: /// Create an unset completion queue alarm Alarm(); /// Destroy the given completion queue alarm, cancelling it in the process. ~Alarm(); /// DEPRECATED: Create and set a completion queue alarm instance associated to /// \a cq. /// This form is deprecated because it is inherently racy. /// \internal We rely on the presence of \a cq for grpc initialization. If \a /// cq were ever to be removed, a reference to a static /// internal::GrpcLibraryInitializer instance would need to be introduced /// here. \endinternal. template Alarm(::grpc::CompletionQueue* cq, const T& deadline, void* tag) : Alarm() { SetInternal(cq, ::grpc::TimePoint(deadline).raw_time(), tag); } /// Trigger an alarm instance on completion queue \a cq at the specified time. /// Once the alarm expires (at \a deadline) or it's cancelled (see \a Cancel), /// an event with tag \a tag will be added to \a cq. If the alarm expired, the /// event's success bit will be true, false otherwise (ie, upon cancellation). template void Set(::grpc::CompletionQueue* cq, const T& deadline, void* tag) { SetInternal(cq, ::grpc::TimePoint(deadline).raw_time(), tag); } /// Alarms aren't copyable. Alarm(const Alarm&) = delete; Alarm& operator=(const Alarm&) = delete; /// Alarms are movable. Alarm(Alarm&& rhs) : alarm_(rhs.alarm_) { rhs.alarm_ = nullptr; } Alarm& operator=(Alarm&& rhs) { alarm_ = rhs.alarm_; rhs.alarm_ = nullptr; return *this; } /// Cancel a completion queue alarm. Calling this function over an alarm that /// has already fired has no effect. void Cancel(); #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL /// Set an alarm to invoke callback \a f. The argument to the callback /// states whether the alarm expired at \a deadline (true) or was cancelled /// (false) template void Set(const T& deadline, std::function f) { SetInternal(::grpc::TimePoint(deadline).raw_time(), std::move(f)); } #endif /// NOTE: class experimental_type is not part of the public API of this class /// TODO(vjpai): Move these contents to the public API of Alarm when /// they are no longer experimental class experimental_type { public: explicit experimental_type(Alarm* alarm) : alarm_(alarm) {} /// Set an alarm to invoke callback \a f. The argument to the callback /// states whether the alarm expired at \a deadline (true) or was cancelled /// (false) template void Set(const T& deadline, std::function f) { alarm_->SetInternal(::grpc::TimePoint(deadline).raw_time(), std::move(f)); } private: Alarm* alarm_; }; /// NOTE: The function experimental() is not stable public API. It is a view /// to the experimental components of this class. It may be changed or removed /// at any time. experimental_type experimental() { return experimental_type(this); } private: void SetInternal(::grpc::CompletionQueue* cq, gpr_timespec deadline, void* tag); void SetInternal(gpr_timespec deadline, std::function f); ::grpc::internal::CompletionQueueTag* alarm_; }; } // namespace grpc_impl #endif // GRPCPP_ALARM_IMPL_H grpc-1.30.2/include/grpcpp/channel.h000066400000000000000000000021121370425124100172220ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_CHANNEL_H #define GRPCPP_CHANNEL_H #include namespace grpc { typedef ::grpc_impl::Channel Channel; namespace experimental { /// Resets the channel's connection backoff. /// TODO(roth): Once we see whether this proves useful, either create a gRFC /// and change this to be a method of the Channel class, or remove it. void ChannelResetConnectionBackoff(Channel* channel); } // namespace experimental } // namespace grpc #endif // GRPCPP_CHANNEL_H grpc-1.30.2/include/grpcpp/channel_impl.h000066400000000000000000000116771370425124100202630ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_CHANNEL_IMPL_H #define GRPCPP_CHANNEL_IMPL_H #include #include #include #include #include #include #include #include #include struct grpc_channel; namespace grpc { namespace testing { class ChannelTestPeer; } // namespace testing std::shared_ptr<::grpc_impl::Channel> CreateChannelInternal( const grpc::string& host, grpc_channel* c_channel, std::vector< std::unique_ptr> interceptor_creators); } // namespace grpc namespace grpc_impl { namespace experimental { /// Resets the channel's connection backoff. /// TODO(roth): Once we see whether this proves useful, either create a gRFC /// and change this to be a method of the Channel class, or remove it. void ChannelResetConnectionBackoff(Channel* channel); } // namespace experimental /// Channels represent a connection to an endpoint. Created by \a CreateChannel. class Channel final : public ::grpc::ChannelInterface, public ::grpc::internal::CallHook, public std::enable_shared_from_this, private ::grpc::GrpcLibraryCodegen { public: ~Channel(); /// Get the current channel state. If the channel is in IDLE and /// \a try_to_connect is set to true, try to connect. grpc_connectivity_state GetState(bool try_to_connect) override; /// Returns the LB policy name, or the empty string if not yet available. grpc::string GetLoadBalancingPolicyName() const; /// Returns the service config in JSON form, or the empty string if /// not available. grpc::string GetServiceConfigJSON() const; private: template friend class ::grpc::internal::BlockingUnaryCallImpl; friend class ::grpc::testing::ChannelTestPeer; friend void experimental::ChannelResetConnectionBackoff(Channel* channel); friend std::shared_ptr grpc::CreateChannelInternal( const grpc::string& host, grpc_channel* c_channel, std::vector> interceptor_creators); friend class ::grpc::internal::InterceptedChannel; Channel(const grpc::string& host, grpc_channel* c_channel, std::vector> interceptor_creators); ::grpc::internal::Call CreateCall(const ::grpc::internal::RpcMethod& method, ::grpc_impl::ClientContext* context, ::grpc_impl::CompletionQueue* cq) override; void PerformOpsOnCall(::grpc::internal::CallOpSetInterface* ops, ::grpc::internal::Call* call) override; void* RegisterMethod(const char* method) override; void NotifyOnStateChangeImpl(grpc_connectivity_state last_observed, gpr_timespec deadline, ::grpc_impl::CompletionQueue* cq, void* tag) override; bool WaitForStateChangeImpl(grpc_connectivity_state last_observed, gpr_timespec deadline) override; ::grpc_impl::CompletionQueue* CallbackCQ() override; ::grpc::internal::Call CreateCallInternal( const ::grpc::internal::RpcMethod& method, ::grpc_impl::ClientContext* context, ::grpc_impl::CompletionQueue* cq, size_t interceptor_pos) override; const grpc::string host_; grpc_channel* const c_channel_; // owned // mu_ protects callback_cq_ (the per-channel callbackable completion queue) grpc::internal::Mutex mu_; // callback_cq_ references the callbackable completion queue associated // with this channel (if any). It is set on the first call to CallbackCQ(). // It is _not owned_ by the channel; ownership belongs with its internal // shutdown callback tag (invoked when the CQ is fully shutdown). ::grpc_impl::CompletionQueue* callback_cq_ = nullptr; std::vector< std::unique_ptr<::grpc::experimental::ClientInterceptorFactoryInterface>> interceptor_creators_; }; } // namespace grpc_impl #endif // GRPCPP_CHANNEL_IMPL_H grpc-1.30.2/include/grpcpp/client_context.h000066400000000000000000000026371370425124100206500ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ /// A ClientContext allows the person implementing a service client to: /// /// - Add custom metadata key-value pairs that will propagated to the server /// side. /// - Control call settings such as compression and authentication. /// - Initial and trailing metadata coming from the server. /// - Get performance metrics (ie, census). /// /// Context settings are only relevant to the call they are invoked with, that /// is to say, they aren't sticky. Some of these settings, such as the /// compression options, can be made persistent at channel construction time /// (see \a grpc::CreateCustomChannel). /// /// \warning ClientContext instances should \em not be reused across rpcs. #ifndef GRPCPP_CLIENT_CONTEXT_H #define GRPCPP_CLIENT_CONTEXT_H #include #endif // GRPCPP_CLIENT_CONTEXT_H grpc-1.30.2/include/grpcpp/completion_queue.h000066400000000000000000000013711370425124100211750ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_COMPLETION_QUEUE_H #define GRPCPP_COMPLETION_QUEUE_H #include #endif // GRPCPP_COMPLETION_QUEUE_H grpc-1.30.2/include/grpcpp/completion_queue_impl.h000066400000000000000000000014151370425124100222150ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_COMPLETION_QUEUE_IMPL_H #define GRPCPP_COMPLETION_QUEUE_IMPL_H #include #endif // GRPCPP_COMPLETION_QUEUE_IMPL_H grpc-1.30.2/include/grpcpp/create_channel.h000066400000000000000000000034341370425124100205550ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_CREATE_CHANNEL_H #define GRPCPP_CREATE_CHANNEL_H #include #include namespace grpc { static inline std::shared_ptr<::grpc::Channel> CreateChannel( const grpc::string& target, const std::shared_ptr& creds) { return ::grpc_impl::CreateChannelImpl(target, creds); } static inline std::shared_ptr<::grpc::Channel> CreateCustomChannel( const grpc::string& target, const std::shared_ptr& creds, const ChannelArguments& args) { return ::grpc_impl::CreateCustomChannelImpl(target, creds, args); } namespace experimental { static inline std::shared_ptr<::grpc::Channel> CreateCustomChannelWithInterceptors( const grpc::string& target, const std::shared_ptr& creds, const ChannelArguments& args, std::vector< std::unique_ptr> interceptor_creators) { return ::grpc_impl::experimental::CreateCustomChannelWithInterceptors( target, creds, args, std::move(interceptor_creators)); } } // namespace experimental } // namespace grpc #endif // GRPCPP_CREATE_CHANNEL_H grpc-1.30.2/include/grpcpp/create_channel_impl.h000066400000000000000000000056311370425124100215770ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_CREATE_CHANNEL_IMPL_H #define GRPCPP_CREATE_CHANNEL_IMPL_H #include #include #include #include #include #include namespace grpc_impl { /// Create a new \a Channel pointing to \a target. /// /// \param target The URI of the endpoint to connect to. /// \param creds Credentials to use for the created channel. If it does not /// hold an object or is invalid, a lame channel (one on which all operations /// fail) is returned. std::shared_ptr<::grpc::Channel> CreateChannelImpl( const grpc::string& target, const std::shared_ptr<::grpc::ChannelCredentials>& creds); /// Create a new \em custom \a Channel pointing to \a target. /// /// \warning For advanced use and testing ONLY. Override default channel /// arguments only if necessary. /// /// \param target The URI of the endpoint to connect to. /// \param creds Credentials to use for the created channel. If it does not /// hold an object or is invalid, a lame channel (one on which all operations /// fail) is returned. /// \param args Options for channel creation. std::shared_ptr<::grpc::Channel> CreateCustomChannelImpl( const grpc::string& target, const std::shared_ptr<::grpc::ChannelCredentials>& creds, const ::grpc::ChannelArguments& args); namespace experimental { /// Create a new \em custom \a Channel pointing to \a target with \a /// interceptors being invoked per call. /// /// \warning For advanced use and testing ONLY. Override default channel /// arguments only if necessary. /// /// \param target The URI of the endpoint to connect to. /// \param creds Credentials to use for the created channel. If it does not /// hold an object or is invalid, a lame channel (one on which all operations /// fail) is returned. /// \param args Options for channel creation. std::shared_ptr<::grpc::Channel> CreateCustomChannelWithInterceptors( const grpc::string& target, const std::shared_ptr& creds, const ::grpc::ChannelArguments& args, std::vector< std::unique_ptr> interceptor_creators); } // namespace experimental } // namespace grpc_impl #endif // GRPCPP_CREATE_CHANNEL_IMPL_H grpc-1.30.2/include/grpcpp/create_channel_posix.h000066400000000000000000000034121370425124100217730ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_CREATE_CHANNEL_POSIX_H #define GRPCPP_CREATE_CHANNEL_POSIX_H #include namespace grpc { #ifdef GPR_SUPPORT_CHANNELS_FROM_FD static inline std::shared_ptr CreateInsecureChannelFromFd( const grpc::string& target, int fd) { return ::grpc_impl::CreateInsecureChannelFromFd(target, fd); } static inline std::shared_ptr CreateCustomInsecureChannelFromFd( const grpc::string& target, int fd, const ChannelArguments& args) { return ::grpc_impl::CreateCustomInsecureChannelFromFd(target, fd, args); } namespace experimental { static inline std::shared_ptr CreateCustomInsecureChannelWithInterceptorsFromFd( const grpc::string& target, int fd, const ChannelArguments& args, std::unique_ptr>> interceptor_creators) { return ::grpc_impl::experimental:: CreateCustomInsecureChannelWithInterceptorsFromFd( target, fd, args, std::move(interceptor_creators)); } } // namespace experimental #endif // GPR_SUPPORT_CHANNELS_FROM_FD } // namespace grpc #endif // GRPCPP_CREATE_CHANNEL_POSIX_H grpc-1.30.2/include/grpcpp/create_channel_posix_impl.h000066400000000000000000000044671370425124100230270ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPCPP_CREATE_CHANNEL_POSIX_IMPL_H #define GRPCPP_CREATE_CHANNEL_POSIX_IMPL_H #include #include #include #include namespace grpc_impl { #ifdef GPR_SUPPORT_CHANNELS_FROM_FD /// Create a new \a Channel communicating over the given file descriptor. /// /// \param target The name of the target. /// \param fd The file descriptor representing a socket. std::shared_ptr CreateInsecureChannelFromFd( const grpc::string& target, int fd); /// Create a new \a Channel communicating over given file descriptor with custom /// channel arguments. /// /// \param target The name of the target. /// \param fd The file descriptor representing a socket. /// \param args Options for channel creation. std::shared_ptr CreateCustomInsecureChannelFromFd( const grpc::string& target, int fd, const grpc::ChannelArguments& args); namespace experimental { /// Create a new \a Channel communicating over given file descriptor with custom /// channel arguments. /// /// \param target The name of the target. /// \param fd The file descriptor representing a socket. /// \param args Options for channel creation. /// \param interceptor_creators Vector of interceptor factory objects. std::shared_ptr CreateCustomInsecureChannelWithInterceptorsFromFd( const grpc::string& target, int fd, const grpc::ChannelArguments& args, std::unique_ptr>> interceptor_creators); } // namespace experimental #endif // GPR_SUPPORT_CHANNELS_FROM_FD } // namespace grpc_impl #endif // GRPCPP_CREATE_CHANNEL_POSIX_IMPL_H grpc-1.30.2/include/grpcpp/ext/000077500000000000000000000000001370425124100162455ustar00rootroot00000000000000grpc-1.30.2/include/grpcpp/ext/channelz_service_plugin.h000066400000000000000000000020251370425124100233150ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #ifndef GRPCPP_EXT_CHANNELZ_SERVICE_PLUGIN_H #define GRPCPP_EXT_CHANNELZ_SERVICE_PLUGIN_H #include namespace grpc { namespace channelz { namespace experimental { static inline void InitChannelzService() { ::grpc_impl::channelz::experimental::InitChannelzService(); } } // namespace experimental } // namespace channelz } // namespace grpc #endif // GRPCPP_EXT_CHANNELZ_SERVICE_PLUGIN_H grpc-1.30.2/include/grpcpp/ext/channelz_service_plugin_impl.h000066400000000000000000000024561370425124100243460ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #ifndef GRPCPP_EXT_CHANNELZ_SERVICE_PLUGIN_IMPL_H #define GRPCPP_EXT_CHANNELZ_SERVICE_PLUGIN_IMPL_H #include #include #include #include namespace grpc_impl { namespace channelz { namespace experimental { /// Add channelz server plugin to \a ServerBuilder. This function should /// be called at static initialization time. This service is experimental /// for now. Track progress in https://github.com/grpc/grpc/issues/15988. void InitChannelzService(); } // namespace experimental } // namespace channelz } // namespace grpc_impl #endif // GRPCPP_EXT_CHANNELZ_SERVICE_PLUGIN_IMPL_H grpc-1.30.2/include/grpcpp/ext/health_check_service_server_builder_option.h000066400000000000000000000031031370425124100272210ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPCPP_EXT_HEALTH_CHECK_SERVICE_SERVER_BUILDER_OPTION_H #define GRPCPP_EXT_HEALTH_CHECK_SERVICE_SERVER_BUILDER_OPTION_H #include #include #include #include namespace grpc { class HealthCheckServiceServerBuilderOption : public ServerBuilderOption { public: /// The ownership of \a hc will be taken and transferred to the grpc server. /// To explicitly disable default service, pass in a nullptr. explicit HealthCheckServiceServerBuilderOption( std::unique_ptr hc); ~HealthCheckServiceServerBuilderOption() override {} void UpdateArguments(ChannelArguments* args) override; void UpdatePlugins( std::vector>* plugins) override; private: std::unique_ptr hc_; }; } // namespace grpc #endif // GRPCPP_EXT_HEALTH_CHECK_SERVICE_SERVER_BUILDER_OPTION_H grpc-1.30.2/include/grpcpp/ext/proto_server_reflection_plugin.h000066400000000000000000000021701370425124100247370ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_EXT_PROTO_SERVER_REFLECTION_PLUGIN_H #define GRPCPP_EXT_PROTO_SERVER_REFLECTION_PLUGIN_H #include namespace grpc { namespace reflection { typedef ::grpc_impl::reflection::ProtoServerReflectionPlugin ProtoServerReflectionPlugin; static inline void InitProtoReflectionServerBuilderPlugin() { ::grpc_impl::reflection::InitProtoReflectionServerBuilderPlugin(); } } // namespace reflection } // namespace grpc #endif // GRPCPP_EXT_PROTO_SERVER_REFLECTION_PLUGIN_H grpc-1.30.2/include/grpcpp/ext/proto_server_reflection_plugin_impl.h000066400000000000000000000033161370425124100257630ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_EXT_PROTO_SERVER_REFLECTION_PLUGIN_IMPL_H #define GRPCPP_EXT_PROTO_SERVER_REFLECTION_PLUGIN_IMPL_H #include #include namespace grpc { class ProtoServerReflection; } // namespace grpc namespace grpc_impl { class ServerInitializer; namespace reflection { class ProtoServerReflectionPlugin : public ::grpc::ServerBuilderPlugin { public: ProtoServerReflectionPlugin(); ::grpc::string name() override; void InitServer(::grpc_impl::ServerInitializer* si) override; void Finish(::grpc_impl::ServerInitializer* si) override; void ChangeArguments(const ::grpc::string& name, void* value) override; bool has_async_methods() const override; bool has_sync_methods() const override; private: std::shared_ptr reflection_service_; }; /// Add proto reflection plugin to \a ServerBuilder. /// This function should be called at the static initialization time. void InitProtoReflectionServerBuilderPlugin(); } // namespace reflection } // namespace grpc_impl #endif // GRPCPP_EXT_PROTO_SERVER_REFLECTION_PLUGIN_IMPL_H grpc-1.30.2/include/grpcpp/ext/server_load_reporting.h000066400000000000000000000026441370425124100230220ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #ifndef GRPCPP_EXT_SERVER_LOAD_REPORTING_H #define GRPCPP_EXT_SERVER_LOAD_REPORTING_H #include namespace grpc { namespace load_reporter { namespace experimental { typedef ::grpc_impl::load_reporter::experimental:: LoadReportingServiceServerBuilderOption LoadReportingServiceServerBuilderOption; static inline void AddLoadReportingCost(grpc::ServerContext* ctx, const grpc::string& cost_name, double cost_value) { ::grpc_impl::load_reporter::experimental::AddLoadReportingCost(ctx, cost_name, cost_value); } } // namespace experimental } // namespace load_reporter } // namespace grpc #endif // GRPCPP_EXT_SERVER_LOAD_REPORTING_H grpc-1.30.2/include/grpcpp/ext/server_load_reporting_impl.h000066400000000000000000000035401370425124100240370ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #ifndef GRPCPP_EXT_SERVER_LOAD_REPORTING_IMPL_H #define GRPCPP_EXT_SERVER_LOAD_REPORTING_IMPL_H #include #include #include #include #include namespace grpc_impl { namespace load_reporter { namespace experimental { // The ServerBuilderOption to enable server-side load reporting feature. To // enable the feature, please make sure the binary builds with the // grpcpp_server_load_reporting library and set this option in the // ServerBuilder. class LoadReportingServiceServerBuilderOption : public grpc::ServerBuilderOption { public: void UpdateArguments(::grpc::ChannelArguments* args) override; void UpdatePlugins(std::vector>* plugins) override; }; // Adds the load reporting cost with \a cost_name and \a cost_value in the // trailing metadata of the server context. void AddLoadReportingCost(grpc::ServerContext* ctx, const grpc::string& cost_name, double cost_value); } // namespace experimental } // namespace load_reporter } // namespace grpc_impl #endif // GRPCPP_EXT_SERVER_LOAD_REPORTING_IMPL_H grpc-1.30.2/include/grpcpp/generic/000077500000000000000000000000001370425124100170615ustar00rootroot00000000000000grpc-1.30.2/include/grpcpp/generic/async_generic_service.h000066400000000000000000000014451370425124100235670ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #ifndef GRPCPP_GENERIC_ASYNC_GENERIC_SERVICE_H #define GRPCPP_GENERIC_ASYNC_GENERIC_SERVICE_H #include #endif // GRPCPP_GENERIC_ASYNC_GENERIC_SERVICE_H grpc-1.30.2/include/grpcpp/generic/generic_stub.h000066400000000000000000000015301370425124100217020ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_GENERIC_GENERIC_STUB_H #define GRPCPP_GENERIC_GENERIC_STUB_H #include namespace grpc { typedef ::grpc_impl::GenericStub GenericStub; } // namespace grpc #endif // GRPCPP_GENERIC_GENERIC_STUB_H grpc-1.30.2/include/grpcpp/generic/generic_stub_impl.h000066400000000000000000000227371370425124100227370ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_GENERIC_GENERIC_STUB_IMPL_H #define GRPCPP_GENERIC_GENERIC_STUB_IMPL_H #include #include #include #include #include #include #include #include namespace grpc { typedef ::grpc_impl::ClientAsyncReaderWriter GenericClientAsyncReaderWriter; typedef ::grpc_impl::ClientAsyncResponseReader GenericClientAsyncResponseReader; } // namespace grpc namespace grpc_impl { class CompletionQueue; /// Generic stubs provide a type-unaware interface to call gRPC methods /// by name. In practice, the Request and Response types should be basic /// types like grpc::ByteBuffer or proto::MessageLite (the base protobuf). template class TemplatedGenericStub final { public: explicit TemplatedGenericStub(std::shared_ptr channel) : channel_(channel) {} /// Setup a call to a named method \a method using \a context, but don't /// start it. Let it be started explicitly with StartCall and a tag. /// The return value only indicates whether or not registration of the call /// succeeded (i.e. the call won't proceed if the return value is nullptr). std::unique_ptr> PrepareCall(ClientContext* context, const grpc::string& method, CompletionQueue* cq) { return CallInternal(channel_.get(), context, method, cq, false, nullptr); } /// Setup a unary call to a named method \a method using \a context, and don't /// start it. Let it be started explicitly with StartCall. /// The return value only indicates whether or not registration of the call /// succeeded (i.e. the call won't proceed if the return value is nullptr). std::unique_ptr> PrepareUnaryCall( ClientContext* context, const grpc::string& method, const RequestType& request, CompletionQueue* cq) { return std::unique_ptr>( internal::ClientAsyncResponseReaderFactory::Create( channel_.get(), cq, grpc::internal::RpcMethod(method.c_str(), grpc::internal::RpcMethod::NORMAL_RPC), context, request, false)); } /// DEPRECATED for multi-threaded use /// Begin a call to a named method \a method using \a context. /// A tag \a tag will be delivered to \a cq when the call has been started /// (i.e, initial metadata has been sent). /// The return value only indicates whether or not registration of the call /// succeeded (i.e. the call won't proceed if the return value is nullptr). std::unique_ptr> Call( ClientContext* context, const grpc::string& method, CompletionQueue* cq, void* tag) { return CallInternal(channel_.get(), context, method, cq, true, tag); } #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL /// Setup and start a unary call to a named method \a method using /// \a context and specifying the \a request and \a response buffers. void UnaryCall(ClientContext* context, const grpc::string& method, const RequestType* request, ResponseType* response, std::function on_completion) { UnaryCallInternal(context, method, request, response, std::move(on_completion)); } /// Setup a unary call to a named method \a method using /// \a context and specifying the \a request and \a response buffers. /// Like any other reactor-based RPC, it will not be activated until /// StartCall is invoked on its reactor. void PrepareUnaryCall(ClientContext* context, const grpc::string& method, const RequestType* request, ResponseType* response, ClientUnaryReactor* reactor) { PrepareUnaryCallInternal(context, method, request, response, reactor); } /// Setup a call to a named method \a method using \a context and tied to /// \a reactor . Like any other bidi streaming RPC, it will not be activated /// until StartCall is invoked on its reactor. void PrepareBidiStreamingCall( ClientContext* context, const grpc::string& method, ClientBidiReactor* reactor) { PrepareBidiStreamingCallInternal(context, method, reactor); } #endif /// NOTE: class experimental_type is not part of the public API of this class /// TODO(vjpai): Move these contents to the public API of GenericStub when /// they are no longer experimental class experimental_type { public: explicit experimental_type(TemplatedGenericStub* stub) : stub_(stub) {} /// Setup and start a unary call to a named method \a method using /// \a context and specifying the \a request and \a response buffers. void UnaryCall(ClientContext* context, const grpc::string& method, const RequestType* request, ResponseType* response, std::function on_completion) { stub_->UnaryCallInternal(context, method, request, response, std::move(on_completion)); } /// Setup a unary call to a named method \a method using /// \a context and specifying the \a request and \a response buffers. /// Like any other reactor-based RPC, it will not be activated until /// StartCall is invoked on its reactor. void PrepareUnaryCall(ClientContext* context, const grpc::string& method, const RequestType* request, ResponseType* response, ClientUnaryReactor* reactor) { stub_->PrepareUnaryCallInternal(context, method, request, response, reactor); } /// Setup a call to a named method \a method using \a context and tied to /// \a reactor . Like any other bidi streaming RPC, it will not be activated /// until StartCall is invoked on its reactor. void PrepareBidiStreamingCall( ClientContext* context, const grpc::string& method, ClientBidiReactor* reactor) { stub_->PrepareBidiStreamingCallInternal(context, method, reactor); } private: TemplatedGenericStub* stub_; }; /// NOTE: The function experimental() is not stable public API. It is a view /// to the experimental components of this class. It may be changed or removed /// at any time. experimental_type experimental() { return experimental_type(this); } private: std::shared_ptr channel_; void UnaryCallInternal(ClientContext* context, const grpc::string& method, const RequestType* request, ResponseType* response, std::function on_completion) { internal::CallbackUnaryCall( channel_.get(), grpc::internal::RpcMethod(method.c_str(), grpc::internal::RpcMethod::NORMAL_RPC), context, request, response, std::move(on_completion)); } void PrepareUnaryCallInternal(ClientContext* context, const grpc::string& method, const RequestType* request, ResponseType* response, ClientUnaryReactor* reactor) { internal::ClientCallbackUnaryFactory::Create( channel_.get(), grpc::internal::RpcMethod(method.c_str(), grpc::internal::RpcMethod::NORMAL_RPC), context, request, response, reactor); } void PrepareBidiStreamingCallInternal( ClientContext* context, const grpc::string& method, ClientBidiReactor* reactor) { internal::ClientCallbackReaderWriterFactory:: Create(channel_.get(), grpc::internal::RpcMethod( method.c_str(), grpc::internal::RpcMethod::BIDI_STREAMING), context, reactor); } std::unique_ptr> CallInternal(grpc::ChannelInterface* channel, ClientContext* context, const grpc::string& method, CompletionQueue* cq, bool start, void* tag) { return std::unique_ptr>( internal::ClientAsyncReaderWriterFactory:: Create( channel, cq, grpc::internal::RpcMethod( method.c_str(), grpc::internal::RpcMethod::BIDI_STREAMING), context, start, tag)); } }; typedef TemplatedGenericStub GenericStub; } // namespace grpc_impl #endif // GRPCPP_GENERIC_GENERIC_STUB_IMPL_H grpc-1.30.2/include/grpcpp/grpcpp.h000066400000000000000000000044331370425124100171150ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ /// \mainpage gRPC C++ API /// /// The gRPC C++ API mainly consists of the following classes: ///
/// - grpc::Channel, which represents the connection to an endpoint. See [the /// gRPC Concepts page](https://grpc.io/docs/guides/concepts.html) for more /// details. Channels are created by the factory function grpc::CreateChannel. /// /// - grpc::CompletionQueue, the producer-consumer queue used for all /// asynchronous communication with the gRPC runtime. /// /// - grpc::ClientContext and grpc::ServerContext, where optional configuration /// for an RPC can be set, such as setting custom metadata to be conveyed to the /// peer, compression settings, authentication, etc. /// /// - grpc::Server, representing a gRPC server, created by grpc::ServerBuilder. /// /// Streaming calls are handled with the streaming classes in /// \ref sync_stream.h and /// \ref async_stream.h. /// /// Refer to the /// [examples](https://github.com/grpc/grpc/blob/master/examples/cpp) /// for code putting these pieces into play. #ifndef GRPCPP_GRPCPP_H #define GRPCPP_GRPCPP_H // Pragma for http://include-what-you-use.org/ tool, tells that following // headers are not private for grpcpp.h and are part of its interface. // IWYU pragma: begin_exports #include #include #include #include #include #include #include #include #include #include // IWYU pragma: end_exports namespace grpc { /// Return gRPC library version. grpc::string Version(); } // namespace grpc #endif // GRPCPP_GRPCPP_H grpc-1.30.2/include/grpcpp/health_check_service_interface.h000066400000000000000000000023551370425124100237650ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_HEALTH_CHECK_SERVICE_INTERFACE_H #define GRPCPP_HEALTH_CHECK_SERVICE_INTERFACE_H #include namespace grpc { const char kHealthCheckServiceInterfaceArg[] = "grpc.health_check_service_interface"; typedef ::grpc_impl::HealthCheckServiceInterface HealthCheckServiceInterface; static inline void EnableDefaultHealthCheckService(bool enable) { ::grpc_impl::EnableDefaultHealthCheckService(enable); } static inline bool DefaultHealthCheckServiceEnabled() { return ::grpc_impl::DefaultHealthCheckServiceEnabled(); } } // namespace grpc #endif // GRPCPP_HEALTH_CHECK_SERVICE_INTERFACE_H grpc-1.30.2/include/grpcpp/health_check_service_interface_impl.h000066400000000000000000000035271370425124100250100ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPCPP_HEALTH_CHECK_SERVICE_INTERFACE_IMPL_H #define GRPCPP_HEALTH_CHECK_SERVICE_INTERFACE_IMPL_H #include namespace grpc_impl { /// The gRPC server uses this interface to expose the health checking service /// without depending on protobuf. class HealthCheckServiceInterface { public: virtual ~HealthCheckServiceInterface() {} /// Set or change the serving status of the given \a service_name. virtual void SetServingStatus(const grpc::string& service_name, bool serving) = 0; /// Apply to all registered service names. virtual void SetServingStatus(bool serving) = 0; /// Set all registered service names to not serving and prevent future /// state changes. virtual void Shutdown() {} }; /// Enable/disable the default health checking service. This applies to all C++ /// servers created afterwards. For each server, user can override the default /// with a HealthCheckServiceServerBuilderOption. /// NOT thread safe. void EnableDefaultHealthCheckService(bool enable); /// Returns whether the default health checking service is enabled. /// NOT thread safe. bool DefaultHealthCheckServiceEnabled(); } // namespace grpc_impl #endif // GRPCPP_HEALTH_CHECK_SERVICE_INTERFACE_IMPL_H grpc-1.30.2/include/grpcpp/impl/000077500000000000000000000000001370425124100164065ustar00rootroot00000000000000grpc-1.30.2/include/grpcpp/impl/README.md000066400000000000000000000003001370425124100176560ustar00rootroot00000000000000**The APIs in this directory are not stable!** This directory contains header files that need to be installed but are not part of the public API. Users should not use these headers directly. grpc-1.30.2/include/grpcpp/impl/call.h000066400000000000000000000013301370425124100174670ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CALL_H #define GRPCPP_IMPL_CALL_H #include #endif // GRPCPP_IMPL_CALL_H grpc-1.30.2/include/grpcpp/impl/channel_argument_option.h000066400000000000000000000021671370425124100234670ustar00rootroot00000000000000/* * * Copyright 2017 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CHANNEL_ARGUMENT_OPTION_H #define GRPCPP_IMPL_CHANNEL_ARGUMENT_OPTION_H #include #include #include #include namespace grpc { std::unique_ptr MakeChannelArgumentOption( const grpc::string& name, const grpc::string& value); std::unique_ptr MakeChannelArgumentOption( const grpc::string& name, int value); } // namespace grpc #endif // GRPCPP_IMPL_CHANNEL_ARGUMENT_OPTION_H grpc-1.30.2/include/grpcpp/impl/client_unary_call.h000066400000000000000000000014141370425124100222460ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CLIENT_UNARY_CALL_H #define GRPCPP_IMPL_CLIENT_UNARY_CALL_H #include #endif // GRPCPP_IMPL_CLIENT_UNARY_CALL_H grpc-1.30.2/include/grpcpp/impl/codegen/000077500000000000000000000000001370425124100200125ustar00rootroot00000000000000grpc-1.30.2/include/grpcpp/impl/codegen/async_generic_service.h000066400000000000000000000122371370425124100245210ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_ASYNC_GENERIC_SERVICE_H #define GRPCPP_IMPL_CODEGEN_ASYNC_GENERIC_SERVICE_H #include #include #include #include #include struct grpc_server; namespace grpc { typedef ::grpc_impl::ServerAsyncReaderWriter GenericServerAsyncReaderWriter; typedef ::grpc_impl::ServerAsyncResponseWriter GenericServerAsyncResponseWriter; typedef ::grpc_impl::ServerAsyncReader GenericServerAsyncReader; typedef ::grpc_impl::ServerAsyncWriter GenericServerAsyncWriter; class GenericServerContext final : public ::grpc_impl::ServerContext { public: const grpc::string& method() const { return method_; } const grpc::string& host() const { return host_; } private: friend class grpc_impl::Server; friend class grpc::ServerInterface; void Clear() { method_.clear(); host_.clear(); ::grpc_impl::ServerContext::Clear(); } grpc::string method_; grpc::string host_; }; // A generic service at the server side accepts all RPC methods and hosts. It is // typically used in proxies. The generic service can be registered to a server // which also has other services. // Sample usage: // ServerBuilder builder; // auto cq = builder.AddCompletionQueue(); // AsyncGenericService generic_service; // builder.RegisterAsyncGenericService(&generic_service); // auto server = builder.BuildAndStart(); // // // request a new call // GenericServerContext context; // GenericServerAsyncReaderWriter stream; // generic_service.RequestCall(&context, &stream, cq.get(), cq.get(), tag); // // When tag is retrieved from cq->Next(), context.method() can be used to look // at the method and the RPC can be handled accordingly. class AsyncGenericService final { public: AsyncGenericService() : server_(nullptr) {} void RequestCall(GenericServerContext* ctx, GenericServerAsyncReaderWriter* reader_writer, ::grpc_impl::CompletionQueue* call_cq, ::grpc_impl::ServerCompletionQueue* notification_cq, void* tag); private: friend class grpc_impl::Server; grpc_impl::Server* server_; }; #ifndef GRPC_CALLBACK_API_NONEXPERIMENTAL namespace experimental { #endif /// \a ServerGenericBidiReactor is the reactor class for bidi streaming RPCs /// invoked on a CallbackGenericService. It is just a ServerBidi reactor with /// ByteBuffer arguments. using ServerGenericBidiReactor = ::grpc_impl::ServerBidiReactor; class GenericCallbackServerContext final : public ::grpc_impl::CallbackServerContext { public: const grpc::string& method() const { return method_; } const grpc::string& host() const { return host_; } private: friend class ::grpc_impl::Server; friend class ::grpc::ServerInterface; void Clear() { method_.clear(); host_.clear(); ::grpc_impl::CallbackServerContext::Clear(); } grpc::string method_; grpc::string host_; }; /// \a CallbackGenericService is the base class for generic services implemented /// using the callback API and registered through the ServerBuilder using /// RegisterCallbackGenericService. class CallbackGenericService { public: CallbackGenericService() {} virtual ~CallbackGenericService() {} /// The "method handler" for the generic API. This function should be /// overridden to provide a ServerGenericBidiReactor that implements the /// application-level interface for this RPC. Unimplemented by default. virtual ServerGenericBidiReactor* CreateReactor( GenericCallbackServerContext* /*ctx*/) { class Reactor : public ServerGenericBidiReactor { public: Reactor() { this->Finish(Status(StatusCode::UNIMPLEMENTED, "")); } void OnDone() override { delete this; } }; return new Reactor; } private: friend class ::grpc_impl::Server; ::grpc_impl::internal::CallbackBidiHandler* Handler() { return new ::grpc_impl::internal::CallbackBidiHandler( [this](::grpc_impl::CallbackServerContext* ctx) { return CreateReactor(static_cast(ctx)); }); } grpc_impl::Server* server_{nullptr}; }; #ifndef GRPC_CALLBACK_API_NONEXPERIMENTAL } // namespace experimental #endif } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_ASYNC_GENERIC_SERVICE_H grpc-1.30.2/include/grpcpp/impl/codegen/async_stream.h000066400000000000000000000053321370425124100226560ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_ASYNC_STREAM_H #define GRPCPP_IMPL_CODEGEN_ASYNC_STREAM_H #include namespace grpc { namespace internal { typedef ::grpc_impl::internal::ClientAsyncStreamingInterface ClientAsyncStreamingInterface; template using AsyncReaderInterface = ::grpc_impl::internal::AsyncReaderInterface; template using AsyncWriterInterface = ::grpc_impl::internal::AsyncWriterInterface; } // namespace internal template using ClientAsyncReaderInterface = ::grpc_impl::ClientAsyncReaderInterface; template using ClientAsyncReader = ::grpc_impl::ClientAsyncReader; template using ClientAsyncWriterInterface = ::grpc_impl::ClientAsyncWriterInterface; template using ClientAsyncWriter = ::grpc_impl::ClientAsyncWriter; template using ClientAsyncReaderWriterInterface = ::grpc_impl::ClientAsyncReaderWriterInterface; template using ClientAsyncReaderWriter = ::grpc_impl::ClientAsyncReaderWriter; template using ServerAsyncReaderInterface = ::grpc_impl::ServerAsyncReaderInterface; template using ServerAsyncReader = ::grpc_impl::ServerAsyncReader; template using ServerAsyncWriterInterface = ::grpc_impl::ServerAsyncWriterInterface; template using ServerAsyncWriter = ::grpc_impl::ServerAsyncWriter; template using ServerAsyncReaderWriterInterface = ::grpc_impl::ServerAsyncReaderWriterInterface; template using ServerAsyncReaderWriter = ::grpc_impl::ServerAsyncReaderWriter; namespace internal { template using ClientAsyncReaderFactory = ::grpc_impl::internal::ClientAsyncReaderFactory; template using ClientAsyncWriterFactory = ::grpc_impl::internal::ClientAsyncWriterFactory; template using ClientAsyncReaderWriterFactory = ::grpc_impl::internal::ClientAsyncReaderWriterFactory; } // namespace internal } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_ASYNC_STREAM_H grpc-1.30.2/include/grpcpp/impl/codegen/async_stream_impl.h000066400000000000000000001327641370425124100237110ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. */ #ifndef GRPCPP_IMPL_CODEGEN_ASYNC_STREAM_IMPL_H #define GRPCPP_IMPL_CODEGEN_ASYNC_STREAM_IMPL_H #include #include #include #include #include #include namespace grpc_impl { namespace internal { /// Common interface for all client side asynchronous streaming. class ClientAsyncStreamingInterface { public: virtual ~ClientAsyncStreamingInterface() {} /// Start the call that was set up by the constructor, but only if the /// constructor was invoked through the "Prepare" API which doesn't actually /// start the call virtual void StartCall(void* tag) = 0; /// Request notification of the reading of the initial metadata. Completion /// will be notified by \a tag on the associated completion queue. /// This call is optional, but if it is used, it cannot be used concurrently /// with or after the \a AsyncReaderInterface::Read method. /// /// \param[in] tag Tag identifying this request. virtual void ReadInitialMetadata(void* tag) = 0; /// Indicate that the stream is to be finished and request notification for /// when the call has been ended. /// Should not be used concurrently with other operations. /// /// It is appropriate to call this method exactly once when both: /// * the client side has no more message to send /// (this can be declared implicitly by calling this method, or /// explicitly through an earlier call to the WritesDone method /// of the class in use, e.g. \a ClientAsyncWriterInterface::WritesDone or /// \a ClientAsyncReaderWriterInterface::WritesDone). /// * there are no more messages to be received from the server (this can /// be known implicitly by the calling code, or explicitly from an /// earlier call to \a AsyncReaderInterface::Read that yielded a failed /// result, e.g. cq->Next(&read_tag, &ok) filled in 'ok' with 'false'). /// /// The tag will be returned when either: /// - all incoming messages have been read and the server has returned /// a status. /// - the server has returned a non-OK status. /// - the call failed for some reason and the library generated a /// status. /// /// Note that implementations of this method attempt to receive initial /// metadata from the server if initial metadata hasn't yet been received. /// /// \param[in] tag Tag identifying this request. /// \param[out] status To be updated with the operation status. virtual void Finish(::grpc::Status* status, void* tag) = 0; }; /// An interface that yields a sequence of messages of type \a R. template class AsyncReaderInterface { public: virtual ~AsyncReaderInterface() {} /// Read a message of type \a R into \a msg. Completion will be notified by \a /// tag on the associated completion queue. /// This is thread-safe with respect to \a Write or \a WritesDone methods. It /// should not be called concurrently with other streaming APIs /// on the same stream. It is not meaningful to call it concurrently /// with another \a AsyncReaderInterface::Read on the same stream since reads /// on the same stream are delivered in order. /// /// \param[out] msg Where to eventually store the read message. /// \param[in] tag The tag identifying the operation. /// /// Side effect: note that this method attempt to receive initial metadata for /// a stream if it hasn't yet been received. virtual void Read(R* msg, void* tag) = 0; }; /// An interface that can be fed a sequence of messages of type \a W. template class AsyncWriterInterface { public: virtual ~AsyncWriterInterface() {} /// Request the writing of \a msg with identifying tag \a tag. /// /// Only one write may be outstanding at any given time. This means that /// after calling Write, one must wait to receive \a tag from the completion /// queue BEFORE calling Write again. /// This is thread-safe with respect to \a AsyncReaderInterface::Read /// /// gRPC doesn't take ownership or a reference to \a msg, so it is safe to /// to deallocate once Write returns. /// /// \param[in] msg The message to be written. /// \param[in] tag The tag identifying the operation. virtual void Write(const W& msg, void* tag) = 0; /// Request the writing of \a msg using WriteOptions \a options with /// identifying tag \a tag. /// /// Only one write may be outstanding at any given time. This means that /// after calling Write, one must wait to receive \a tag from the completion /// queue BEFORE calling Write again. /// WriteOptions \a options is used to set the write options of this message. /// This is thread-safe with respect to \a AsyncReaderInterface::Read /// /// gRPC doesn't take ownership or a reference to \a msg, so it is safe to /// to deallocate once Write returns. /// /// \param[in] msg The message to be written. /// \param[in] options The WriteOptions to be used to write this message. /// \param[in] tag The tag identifying the operation. virtual void Write(const W& msg, ::grpc::WriteOptions options, void* tag) = 0; /// Request the writing of \a msg and coalesce it with the writing /// of trailing metadata, using WriteOptions \a options with /// identifying tag \a tag. /// /// For client, WriteLast is equivalent of performing Write and /// WritesDone in a single step. /// For server, WriteLast buffers the \a msg. The writing of \a msg is held /// until Finish is called, where \a msg and trailing metadata are coalesced /// and write is initiated. Note that WriteLast can only buffer \a msg up to /// the flow control window size. If \a msg size is larger than the window /// size, it will be sent on wire without buffering. /// /// gRPC doesn't take ownership or a reference to \a msg, so it is safe to /// to deallocate once Write returns. /// /// \param[in] msg The message to be written. /// \param[in] options The WriteOptions to be used to write this message. /// \param[in] tag The tag identifying the operation. void WriteLast(const W& msg, ::grpc::WriteOptions options, void* tag) { Write(msg, options.set_last_message(), tag); } }; } // namespace internal template class ClientAsyncReaderInterface : public internal::ClientAsyncStreamingInterface, public internal::AsyncReaderInterface {}; namespace internal { template class ClientAsyncReaderFactory { public: /// Create a stream object. /// Write the first request out if \a start is set. /// \a tag will be notified on \a cq when the call has been started and /// \a request has been written out. If \a start is not set, \a tag must be /// nullptr and the actual call must be initiated by StartCall /// Note that \a context will be used to fill in custom initial metadata /// used to send to the server when starting the call. template static ClientAsyncReader* Create(::grpc::ChannelInterface* channel, ::grpc_impl::CompletionQueue* cq, const ::grpc::internal::RpcMethod& method, ::grpc_impl::ClientContext* context, const W& request, bool start, void* tag) { ::grpc::internal::Call call = channel->CreateCall(method, context, cq); return new (::grpc::g_core_codegen_interface->grpc_call_arena_alloc( call.call(), sizeof(ClientAsyncReader))) ClientAsyncReader(call, context, request, start, tag); } }; } // namespace internal /// Async client-side API for doing server-streaming RPCs, /// where the incoming message stream coming from the server has /// messages of type \a R. template class ClientAsyncReader final : public ClientAsyncReaderInterface { public: // always allocated against a call arena, no memory free required static void operator delete(void* /*ptr*/, std::size_t size) { GPR_CODEGEN_ASSERT(size == sizeof(ClientAsyncReader)); } // This operator should never be called as the memory should be freed as part // of the arena destruction. It only exists to provide a matching operator // delete to the operator new so that some compilers will not complain (see // https://github.com/grpc/grpc/issues/11301) Note at the time of adding this // there are no tests catching the compiler warning. static void operator delete(void*, void*) { GPR_CODEGEN_ASSERT(false); } void StartCall(void* tag) override { GPR_CODEGEN_ASSERT(!started_); started_ = true; StartCallInternal(tag); } /// See the \a ClientAsyncStreamingInterface.ReadInitialMetadata /// method for semantics. /// /// Side effect: /// - upon receiving initial metadata from the server, /// the \a ClientContext associated with this call is updated, and the /// calling code can access the received metadata through the /// \a ClientContext. void ReadInitialMetadata(void* tag) override { GPR_CODEGEN_ASSERT(started_); GPR_CODEGEN_ASSERT(!context_->initial_metadata_received_); meta_ops_.set_output_tag(tag); meta_ops_.RecvInitialMetadata(context_); call_.PerformOps(&meta_ops_); } void Read(R* msg, void* tag) override { GPR_CODEGEN_ASSERT(started_); read_ops_.set_output_tag(tag); if (!context_->initial_metadata_received_) { read_ops_.RecvInitialMetadata(context_); } read_ops_.RecvMessage(msg); call_.PerformOps(&read_ops_); } /// See the \a ClientAsyncStreamingInterface.Finish method for semantics. /// /// Side effect: /// - the \a ClientContext associated with this call is updated with /// possible initial and trailing metadata received from the server. void Finish(::grpc::Status* status, void* tag) override { GPR_CODEGEN_ASSERT(started_); finish_ops_.set_output_tag(tag); if (!context_->initial_metadata_received_) { finish_ops_.RecvInitialMetadata(context_); } finish_ops_.ClientRecvStatus(context_, status); call_.PerformOps(&finish_ops_); } private: friend class internal::ClientAsyncReaderFactory; template ClientAsyncReader(::grpc::internal::Call call, ::grpc_impl::ClientContext* context, const W& request, bool start, void* tag) : context_(context), call_(call), started_(start) { // TODO(ctiller): don't assert GPR_CODEGEN_ASSERT(init_ops_.SendMessage(request).ok()); init_ops_.ClientSendClose(); if (start) { StartCallInternal(tag); } else { GPR_CODEGEN_ASSERT(tag == nullptr); } } void StartCallInternal(void* tag) { init_ops_.SendInitialMetadata(&context_->send_initial_metadata_, context_->initial_metadata_flags()); init_ops_.set_output_tag(tag); call_.PerformOps(&init_ops_); } ::grpc_impl::ClientContext* context_; ::grpc::internal::Call call_; bool started_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpSendMessage, ::grpc::internal::CallOpClientSendClose> init_ops_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpRecvInitialMetadata> meta_ops_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpRecvInitialMetadata, ::grpc::internal::CallOpRecvMessage> read_ops_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpRecvInitialMetadata, ::grpc::internal::CallOpClientRecvStatus> finish_ops_; }; /// Common interface for client side asynchronous writing. template class ClientAsyncWriterInterface : public internal::ClientAsyncStreamingInterface, public internal::AsyncWriterInterface { public: /// Signal the client is done with the writes (half-close the client stream). /// Thread-safe with respect to \a AsyncReaderInterface::Read /// /// \param[in] tag The tag identifying the operation. virtual void WritesDone(void* tag) = 0; }; namespace internal { template class ClientAsyncWriterFactory { public: /// Create a stream object. /// Start the RPC if \a start is set /// \a tag will be notified on \a cq when the call has been started (i.e. /// intitial metadata sent) and \a request has been written out. /// If \a start is not set, \a tag must be nullptr and the actual call /// must be initiated by StartCall /// Note that \a context will be used to fill in custom initial metadata /// used to send to the server when starting the call. /// \a response will be filled in with the single expected response /// message from the server upon a successful call to the \a Finish /// method of this instance. template static ClientAsyncWriter* Create(::grpc::ChannelInterface* channel, ::grpc_impl::CompletionQueue* cq, const ::grpc::internal::RpcMethod& method, ::grpc_impl::ClientContext* context, R* response, bool start, void* tag) { ::grpc::internal::Call call = channel->CreateCall(method, context, cq); return new (::grpc::g_core_codegen_interface->grpc_call_arena_alloc( call.call(), sizeof(ClientAsyncWriter))) ClientAsyncWriter(call, context, response, start, tag); } }; } // namespace internal /// Async API on the client side for doing client-streaming RPCs, /// where the outgoing message stream going to the server contains /// messages of type \a W. template class ClientAsyncWriter final : public ClientAsyncWriterInterface { public: // always allocated against a call arena, no memory free required static void operator delete(void* /*ptr*/, std::size_t size) { GPR_CODEGEN_ASSERT(size == sizeof(ClientAsyncWriter)); } // This operator should never be called as the memory should be freed as part // of the arena destruction. It only exists to provide a matching operator // delete to the operator new so that some compilers will not complain (see // https://github.com/grpc/grpc/issues/11301) Note at the time of adding this // there are no tests catching the compiler warning. static void operator delete(void*, void*) { GPR_CODEGEN_ASSERT(false); } void StartCall(void* tag) override { GPR_CODEGEN_ASSERT(!started_); started_ = true; StartCallInternal(tag); } /// See the \a ClientAsyncStreamingInterface.ReadInitialMetadata method for /// semantics. /// /// Side effect: /// - upon receiving initial metadata from the server, the \a ClientContext /// associated with this call is updated, and the calling code can access /// the received metadata through the \a ClientContext. void ReadInitialMetadata(void* tag) override { GPR_CODEGEN_ASSERT(started_); GPR_CODEGEN_ASSERT(!context_->initial_metadata_received_); meta_ops_.set_output_tag(tag); meta_ops_.RecvInitialMetadata(context_); call_.PerformOps(&meta_ops_); } void Write(const W& msg, void* tag) override { GPR_CODEGEN_ASSERT(started_); write_ops_.set_output_tag(tag); // TODO(ctiller): don't assert GPR_CODEGEN_ASSERT(write_ops_.SendMessage(msg).ok()); call_.PerformOps(&write_ops_); } void Write(const W& msg, ::grpc::WriteOptions options, void* tag) override { GPR_CODEGEN_ASSERT(started_); write_ops_.set_output_tag(tag); if (options.is_last_message()) { options.set_buffer_hint(); write_ops_.ClientSendClose(); } // TODO(ctiller): don't assert GPR_CODEGEN_ASSERT(write_ops_.SendMessage(msg, options).ok()); call_.PerformOps(&write_ops_); } void WritesDone(void* tag) override { GPR_CODEGEN_ASSERT(started_); write_ops_.set_output_tag(tag); write_ops_.ClientSendClose(); call_.PerformOps(&write_ops_); } /// See the \a ClientAsyncStreamingInterface.Finish method for semantics. /// /// Side effect: /// - the \a ClientContext associated with this call is updated with /// possible initial and trailing metadata received from the server. /// - attempts to fill in the \a response parameter passed to this class's /// constructor with the server's response message. void Finish(::grpc::Status* status, void* tag) override { GPR_CODEGEN_ASSERT(started_); finish_ops_.set_output_tag(tag); if (!context_->initial_metadata_received_) { finish_ops_.RecvInitialMetadata(context_); } finish_ops_.ClientRecvStatus(context_, status); call_.PerformOps(&finish_ops_); } private: friend class internal::ClientAsyncWriterFactory; template ClientAsyncWriter(::grpc::internal::Call call, ::grpc_impl::ClientContext* context, R* response, bool start, void* tag) : context_(context), call_(call), started_(start) { finish_ops_.RecvMessage(response); finish_ops_.AllowNoMessage(); if (start) { StartCallInternal(tag); } else { GPR_CODEGEN_ASSERT(tag == nullptr); } } void StartCallInternal(void* tag) { write_ops_.SendInitialMetadata(&context_->send_initial_metadata_, context_->initial_metadata_flags()); // if corked bit is set in context, we just keep the initial metadata // buffered up to coalesce with later message send. No op is performed. if (!context_->initial_metadata_corked_) { write_ops_.set_output_tag(tag); call_.PerformOps(&write_ops_); } } ::grpc_impl::ClientContext* context_; ::grpc::internal::Call call_; bool started_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpRecvInitialMetadata> meta_ops_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpSendMessage, ::grpc::internal::CallOpClientSendClose> write_ops_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpRecvInitialMetadata, ::grpc::internal::CallOpGenericRecvMessage, ::grpc::internal::CallOpClientRecvStatus> finish_ops_; }; /// Async client-side interface for bi-directional streaming, /// where the client-to-server message stream has messages of type \a W, /// and the server-to-client message stream has messages of type \a R. template class ClientAsyncReaderWriterInterface : public internal::ClientAsyncStreamingInterface, public internal::AsyncWriterInterface, public internal::AsyncReaderInterface { public: /// Signal the client is done with the writes (half-close the client stream). /// Thread-safe with respect to \a AsyncReaderInterface::Read /// /// \param[in] tag The tag identifying the operation. virtual void WritesDone(void* tag) = 0; }; namespace internal { template class ClientAsyncReaderWriterFactory { public: /// Create a stream object. /// Start the RPC request if \a start is set. /// \a tag will be notified on \a cq when the call has been started (i.e. /// intitial metadata sent). If \a start is not set, \a tag must be /// nullptr and the actual call must be initiated by StartCall /// Note that \a context will be used to fill in custom initial metadata /// used to send to the server when starting the call. static ClientAsyncReaderWriter* Create( ::grpc::ChannelInterface* channel, ::grpc_impl::CompletionQueue* cq, const ::grpc::internal::RpcMethod& method, ::grpc_impl::ClientContext* context, bool start, void* tag) { ::grpc::internal::Call call = channel->CreateCall(method, context, cq); return new (::grpc::g_core_codegen_interface->grpc_call_arena_alloc( call.call(), sizeof(ClientAsyncReaderWriter))) ClientAsyncReaderWriter(call, context, start, tag); } }; } // namespace internal /// Async client-side interface for bi-directional streaming, /// where the outgoing message stream going to the server /// has messages of type \a W, and the incoming message stream coming /// from the server has messages of type \a R. template class ClientAsyncReaderWriter final : public ClientAsyncReaderWriterInterface { public: // always allocated against a call arena, no memory free required static void operator delete(void* /*ptr*/, std::size_t size) { GPR_CODEGEN_ASSERT(size == sizeof(ClientAsyncReaderWriter)); } // This operator should never be called as the memory should be freed as part // of the arena destruction. It only exists to provide a matching operator // delete to the operator new so that some compilers will not complain (see // https://github.com/grpc/grpc/issues/11301) Note at the time of adding this // there are no tests catching the compiler warning. static void operator delete(void*, void*) { GPR_CODEGEN_ASSERT(false); } void StartCall(void* tag) override { GPR_CODEGEN_ASSERT(!started_); started_ = true; StartCallInternal(tag); } /// See the \a ClientAsyncStreamingInterface.ReadInitialMetadata method /// for semantics of this method. /// /// Side effect: /// - upon receiving initial metadata from the server, the \a ClientContext /// is updated with it, and then the receiving initial metadata can /// be accessed through this \a ClientContext. void ReadInitialMetadata(void* tag) override { GPR_CODEGEN_ASSERT(started_); GPR_CODEGEN_ASSERT(!context_->initial_metadata_received_); meta_ops_.set_output_tag(tag); meta_ops_.RecvInitialMetadata(context_); call_.PerformOps(&meta_ops_); } void Read(R* msg, void* tag) override { GPR_CODEGEN_ASSERT(started_); read_ops_.set_output_tag(tag); if (!context_->initial_metadata_received_) { read_ops_.RecvInitialMetadata(context_); } read_ops_.RecvMessage(msg); call_.PerformOps(&read_ops_); } void Write(const W& msg, void* tag) override { GPR_CODEGEN_ASSERT(started_); write_ops_.set_output_tag(tag); // TODO(ctiller): don't assert GPR_CODEGEN_ASSERT(write_ops_.SendMessage(msg).ok()); call_.PerformOps(&write_ops_); } void Write(const W& msg, ::grpc::WriteOptions options, void* tag) override { GPR_CODEGEN_ASSERT(started_); write_ops_.set_output_tag(tag); if (options.is_last_message()) { options.set_buffer_hint(); write_ops_.ClientSendClose(); } // TODO(ctiller): don't assert GPR_CODEGEN_ASSERT(write_ops_.SendMessage(msg, options).ok()); call_.PerformOps(&write_ops_); } void WritesDone(void* tag) override { GPR_CODEGEN_ASSERT(started_); write_ops_.set_output_tag(tag); write_ops_.ClientSendClose(); call_.PerformOps(&write_ops_); } /// See the \a ClientAsyncStreamingInterface.Finish method for semantics. /// Side effect /// - the \a ClientContext associated with this call is updated with /// possible initial and trailing metadata sent from the server. void Finish(::grpc::Status* status, void* tag) override { GPR_CODEGEN_ASSERT(started_); finish_ops_.set_output_tag(tag); if (!context_->initial_metadata_received_) { finish_ops_.RecvInitialMetadata(context_); } finish_ops_.ClientRecvStatus(context_, status); call_.PerformOps(&finish_ops_); } private: friend class internal::ClientAsyncReaderWriterFactory; ClientAsyncReaderWriter(::grpc::internal::Call call, ::grpc_impl::ClientContext* context, bool start, void* tag) : context_(context), call_(call), started_(start) { if (start) { StartCallInternal(tag); } else { GPR_CODEGEN_ASSERT(tag == nullptr); } } void StartCallInternal(void* tag) { write_ops_.SendInitialMetadata(&context_->send_initial_metadata_, context_->initial_metadata_flags()); // if corked bit is set in context, we just keep the initial metadata // buffered up to coalesce with later message send. No op is performed. if (!context_->initial_metadata_corked_) { write_ops_.set_output_tag(tag); call_.PerformOps(&write_ops_); } } ::grpc_impl::ClientContext* context_; ::grpc::internal::Call call_; bool started_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpRecvInitialMetadata> meta_ops_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpRecvInitialMetadata, ::grpc::internal::CallOpRecvMessage> read_ops_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpSendMessage, ::grpc::internal::CallOpClientSendClose> write_ops_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpRecvInitialMetadata, ::grpc::internal::CallOpClientRecvStatus> finish_ops_; }; template class ServerAsyncReaderInterface : public ::grpc::internal::ServerAsyncStreamingInterface, public internal::AsyncReaderInterface { public: /// Indicate that the stream is to be finished with a certain status code /// and also send out \a msg response to the client. /// Request notification for when the server has sent the response and the /// appropriate signals to the client to end the call. /// Should not be used concurrently with other operations. /// /// It is appropriate to call this method when: /// * all messages from the client have been received (either known /// implictly, or explicitly because a previous /// \a AsyncReaderInterface::Read operation with a non-ok result, /// e.g., cq->Next(&read_tag, &ok) filled in 'ok' with 'false'). /// /// This operation will end when the server has finished sending out initial /// metadata (if not sent already), response message, and status, or if /// some failure occurred when trying to do so. /// /// gRPC doesn't take ownership or a reference to \a msg or \a status, so it /// is safe to deallocate once Finish returns. /// /// \param[in] tag Tag identifying this request. /// \param[in] status To be sent to the client as the result of this call. /// \param[in] msg To be sent to the client as the response for this call. virtual void Finish(const W& msg, const ::grpc::Status& status, void* tag) = 0; /// Indicate that the stream is to be finished with a certain /// non-OK status code. /// Request notification for when the server has sent the appropriate /// signals to the client to end the call. /// Should not be used concurrently with other operations. /// /// This call is meant to end the call with some error, and can be called at /// any point that the server would like to "fail" the call (though note /// this shouldn't be called concurrently with any other "sending" call, like /// \a AsyncWriterInterface::Write). /// /// This operation will end when the server has finished sending out initial /// metadata (if not sent already), and status, or if some failure occurred /// when trying to do so. /// /// gRPC doesn't take ownership or a reference to \a status, so it is safe to /// to deallocate once FinishWithError returns. /// /// \param[in] tag Tag identifying this request. /// \param[in] status To be sent to the client as the result of this call. /// - Note: \a status must have a non-OK code. virtual void FinishWithError(const ::grpc::Status& status, void* tag) = 0; }; /// Async server-side API for doing client-streaming RPCs, /// where the incoming message stream from the client has messages of type \a R, /// and the single response message sent from the server is type \a W. template class ServerAsyncReader final : public ServerAsyncReaderInterface { public: explicit ServerAsyncReader(::grpc_impl::ServerContext* ctx) : call_(nullptr, nullptr, nullptr), ctx_(ctx) {} /// See \a ServerAsyncStreamingInterface::SendInitialMetadata for semantics. /// /// Implicit input parameter: /// - The initial metadata that will be sent to the client from this op will /// be taken from the \a ServerContext associated with the call. void SendInitialMetadata(void* tag) override { GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_); meta_ops_.set_output_tag(tag); meta_ops_.SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { meta_ops_.set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; call_.PerformOps(&meta_ops_); } void Read(R* msg, void* tag) override { read_ops_.set_output_tag(tag); read_ops_.RecvMessage(msg); call_.PerformOps(&read_ops_); } /// See the \a ServerAsyncReaderInterface.Read method for semantics /// /// Side effect: /// - also sends initial metadata if not alreay sent. /// - uses the \a ServerContext associated with this call to send possible /// initial and trailing metadata. /// /// Note: \a msg is not sent if \a status has a non-OK code. /// /// gRPC doesn't take ownership or a reference to \a msg and \a status, so it /// is safe to deallocate once Finish returns. void Finish(const W& msg, const ::grpc::Status& status, void* tag) override { finish_ops_.set_output_tag(tag); if (!ctx_->sent_initial_metadata_) { finish_ops_.SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { finish_ops_.set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; } // The response is dropped if the status is not OK. if (status.ok()) { finish_ops_.ServerSendStatus(&ctx_->trailing_metadata_, finish_ops_.SendMessage(msg)); } else { finish_ops_.ServerSendStatus(&ctx_->trailing_metadata_, status); } call_.PerformOps(&finish_ops_); } /// See the \a ServerAsyncReaderInterface.Read method for semantics /// /// Side effect: /// - also sends initial metadata if not alreay sent. /// - uses the \a ServerContext associated with this call to send possible /// initial and trailing metadata. /// /// gRPC doesn't take ownership or a reference to \a status, so it is safe to /// to deallocate once FinishWithError returns. void FinishWithError(const ::grpc::Status& status, void* tag) override { GPR_CODEGEN_ASSERT(!status.ok()); finish_ops_.set_output_tag(tag); if (!ctx_->sent_initial_metadata_) { finish_ops_.SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { finish_ops_.set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; } finish_ops_.ServerSendStatus(&ctx_->trailing_metadata_, status); call_.PerformOps(&finish_ops_); } private: void BindCall(::grpc::internal::Call* call) override { call_ = *call; } ::grpc::internal::Call call_; ::grpc_impl::ServerContext* ctx_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata> meta_ops_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpRecvMessage> read_ops_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpSendMessage, ::grpc::internal::CallOpServerSendStatus> finish_ops_; }; template class ServerAsyncWriterInterface : public ::grpc::internal::ServerAsyncStreamingInterface, public internal::AsyncWriterInterface { public: /// Indicate that the stream is to be finished with a certain status code. /// Request notification for when the server has sent the appropriate /// signals to the client to end the call. /// Should not be used concurrently with other operations. /// /// It is appropriate to call this method when either: /// * all messages from the client have been received (either known /// implictly, or explicitly because a previous \a /// AsyncReaderInterface::Read operation with a non-ok /// result (e.g., cq->Next(&read_tag, &ok) filled in 'ok' with 'false'. /// * it is desired to end the call early with some non-OK status code. /// /// This operation will end when the server has finished sending out initial /// metadata (if not sent already), response message, and status, or if /// some failure occurred when trying to do so. /// /// gRPC doesn't take ownership or a reference to \a status, so it is safe to /// to deallocate once Finish returns. /// /// \param[in] tag Tag identifying this request. /// \param[in] status To be sent to the client as the result of this call. virtual void Finish(const ::grpc::Status& status, void* tag) = 0; /// Request the writing of \a msg and coalesce it with trailing metadata which /// contains \a status, using WriteOptions options with /// identifying tag \a tag. /// /// WriteAndFinish is equivalent of performing WriteLast and Finish /// in a single step. /// /// gRPC doesn't take ownership or a reference to \a msg and \a status, so it /// is safe to deallocate once WriteAndFinish returns. /// /// \param[in] msg The message to be written. /// \param[in] options The WriteOptions to be used to write this message. /// \param[in] status The Status that server returns to client. /// \param[in] tag The tag identifying the operation. virtual void WriteAndFinish(const W& msg, ::grpc::WriteOptions options, const ::grpc::Status& status, void* tag) = 0; }; /// Async server-side API for doing server streaming RPCs, /// where the outgoing message stream from the server has messages of type \a W. template class ServerAsyncWriter final : public ServerAsyncWriterInterface { public: explicit ServerAsyncWriter(::grpc_impl::ServerContext* ctx) : call_(nullptr, nullptr, nullptr), ctx_(ctx) {} /// See \a ServerAsyncStreamingInterface::SendInitialMetadata for semantics. /// /// Implicit input parameter: /// - The initial metadata that will be sent to the client from this op will /// be taken from the \a ServerContext associated with the call. /// /// \param[in] tag Tag identifying this request. void SendInitialMetadata(void* tag) override { GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_); meta_ops_.set_output_tag(tag); meta_ops_.SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { meta_ops_.set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; call_.PerformOps(&meta_ops_); } void Write(const W& msg, void* tag) override { write_ops_.set_output_tag(tag); EnsureInitialMetadataSent(&write_ops_); // TODO(ctiller): don't assert GPR_CODEGEN_ASSERT(write_ops_.SendMessage(msg).ok()); call_.PerformOps(&write_ops_); } void Write(const W& msg, ::grpc::WriteOptions options, void* tag) override { write_ops_.set_output_tag(tag); if (options.is_last_message()) { options.set_buffer_hint(); } EnsureInitialMetadataSent(&write_ops_); // TODO(ctiller): don't assert GPR_CODEGEN_ASSERT(write_ops_.SendMessage(msg, options).ok()); call_.PerformOps(&write_ops_); } /// See the \a ServerAsyncWriterInterface.WriteAndFinish method for semantics. /// /// Implicit input parameter: /// - the \a ServerContext associated with this call is used /// for sending trailing (and initial) metadata to the client. /// /// Note: \a status must have an OK code. /// /// gRPC doesn't take ownership or a reference to \a msg and \a status, so it /// is safe to deallocate once WriteAndFinish returns. void WriteAndFinish(const W& msg, ::grpc::WriteOptions options, const ::grpc::Status& status, void* tag) override { write_ops_.set_output_tag(tag); EnsureInitialMetadataSent(&write_ops_); options.set_buffer_hint(); GPR_CODEGEN_ASSERT(write_ops_.SendMessage(msg, options).ok()); write_ops_.ServerSendStatus(&ctx_->trailing_metadata_, status); call_.PerformOps(&write_ops_); } /// See the \a ServerAsyncWriterInterface.Finish method for semantics. /// /// Implicit input parameter: /// - the \a ServerContext associated with this call is used for sending /// trailing (and initial if not already sent) metadata to the client. /// /// Note: there are no restrictions are the code of /// \a status,it may be non-OK /// /// gRPC doesn't take ownership or a reference to \a status, so it is safe to /// to deallocate once Finish returns. void Finish(const ::grpc::Status& status, void* tag) override { finish_ops_.set_output_tag(tag); EnsureInitialMetadataSent(&finish_ops_); finish_ops_.ServerSendStatus(&ctx_->trailing_metadata_, status); call_.PerformOps(&finish_ops_); } private: void BindCall(::grpc::internal::Call* call) override { call_ = *call; } template void EnsureInitialMetadataSent(T* ops) { if (!ctx_->sent_initial_metadata_) { ops->SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { ops->set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; } } ::grpc::internal::Call call_; ::grpc_impl::ServerContext* ctx_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata> meta_ops_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpSendMessage, ::grpc::internal::CallOpServerSendStatus> write_ops_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpServerSendStatus> finish_ops_; }; /// Server-side interface for asynchronous bi-directional streaming. template class ServerAsyncReaderWriterInterface : public ::grpc::internal::ServerAsyncStreamingInterface, public internal::AsyncWriterInterface, public internal::AsyncReaderInterface { public: /// Indicate that the stream is to be finished with a certain status code. /// Request notification for when the server has sent the appropriate /// signals to the client to end the call. /// Should not be used concurrently with other operations. /// /// It is appropriate to call this method when either: /// * all messages from the client have been received (either known /// implictly, or explicitly because a previous \a /// AsyncReaderInterface::Read operation /// with a non-ok result (e.g., cq->Next(&read_tag, &ok) filled in 'ok' /// with 'false'. /// * it is desired to end the call early with some non-OK status code. /// /// This operation will end when the server has finished sending out initial /// metadata (if not sent already), response message, and status, or if some /// failure occurred when trying to do so. /// /// gRPC doesn't take ownership or a reference to \a status, so it is safe to /// to deallocate once Finish returns. /// /// \param[in] tag Tag identifying this request. /// \param[in] status To be sent to the client as the result of this call. virtual void Finish(const ::grpc::Status& status, void* tag) = 0; /// Request the writing of \a msg and coalesce it with trailing metadata which /// contains \a status, using WriteOptions options with /// identifying tag \a tag. /// /// WriteAndFinish is equivalent of performing WriteLast and Finish in a /// single step. /// /// gRPC doesn't take ownership or a reference to \a msg and \a status, so it /// is safe to deallocate once WriteAndFinish returns. /// /// \param[in] msg The message to be written. /// \param[in] options The WriteOptions to be used to write this message. /// \param[in] status The Status that server returns to client. /// \param[in] tag The tag identifying the operation. virtual void WriteAndFinish(const W& msg, ::grpc::WriteOptions options, const ::grpc::Status& status, void* tag) = 0; }; /// Async server-side API for doing bidirectional streaming RPCs, /// where the incoming message stream coming from the client has messages of /// type \a R, and the outgoing message stream coming from the server has /// messages of type \a W. template class ServerAsyncReaderWriter final : public ServerAsyncReaderWriterInterface { public: explicit ServerAsyncReaderWriter(::grpc_impl::ServerContext* ctx) : call_(nullptr, nullptr, nullptr), ctx_(ctx) {} /// See \a ServerAsyncStreamingInterface::SendInitialMetadata for semantics. /// /// Implicit input parameter: /// - The initial metadata that will be sent to the client from this op will /// be taken from the \a ServerContext associated with the call. /// /// \param[in] tag Tag identifying this request. void SendInitialMetadata(void* tag) override { GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_); meta_ops_.set_output_tag(tag); meta_ops_.SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { meta_ops_.set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; call_.PerformOps(&meta_ops_); } void Read(R* msg, void* tag) override { read_ops_.set_output_tag(tag); read_ops_.RecvMessage(msg); call_.PerformOps(&read_ops_); } void Write(const W& msg, void* tag) override { write_ops_.set_output_tag(tag); EnsureInitialMetadataSent(&write_ops_); // TODO(ctiller): don't assert GPR_CODEGEN_ASSERT(write_ops_.SendMessage(msg).ok()); call_.PerformOps(&write_ops_); } void Write(const W& msg, ::grpc::WriteOptions options, void* tag) override { write_ops_.set_output_tag(tag); if (options.is_last_message()) { options.set_buffer_hint(); } EnsureInitialMetadataSent(&write_ops_); GPR_CODEGEN_ASSERT(write_ops_.SendMessage(msg, options).ok()); call_.PerformOps(&write_ops_); } /// See the \a ServerAsyncReaderWriterInterface.WriteAndFinish /// method for semantics. /// /// Implicit input parameter: /// - the \a ServerContext associated with this call is used /// for sending trailing (and initial) metadata to the client. /// /// Note: \a status must have an OK code. // /// gRPC doesn't take ownership or a reference to \a msg and \a status, so it /// is safe to deallocate once WriteAndFinish returns. void WriteAndFinish(const W& msg, ::grpc::WriteOptions options, const ::grpc::Status& status, void* tag) override { write_ops_.set_output_tag(tag); EnsureInitialMetadataSent(&write_ops_); options.set_buffer_hint(); GPR_CODEGEN_ASSERT(write_ops_.SendMessage(msg, options).ok()); write_ops_.ServerSendStatus(&ctx_->trailing_metadata_, status); call_.PerformOps(&write_ops_); } /// See the \a ServerAsyncReaderWriterInterface.Finish method for semantics. /// /// Implicit input parameter: /// - the \a ServerContext associated with this call is used for sending /// trailing (and initial if not already sent) metadata to the client. /// /// Note: there are no restrictions are the code of \a status, /// it may be non-OK // /// gRPC doesn't take ownership or a reference to \a status, so it is safe to /// to deallocate once Finish returns. void Finish(const ::grpc::Status& status, void* tag) override { finish_ops_.set_output_tag(tag); EnsureInitialMetadataSent(&finish_ops_); finish_ops_.ServerSendStatus(&ctx_->trailing_metadata_, status); call_.PerformOps(&finish_ops_); } private: friend class ::grpc_impl::Server; void BindCall(::grpc::internal::Call* call) override { call_ = *call; } template void EnsureInitialMetadataSent(T* ops) { if (!ctx_->sent_initial_metadata_) { ops->SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { ops->set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; } } ::grpc::internal::Call call_; ::grpc_impl::ServerContext* ctx_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata> meta_ops_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpRecvMessage> read_ops_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpSendMessage, ::grpc::internal::CallOpServerSendStatus> write_ops_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpServerSendStatus> finish_ops_; }; } // namespace grpc_impl #endif // GRPCPP_IMPL_CODEGEN_ASYNC_STREAM_IMPL_H grpc-1.30.2/include/grpcpp/impl/codegen/async_unary_call.h000066400000000000000000000024571370425124100235210ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_ASYNC_UNARY_CALL_H #define GRPCPP_IMPL_CODEGEN_ASYNC_UNARY_CALL_H #include namespace grpc { template using ClientAsyncResponseReaderInterface = grpc_impl::ClientAsyncResponseReaderInterface; template using ClientAsyncResponseReader = grpc_impl::ClientAsyncResponseReader; template using ServerAsyncResponseWriter = ::grpc_impl::ServerAsyncResponseWriter; namespace internal { template using ClientAsyncResponseReaderFactory = ::grpc_impl::internal::ClientAsyncResponseReaderFactory; } // namespace internal } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_ASYNC_UNARY_CALL_H grpc-1.30.2/include/grpcpp/impl/codegen/async_unary_call_impl.h000066400000000000000000000303771370425124100245440ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_ASYNC_UNARY_CALL_IMPL_H #define GRPCPP_IMPL_CODEGEN_ASYNC_UNARY_CALL_IMPL_H #include #include #include #include #include #include namespace grpc_impl { /// An interface relevant for async client side unary RPCs (which send /// one request message to a server and receive one response message). template class ClientAsyncResponseReaderInterface { public: virtual ~ClientAsyncResponseReaderInterface() {} /// Start the call that was set up by the constructor, but only if the /// constructor was invoked through the "Prepare" API which doesn't actually /// start the call virtual void StartCall() = 0; /// Request notification of the reading of initial metadata. Completion /// will be notified by \a tag on the associated completion queue. /// This call is optional, but if it is used, it cannot be used concurrently /// with or after the \a Finish method. /// /// \param[in] tag Tag identifying this request. virtual void ReadInitialMetadata(void* tag) = 0; /// Request to receive the server's response \a msg and final \a status for /// the call, and to notify \a tag on this call's completion queue when /// finished. /// /// This function will return when either: /// - when the server's response message and status have been received. /// - when the server has returned a non-OK status (no message expected in /// this case). /// - when the call failed for some reason and the library generated a /// non-OK status. /// /// \param[in] tag Tag identifying this request. /// \param[out] status To be updated with the operation status. /// \param[out] msg To be filled in with the server's response message. virtual void Finish(R* msg, ::grpc::Status* status, void* tag) = 0; }; namespace internal { template class ClientAsyncResponseReaderFactory { public: /// Start a call and write the request out if \a start is set. /// \a tag will be notified on \a cq when the call has been started (i.e. /// intitial metadata sent) and \a request has been written out. /// If \a start is not set, the actual call must be initiated by StartCall /// Note that \a context will be used to fill in custom initial metadata /// used to send to the server when starting the call. template static ClientAsyncResponseReader* Create( ::grpc::ChannelInterface* channel, ::grpc_impl::CompletionQueue* cq, const ::grpc::internal::RpcMethod& method, ::grpc_impl::ClientContext* context, const W& request, bool start) { ::grpc::internal::Call call = channel->CreateCall(method, context, cq); return new (::grpc::g_core_codegen_interface->grpc_call_arena_alloc( call.call(), sizeof(ClientAsyncResponseReader))) ClientAsyncResponseReader(call, context, request, start); } }; } // namespace internal /// Async API for client-side unary RPCs, where the message response /// received from the server is of type \a R. template class ClientAsyncResponseReader final : public ClientAsyncResponseReaderInterface { public: // always allocated against a call arena, no memory free required static void operator delete(void* /*ptr*/, std::size_t size) { GPR_CODEGEN_ASSERT(size == sizeof(ClientAsyncResponseReader)); } // This operator should never be called as the memory should be freed as part // of the arena destruction. It only exists to provide a matching operator // delete to the operator new so that some compilers will not complain (see // https://github.com/grpc/grpc/issues/11301) Note at the time of adding this // there are no tests catching the compiler warning. static void operator delete(void*, void*) { GPR_CODEGEN_ASSERT(false); } void StartCall() override { GPR_CODEGEN_ASSERT(!started_); started_ = true; StartCallInternal(); } /// See \a ClientAsyncResponseReaderInterface::ReadInitialMetadata for /// semantics. /// /// Side effect: /// - the \a ClientContext associated with this call is updated with /// possible initial and trailing metadata sent from the server. void ReadInitialMetadata(void* tag) override { GPR_CODEGEN_ASSERT(started_); GPR_CODEGEN_ASSERT(!context_->initial_metadata_received_); single_buf.set_output_tag(tag); single_buf.RecvInitialMetadata(context_); call_.PerformOps(&single_buf); initial_metadata_read_ = true; } /// See \a ClientAysncResponseReaderInterface::Finish for semantics. /// /// Side effect: /// - the \a ClientContext associated with this call is updated with /// possible initial and trailing metadata sent from the server. void Finish(R* msg, ::grpc::Status* status, void* tag) override { GPR_CODEGEN_ASSERT(started_); if (initial_metadata_read_) { finish_buf.set_output_tag(tag); finish_buf.RecvMessage(msg); finish_buf.AllowNoMessage(); finish_buf.ClientRecvStatus(context_, status); call_.PerformOps(&finish_buf); } else { single_buf.set_output_tag(tag); single_buf.RecvInitialMetadata(context_); single_buf.RecvMessage(msg); single_buf.AllowNoMessage(); single_buf.ClientRecvStatus(context_, status); call_.PerformOps(&single_buf); } } private: friend class internal::ClientAsyncResponseReaderFactory; ::grpc_impl::ClientContext* const context_; ::grpc::internal::Call call_; bool started_; bool initial_metadata_read_ = false; template ClientAsyncResponseReader(::grpc::internal::Call call, ::grpc_impl::ClientContext* context, const W& request, bool start) : context_(context), call_(call), started_(start) { // Bind the metadata at time of StartCallInternal but set up the rest here // TODO(ctiller): don't assert GPR_CODEGEN_ASSERT(single_buf.SendMessage(request).ok()); single_buf.ClientSendClose(); if (start) StartCallInternal(); } void StartCallInternal() { single_buf.SendInitialMetadata(&context_->send_initial_metadata_, context_->initial_metadata_flags()); } // disable operator new static void* operator new(std::size_t size); static void* operator new(std::size_t /*size*/, void* p) { return p; } ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpSendMessage, ::grpc::internal::CallOpClientSendClose, ::grpc::internal::CallOpRecvInitialMetadata, ::grpc::internal::CallOpRecvMessage, ::grpc::internal::CallOpClientRecvStatus> single_buf; ::grpc::internal::CallOpSet<::grpc::internal::CallOpRecvMessage, ::grpc::internal::CallOpClientRecvStatus> finish_buf; }; /// Async server-side API for handling unary calls, where the single /// response message sent to the client is of type \a W. template class ServerAsyncResponseWriter final : public ::grpc::internal::ServerAsyncStreamingInterface { public: explicit ServerAsyncResponseWriter(::grpc_impl::ServerContext* ctx) : call_(nullptr, nullptr, nullptr), ctx_(ctx) {} /// See \a ServerAsyncStreamingInterface::SendInitialMetadata for semantics. /// /// Side effect: /// The initial metadata that will be sent to the client from this op will /// be taken from the \a ServerContext associated with the call. /// /// \param[in] tag Tag identifying this request. void SendInitialMetadata(void* tag) override { GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_); meta_buf_.set_output_tag(tag); meta_buf_.SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { meta_buf_.set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; call_.PerformOps(&meta_buf_); } /// Indicate that the stream is to be finished and request notification /// when the server has sent the appropriate signals to the client to /// end the call. Should not be used concurrently with other operations. /// /// \param[in] tag Tag identifying this request. /// \param[in] status To be sent to the client as the result of the call. /// \param[in] msg Message to be sent to the client. /// /// Side effect: /// - also sends initial metadata if not already sent (using the /// \a ServerContext associated with this call). /// /// Note: if \a status has a non-OK code, then \a msg will not be sent, /// and the client will receive only the status with possible trailing /// metadata. void Finish(const W& msg, const ::grpc::Status& status, void* tag) { finish_buf_.set_output_tag(tag); finish_buf_.set_core_cq_tag(&finish_buf_); if (!ctx_->sent_initial_metadata_) { finish_buf_.SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { finish_buf_.set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; } // The response is dropped if the status is not OK. if (status.ok()) { finish_buf_.ServerSendStatus(&ctx_->trailing_metadata_, finish_buf_.SendMessage(msg)); } else { finish_buf_.ServerSendStatus(&ctx_->trailing_metadata_, status); } call_.PerformOps(&finish_buf_); } /// Indicate that the stream is to be finished with a non-OK status, /// and request notification for when the server has finished sending the /// appropriate signals to the client to end the call. /// Should not be used concurrently with other operations. /// /// \param[in] tag Tag identifying this request. /// \param[in] status To be sent to the client as the result of the call. /// - Note: \a status must have a non-OK code. /// /// Side effect: /// - also sends initial metadata if not already sent (using the /// \a ServerContext associated with this call). void FinishWithError(const ::grpc::Status& status, void* tag) { GPR_CODEGEN_ASSERT(!status.ok()); finish_buf_.set_output_tag(tag); if (!ctx_->sent_initial_metadata_) { finish_buf_.SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { finish_buf_.set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; } finish_buf_.ServerSendStatus(&ctx_->trailing_metadata_, status); call_.PerformOps(&finish_buf_); } private: void BindCall(::grpc::internal::Call* call) override { call_ = *call; } ::grpc::internal::Call call_; ::grpc_impl::ServerContext* ctx_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata> meta_buf_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpSendMessage, ::grpc::internal::CallOpServerSendStatus> finish_buf_; }; } // namespace grpc_impl namespace std { template class default_delete<::grpc_impl::ClientAsyncResponseReader> { public: void operator()(void* /*p*/) {} }; template class default_delete<::grpc_impl::ClientAsyncResponseReaderInterface> { public: void operator()(void* /*p*/) {} }; } // namespace std #endif // GRPCPP_IMPL_CODEGEN_ASYNC_UNARY_CALL_IMPL_H grpc-1.30.2/include/grpcpp/impl/codegen/byte_buffer.h000066400000000000000000000173061370425124100224660ustar00rootroot00000000000000/* * * Copyright 2017 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_BYTE_BUFFER_H #define GRPCPP_IMPL_CODEGEN_BYTE_BUFFER_H #include #include #include #include #include #include #include namespace grpc_impl { namespace internal { template class CallbackUnaryHandler; template class CallbackServerStreamingHandler; template class RpcMethodHandler; template class ServerStreamingHandler; template <::grpc::StatusCode code> class ErrorMethodHandler; } // namespace internal } // namespace grpc_impl namespace grpc { class ServerInterface; class ByteBuffer; class ServerInterface; namespace internal { class CallOpSendMessage; template class CallOpRecvMessage; class CallOpGenericRecvMessage; class ExternalConnectionAcceptorImpl; template class DeserializeFuncType; class GrpcByteBufferPeer; } // namespace internal /// A sequence of bytes. class ByteBuffer final { public: /// Constuct an empty buffer. ByteBuffer() : buffer_(nullptr) {} /// Construct buffer from \a slices, of which there are \a nslices. ByteBuffer(const Slice* slices, size_t nslices) { // The following assertions check that the representation of a grpc::Slice // is identical to that of a grpc_slice: it has a grpc_slice field, and // nothing else. static_assert(std::is_same::value, "Slice must have same representation as grpc_slice"); static_assert(sizeof(Slice) == sizeof(grpc_slice), "Slice must have same representation as grpc_slice"); // The following assertions check that the representation of a ByteBuffer is // identical to grpc_byte_buffer*: it has a grpc_byte_buffer* field, // and nothing else. static_assert(std::is_same::value, "ByteBuffer must have same representation as " "grpc_byte_buffer*"); static_assert(sizeof(ByteBuffer) == sizeof(grpc_byte_buffer*), "ByteBuffer must have same representation as " "grpc_byte_buffer*"); // The const_cast is legal if grpc_raw_byte_buffer_create() does no more // than its advertised side effect of increasing the reference count of the // slices it processes, and such an increase does not affect the semantics // seen by the caller of this constructor. buffer_ = g_core_codegen_interface->grpc_raw_byte_buffer_create( reinterpret_cast(const_cast(slices)), nslices); } /// Constuct a byte buffer by referencing elements of existing buffer /// \a buf. Wrapper of core function grpc_byte_buffer_copy . This is not /// a deep copy; it is just a referencing. As a result, its performance is /// size-independent. ByteBuffer(const ByteBuffer& buf) : buffer_(nullptr) { operator=(buf); } ~ByteBuffer() { if (buffer_) { g_core_codegen_interface->grpc_byte_buffer_destroy(buffer_); } } /// Wrapper of core function grpc_byte_buffer_copy . This is not /// a deep copy; it is just a referencing. As a result, its performance is /// size-independent. ByteBuffer& operator=(const ByteBuffer& buf) { if (this != &buf) { Clear(); // first remove existing data } if (buf.buffer_) { // then copy buffer_ = g_core_codegen_interface->grpc_byte_buffer_copy(buf.buffer_); } return *this; } /// Dump (read) the buffer contents into \a slices. Status Dump(std::vector* slices) const; /// Remove all data. void Clear() { if (buffer_) { g_core_codegen_interface->grpc_byte_buffer_destroy(buffer_); buffer_ = nullptr; } } /// Make a duplicate copy of the internals of this byte /// buffer so that we have our own owned version of it. /// bbuf.Duplicate(); is equivalent to bbuf=bbuf; but is actually readable. /// This is not a deep copy; it is a referencing and its performance /// is size-independent. void Duplicate() { buffer_ = g_core_codegen_interface->grpc_byte_buffer_copy(buffer_); } /// Forget underlying byte buffer without destroying /// Use this only for un-owned byte buffers void Release() { buffer_ = nullptr; } /// Buffer size in bytes. size_t Length() const { return buffer_ == nullptr ? 0 : g_core_codegen_interface->grpc_byte_buffer_length(buffer_); } /// Swap the state of *this and *other. void Swap(ByteBuffer* other) { grpc_byte_buffer* tmp = other->buffer_; other->buffer_ = buffer_; buffer_ = tmp; } /// Is this ByteBuffer valid? bool Valid() const { return (buffer_ != nullptr); } private: friend class SerializationTraits; friend class ServerInterface; friend class internal::CallOpSendMessage; template friend class internal::CallOpRecvMessage; friend class internal::CallOpGenericRecvMessage; template friend class ::grpc_impl::internal::RpcMethodHandler; template friend class ::grpc_impl::internal::ServerStreamingHandler; template friend class ::grpc_impl::internal::CallbackUnaryHandler; template friend class ::grpc_impl::internal::CallbackServerStreamingHandler; template friend class ::grpc_impl::internal::ErrorMethodHandler; template friend class internal::DeserializeFuncType; friend class ProtoBufferReader; friend class ProtoBufferWriter; friend class internal::GrpcByteBufferPeer; friend class internal::ExternalConnectionAcceptorImpl; grpc_byte_buffer* buffer_; // takes ownership void set_buffer(grpc_byte_buffer* buf) { if (buffer_) { Clear(); } buffer_ = buf; } grpc_byte_buffer* c_buffer() { return buffer_; } grpc_byte_buffer** c_buffer_ptr() { return &buffer_; } class ByteBufferPointer { public: ByteBufferPointer(const ByteBuffer* b) : bbuf_(const_cast(b)) {} operator ByteBuffer*() { return bbuf_; } operator grpc_byte_buffer*() { return bbuf_->buffer_; } operator grpc_byte_buffer**() { return &bbuf_->buffer_; } private: ByteBuffer* bbuf_; }; ByteBufferPointer bbuf_ptr() const { return ByteBufferPointer(this); } }; template <> class SerializationTraits { public: static Status Deserialize(ByteBuffer* byte_buffer, ByteBuffer* dest) { dest->set_buffer(byte_buffer->buffer_); return Status::OK; } static Status Serialize(const ByteBuffer& source, ByteBuffer* buffer, bool* own_buffer) { *buffer = source; *own_buffer = true; return g_core_codegen_interface->ok(); } }; } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_BYTE_BUFFER_H grpc-1.30.2/include/grpcpp/impl/codegen/call.h000066400000000000000000000053601370425124100211020ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_CALL_H #define GRPCPP_IMPL_CODEGEN_CALL_H #include #include namespace grpc_impl { class CompletionQueue; } namespace grpc { namespace experimental { class ClientRpcInfo; class ServerRpcInfo; } // namespace experimental namespace internal { class CallHook; class CallOpSetInterface; /// Straightforward wrapping of the C call object class Call final { public: Call() : call_hook_(nullptr), cq_(nullptr), call_(nullptr), max_receive_message_size_(-1) {} /** call is owned by the caller */ Call(grpc_call* call, CallHook* call_hook, ::grpc_impl::CompletionQueue* cq) : call_hook_(call_hook), cq_(cq), call_(call), max_receive_message_size_(-1) {} Call(grpc_call* call, CallHook* call_hook, ::grpc_impl::CompletionQueue* cq, experimental::ClientRpcInfo* rpc_info) : call_hook_(call_hook), cq_(cq), call_(call), max_receive_message_size_(-1), client_rpc_info_(rpc_info) {} Call(grpc_call* call, CallHook* call_hook, ::grpc_impl::CompletionQueue* cq, int max_receive_message_size, experimental::ServerRpcInfo* rpc_info) : call_hook_(call_hook), cq_(cq), call_(call), max_receive_message_size_(max_receive_message_size), server_rpc_info_(rpc_info) {} void PerformOps(CallOpSetInterface* ops) { call_hook_->PerformOpsOnCall(ops, this); } grpc_call* call() const { return call_; } ::grpc_impl::CompletionQueue* cq() const { return cq_; } int max_receive_message_size() const { return max_receive_message_size_; } experimental::ClientRpcInfo* client_rpc_info() const { return client_rpc_info_; } experimental::ServerRpcInfo* server_rpc_info() const { return server_rpc_info_; } private: CallHook* call_hook_; ::grpc_impl::CompletionQueue* cq_; grpc_call* call_; int max_receive_message_size_; experimental::ClientRpcInfo* client_rpc_info_ = nullptr; experimental::ServerRpcInfo* server_rpc_info_ = nullptr; }; } // namespace internal } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_CALL_H grpc-1.30.2/include/grpcpp/impl/codegen/call_hook.h000066400000000000000000000020731370425124100221200ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_CALL_HOOK_H #define GRPCPP_IMPL_CODEGEN_CALL_HOOK_H namespace grpc { namespace internal { class CallOpSetInterface; class Call; /// This is an interface that Channel and Server implement to allow them to hook /// performing ops. class CallHook { public: virtual ~CallHook() {} virtual void PerformOpsOnCall(CallOpSetInterface* ops, Call* call) = 0; }; } // namespace internal } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_CALL_HOOK_H grpc-1.30.2/include/grpcpp/impl/codegen/call_op_set.h000066400000000000000000001043501370425124100224520ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_CALL_OP_SET_H #define GRPCPP_IMPL_CODEGEN_CALL_OP_SET_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace grpc { extern CoreCodegenInterface* g_core_codegen_interface; namespace internal { class Call; class CallHook; // TODO(yangg) if the map is changed before we send, the pointers will be a // mess. Make sure it does not happen. inline grpc_metadata* FillMetadataArray( const std::multimap& metadata, size_t* metadata_count, const grpc::string& optional_error_details) { *metadata_count = metadata.size() + (optional_error_details.empty() ? 0 : 1); if (*metadata_count == 0) { return nullptr; } grpc_metadata* metadata_array = (grpc_metadata*)(g_core_codegen_interface->gpr_malloc( (*metadata_count) * sizeof(grpc_metadata))); size_t i = 0; for (auto iter = metadata.cbegin(); iter != metadata.cend(); ++iter, ++i) { metadata_array[i].key = SliceReferencingString(iter->first); metadata_array[i].value = SliceReferencingString(iter->second); } if (!optional_error_details.empty()) { metadata_array[i].key = g_core_codegen_interface->grpc_slice_from_static_buffer( kBinaryErrorDetailsKey, sizeof(kBinaryErrorDetailsKey) - 1); metadata_array[i].value = SliceReferencingString(optional_error_details); } return metadata_array; } } // namespace internal /// Per-message write options. class WriteOptions { public: WriteOptions() : flags_(0), last_message_(false) {} WriteOptions(const WriteOptions& other) : flags_(other.flags_), last_message_(other.last_message_) {} /// Default assignment operator WriteOptions& operator=(const WriteOptions& other) = default; /// Clear all flags. inline void Clear() { flags_ = 0; } /// Returns raw flags bitset. inline uint32_t flags() const { return flags_; } /// Sets flag for the disabling of compression for the next message write. /// /// \sa GRPC_WRITE_NO_COMPRESS inline WriteOptions& set_no_compression() { SetBit(GRPC_WRITE_NO_COMPRESS); return *this; } /// Clears flag for the disabling of compression for the next message write. /// /// \sa GRPC_WRITE_NO_COMPRESS inline WriteOptions& clear_no_compression() { ClearBit(GRPC_WRITE_NO_COMPRESS); return *this; } /// Get value for the flag indicating whether compression for the next /// message write is forcefully disabled. /// /// \sa GRPC_WRITE_NO_COMPRESS inline bool get_no_compression() const { return GetBit(GRPC_WRITE_NO_COMPRESS); } /// Sets flag indicating that the write may be buffered and need not go out on /// the wire immediately. /// /// \sa GRPC_WRITE_BUFFER_HINT inline WriteOptions& set_buffer_hint() { SetBit(GRPC_WRITE_BUFFER_HINT); return *this; } /// Clears flag indicating that the write may be buffered and need not go out /// on the wire immediately. /// /// \sa GRPC_WRITE_BUFFER_HINT inline WriteOptions& clear_buffer_hint() { ClearBit(GRPC_WRITE_BUFFER_HINT); return *this; } /// Get value for the flag indicating that the write may be buffered and need /// not go out on the wire immediately. /// /// \sa GRPC_WRITE_BUFFER_HINT inline bool get_buffer_hint() const { return GetBit(GRPC_WRITE_BUFFER_HINT); } /// corked bit: aliases set_buffer_hint currently, with the intent that /// set_buffer_hint will be removed in the future inline WriteOptions& set_corked() { SetBit(GRPC_WRITE_BUFFER_HINT); return *this; } inline WriteOptions& clear_corked() { ClearBit(GRPC_WRITE_BUFFER_HINT); return *this; } inline bool is_corked() const { return GetBit(GRPC_WRITE_BUFFER_HINT); } /// last-message bit: indicates this is the last message in a stream /// client-side: makes Write the equivalent of performing Write, WritesDone /// in a single step /// server-side: hold the Write until the service handler returns (sync api) /// or until Finish is called (async api) inline WriteOptions& set_last_message() { last_message_ = true; return *this; } /// Clears flag indicating that this is the last message in a stream, /// disabling coalescing. inline WriteOptions& clear_last_message() { last_message_ = false; return *this; } /// Guarantee that all bytes have been written to the socket before completing /// this write (usually writes are completed when they pass flow control). inline WriteOptions& set_write_through() { SetBit(GRPC_WRITE_THROUGH); return *this; } inline bool is_write_through() const { return GetBit(GRPC_WRITE_THROUGH); } /// Get value for the flag indicating that this is the last message, and /// should be coalesced with trailing metadata. /// /// \sa GRPC_WRITE_LAST_MESSAGE bool is_last_message() const { return last_message_; } private: void SetBit(const uint32_t mask) { flags_ |= mask; } void ClearBit(const uint32_t mask) { flags_ &= ~mask; } bool GetBit(const uint32_t mask) const { return (flags_ & mask) != 0; } uint32_t flags_; bool last_message_; }; namespace internal { /// Default argument for CallOpSet. I is unused by the class, but can be /// used for generating multiple names for the same thing. template class CallNoOp { protected: void AddOp(grpc_op* /*ops*/, size_t* /*nops*/) {} void FinishOp(bool* /*status*/) {} void SetInterceptionHookPoint( InterceptorBatchMethodsImpl* /*interceptor_methods*/) {} void SetFinishInterceptionHookPoint( InterceptorBatchMethodsImpl* /*interceptor_methods*/) {} void SetHijackingState(InterceptorBatchMethodsImpl* /*interceptor_methods*/) { } }; class CallOpSendInitialMetadata { public: CallOpSendInitialMetadata() : send_(false) { maybe_compression_level_.is_set = false; } void SendInitialMetadata(std::multimap* metadata, uint32_t flags) { maybe_compression_level_.is_set = false; send_ = true; flags_ = flags; metadata_map_ = metadata; } void set_compression_level(grpc_compression_level level) { maybe_compression_level_.is_set = true; maybe_compression_level_.level = level; } protected: void AddOp(grpc_op* ops, size_t* nops) { if (!send_ || hijacked_) return; grpc_op* op = &ops[(*nops)++]; op->op = GRPC_OP_SEND_INITIAL_METADATA; op->flags = flags_; op->reserved = NULL; initial_metadata_ = FillMetadataArray(*metadata_map_, &initial_metadata_count_, ""); op->data.send_initial_metadata.count = initial_metadata_count_; op->data.send_initial_metadata.metadata = initial_metadata_; op->data.send_initial_metadata.maybe_compression_level.is_set = maybe_compression_level_.is_set; if (maybe_compression_level_.is_set) { op->data.send_initial_metadata.maybe_compression_level.level = maybe_compression_level_.level; } } void FinishOp(bool* /*status*/) { if (!send_ || hijacked_) return; g_core_codegen_interface->gpr_free(initial_metadata_); send_ = false; } void SetInterceptionHookPoint( InterceptorBatchMethodsImpl* interceptor_methods) { if (!send_) return; interceptor_methods->AddInterceptionHookPoint( experimental::InterceptionHookPoints::PRE_SEND_INITIAL_METADATA); interceptor_methods->SetSendInitialMetadata(metadata_map_); } void SetFinishInterceptionHookPoint( InterceptorBatchMethodsImpl* /*interceptor_methods*/) {} void SetHijackingState(InterceptorBatchMethodsImpl* /*interceptor_methods*/) { hijacked_ = true; } bool hijacked_ = false; bool send_; uint32_t flags_; size_t initial_metadata_count_; std::multimap* metadata_map_; grpc_metadata* initial_metadata_; struct { bool is_set; grpc_compression_level level; } maybe_compression_level_; }; class CallOpSendMessage { public: CallOpSendMessage() : send_buf_() {} /// Send \a message using \a options for the write. The \a options are cleared /// after use. template Status SendMessage(const M& message, WriteOptions options) GRPC_MUST_USE_RESULT; template Status SendMessage(const M& message) GRPC_MUST_USE_RESULT; /// Send \a message using \a options for the write. The \a options are cleared /// after use. This form of SendMessage allows gRPC to reference \a message /// beyond the lifetime of SendMessage. template Status SendMessagePtr(const M* message, WriteOptions options) GRPC_MUST_USE_RESULT; /// This form of SendMessage allows gRPC to reference \a message beyond the /// lifetime of SendMessage. template Status SendMessagePtr(const M* message) GRPC_MUST_USE_RESULT; protected: void AddOp(grpc_op* ops, size_t* nops) { if (msg_ == nullptr && !send_buf_.Valid()) return; if (hijacked_) { serializer_ = nullptr; return; } if (msg_ != nullptr) { GPR_CODEGEN_ASSERT(serializer_(msg_).ok()); } serializer_ = nullptr; grpc_op* op = &ops[(*nops)++]; op->op = GRPC_OP_SEND_MESSAGE; op->flags = write_options_.flags(); op->reserved = NULL; op->data.send_message.send_message = send_buf_.c_buffer(); // Flags are per-message: clear them after use. write_options_.Clear(); } void FinishOp(bool* status) { if (msg_ == nullptr && !send_buf_.Valid()) return; if (hijacked_ && failed_send_) { // Hijacking interceptor failed this Op *status = false; } else if (!*status) { // This Op was passed down to core and the Op failed failed_send_ = true; } } void SetInterceptionHookPoint( InterceptorBatchMethodsImpl* interceptor_methods) { if (msg_ == nullptr && !send_buf_.Valid()) return; interceptor_methods->AddInterceptionHookPoint( experimental::InterceptionHookPoints::PRE_SEND_MESSAGE); interceptor_methods->SetSendMessage(&send_buf_, &msg_, &failed_send_, serializer_); } void SetFinishInterceptionHookPoint( InterceptorBatchMethodsImpl* interceptor_methods) { if (msg_ != nullptr || send_buf_.Valid()) { interceptor_methods->AddInterceptionHookPoint( experimental::InterceptionHookPoints::POST_SEND_MESSAGE); } send_buf_.Clear(); msg_ = nullptr; // The contents of the SendMessage value that was previously set // has had its references stolen by core's operations interceptor_methods->SetSendMessage(nullptr, nullptr, &failed_send_, nullptr); } void SetHijackingState(InterceptorBatchMethodsImpl* /*interceptor_methods*/) { hijacked_ = true; } private: const void* msg_ = nullptr; // The original non-serialized message bool hijacked_ = false; bool failed_send_ = false; ByteBuffer send_buf_; WriteOptions write_options_; std::function serializer_; }; template Status CallOpSendMessage::SendMessage(const M& message, WriteOptions options) { write_options_ = options; serializer_ = [this](const void* message) { bool own_buf; send_buf_.Clear(); // TODO(vjpai): Remove the void below when possible // The void in the template parameter below should not be needed // (since it should be implicit) but is needed due to an observed // difference in behavior between clang and gcc for certain internal users Status result = SerializationTraits::Serialize( *static_cast(message), send_buf_.bbuf_ptr(), &own_buf); if (!own_buf) { send_buf_.Duplicate(); } return result; }; // Serialize immediately only if we do not have access to the message pointer if (msg_ == nullptr) { Status result = serializer_(&message); serializer_ = nullptr; return result; } return Status(); } template Status CallOpSendMessage::SendMessage(const M& message) { return SendMessage(message, WriteOptions()); } template Status CallOpSendMessage::SendMessagePtr(const M* message, WriteOptions options) { msg_ = message; return SendMessage(*message, options); } template Status CallOpSendMessage::SendMessagePtr(const M* message) { msg_ = message; return SendMessage(*message, WriteOptions()); } template class CallOpRecvMessage { public: void RecvMessage(R* message) { message_ = message; } // Do not change status if no message is received. void AllowNoMessage() { allow_not_getting_message_ = true; } bool got_message = false; protected: void AddOp(grpc_op* ops, size_t* nops) { if (message_ == nullptr || hijacked_) return; grpc_op* op = &ops[(*nops)++]; op->op = GRPC_OP_RECV_MESSAGE; op->flags = 0; op->reserved = NULL; op->data.recv_message.recv_message = recv_buf_.c_buffer_ptr(); } void FinishOp(bool* status) { if (message_ == nullptr) return; if (recv_buf_.Valid()) { if (*status) { got_message = *status = SerializationTraits::Deserialize(recv_buf_.bbuf_ptr(), message_) .ok(); recv_buf_.Release(); } else { got_message = false; recv_buf_.Clear(); } } else if (hijacked_) { if (hijacked_recv_message_failed_) { FinishOpRecvMessageFailureHandler(status); } else { // The op was hijacked and it was successful. There is no further action // to be performed since the message is already in its non-serialized // form. } } else { FinishOpRecvMessageFailureHandler(status); } } void SetInterceptionHookPoint( InterceptorBatchMethodsImpl* interceptor_methods) { if (message_ == nullptr) return; interceptor_methods->SetRecvMessage(message_, &hijacked_recv_message_failed_); } void SetFinishInterceptionHookPoint( InterceptorBatchMethodsImpl* interceptor_methods) { if (message_ == nullptr) return; interceptor_methods->AddInterceptionHookPoint( experimental::InterceptionHookPoints::POST_RECV_MESSAGE); if (!got_message) interceptor_methods->SetRecvMessage(nullptr, nullptr); } void SetHijackingState(InterceptorBatchMethodsImpl* interceptor_methods) { hijacked_ = true; if (message_ == nullptr) return; interceptor_methods->AddInterceptionHookPoint( experimental::InterceptionHookPoints::PRE_RECV_MESSAGE); got_message = true; } private: // Sets got_message and \a status for a failed recv message op void FinishOpRecvMessageFailureHandler(bool* status) { got_message = false; if (!allow_not_getting_message_) { *status = false; } } R* message_ = nullptr; ByteBuffer recv_buf_; bool allow_not_getting_message_ = false; bool hijacked_ = false; bool hijacked_recv_message_failed_ = false; }; class DeserializeFunc { public: virtual Status Deserialize(ByteBuffer* buf) = 0; virtual ~DeserializeFunc() {} }; template class DeserializeFuncType final : public DeserializeFunc { public: DeserializeFuncType(R* message) : message_(message) {} Status Deserialize(ByteBuffer* buf) override { return SerializationTraits::Deserialize(buf->bbuf_ptr(), message_); } ~DeserializeFuncType() override {} private: R* message_; // Not a managed pointer because management is external to this }; class CallOpGenericRecvMessage { public: template void RecvMessage(R* message) { // Use an explicit base class pointer to avoid resolution error in the // following unique_ptr::reset for some old implementations. DeserializeFunc* func = new DeserializeFuncType(message); deserialize_.reset(func); message_ = message; } // Do not change status if no message is received. void AllowNoMessage() { allow_not_getting_message_ = true; } bool got_message = false; protected: void AddOp(grpc_op* ops, size_t* nops) { if (!deserialize_ || hijacked_) return; grpc_op* op = &ops[(*nops)++]; op->op = GRPC_OP_RECV_MESSAGE; op->flags = 0; op->reserved = NULL; op->data.recv_message.recv_message = recv_buf_.c_buffer_ptr(); } void FinishOp(bool* status) { if (!deserialize_ || hijacked_) return; if (recv_buf_.Valid()) { if (*status) { got_message = true; *status = deserialize_->Deserialize(&recv_buf_).ok(); recv_buf_.Release(); } else { got_message = false; recv_buf_.Clear(); } } else if (hijacked_) { if (hijacked_recv_message_failed_) { FinishOpRecvMessageFailureHandler(status); } else { // The op was hijacked and it was successful. There is no further action // to be performed since the message is already in its non-serialized // form. } } else { got_message = false; if (!allow_not_getting_message_) { *status = false; } } } void SetInterceptionHookPoint( InterceptorBatchMethodsImpl* interceptor_methods) { if (!deserialize_) return; interceptor_methods->SetRecvMessage(message_, &hijacked_recv_message_failed_); } void SetFinishInterceptionHookPoint( InterceptorBatchMethodsImpl* interceptor_methods) { if (!deserialize_) return; interceptor_methods->AddInterceptionHookPoint( experimental::InterceptionHookPoints::POST_RECV_MESSAGE); if (!got_message) interceptor_methods->SetRecvMessage(nullptr, nullptr); deserialize_.reset(); } void SetHijackingState(InterceptorBatchMethodsImpl* interceptor_methods) { hijacked_ = true; if (!deserialize_) return; interceptor_methods->AddInterceptionHookPoint( experimental::InterceptionHookPoints::PRE_RECV_MESSAGE); got_message = true; } private: // Sets got_message and \a status for a failed recv message op void FinishOpRecvMessageFailureHandler(bool* status) { got_message = false; if (!allow_not_getting_message_) { *status = false; } } void* message_ = nullptr; std::unique_ptr deserialize_; ByteBuffer recv_buf_; bool allow_not_getting_message_ = false; bool hijacked_ = false; bool hijacked_recv_message_failed_ = false; }; class CallOpClientSendClose { public: CallOpClientSendClose() : send_(false) {} void ClientSendClose() { send_ = true; } protected: void AddOp(grpc_op* ops, size_t* nops) { if (!send_ || hijacked_) return; grpc_op* op = &ops[(*nops)++]; op->op = GRPC_OP_SEND_CLOSE_FROM_CLIENT; op->flags = 0; op->reserved = NULL; } void FinishOp(bool* /*status*/) { send_ = false; } void SetInterceptionHookPoint( InterceptorBatchMethodsImpl* interceptor_methods) { if (!send_) return; interceptor_methods->AddInterceptionHookPoint( experimental::InterceptionHookPoints::PRE_SEND_CLOSE); } void SetFinishInterceptionHookPoint( InterceptorBatchMethodsImpl* /*interceptor_methods*/) {} void SetHijackingState(InterceptorBatchMethodsImpl* /*interceptor_methods*/) { hijacked_ = true; } private: bool hijacked_ = false; bool send_; }; class CallOpServerSendStatus { public: CallOpServerSendStatus() : send_status_available_(false) {} void ServerSendStatus( std::multimap* trailing_metadata, const Status& status) { send_error_details_ = status.error_details(); metadata_map_ = trailing_metadata; send_status_available_ = true; send_status_code_ = static_cast(status.error_code()); send_error_message_ = status.error_message(); } protected: void AddOp(grpc_op* ops, size_t* nops) { if (!send_status_available_ || hijacked_) return; trailing_metadata_ = FillMetadataArray( *metadata_map_, &trailing_metadata_count_, send_error_details_); grpc_op* op = &ops[(*nops)++]; op->op = GRPC_OP_SEND_STATUS_FROM_SERVER; op->data.send_status_from_server.trailing_metadata_count = trailing_metadata_count_; op->data.send_status_from_server.trailing_metadata = trailing_metadata_; op->data.send_status_from_server.status = send_status_code_; error_message_slice_ = SliceReferencingString(send_error_message_); op->data.send_status_from_server.status_details = send_error_message_.empty() ? nullptr : &error_message_slice_; op->flags = 0; op->reserved = NULL; } void FinishOp(bool* /*status*/) { if (!send_status_available_ || hijacked_) return; g_core_codegen_interface->gpr_free(trailing_metadata_); send_status_available_ = false; } void SetInterceptionHookPoint( InterceptorBatchMethodsImpl* interceptor_methods) { if (!send_status_available_) return; interceptor_methods->AddInterceptionHookPoint( experimental::InterceptionHookPoints::PRE_SEND_STATUS); interceptor_methods->SetSendTrailingMetadata(metadata_map_); interceptor_methods->SetSendStatus(&send_status_code_, &send_error_details_, &send_error_message_); } void SetFinishInterceptionHookPoint( InterceptorBatchMethodsImpl* /*interceptor_methods*/) {} void SetHijackingState(InterceptorBatchMethodsImpl* /*interceptor_methods*/) { hijacked_ = true; } private: bool hijacked_ = false; bool send_status_available_; grpc_status_code send_status_code_; grpc::string send_error_details_; grpc::string send_error_message_; size_t trailing_metadata_count_; std::multimap* metadata_map_; grpc_metadata* trailing_metadata_; grpc_slice error_message_slice_; }; class CallOpRecvInitialMetadata { public: CallOpRecvInitialMetadata() : metadata_map_(nullptr) {} void RecvInitialMetadata(::grpc_impl::ClientContext* context) { context->initial_metadata_received_ = true; metadata_map_ = &context->recv_initial_metadata_; } protected: void AddOp(grpc_op* ops, size_t* nops) { if (metadata_map_ == nullptr || hijacked_) return; grpc_op* op = &ops[(*nops)++]; op->op = GRPC_OP_RECV_INITIAL_METADATA; op->data.recv_initial_metadata.recv_initial_metadata = metadata_map_->arr(); op->flags = 0; op->reserved = NULL; } void FinishOp(bool* /*status*/) { if (metadata_map_ == nullptr || hijacked_) return; } void SetInterceptionHookPoint( InterceptorBatchMethodsImpl* interceptor_methods) { interceptor_methods->SetRecvInitialMetadata(metadata_map_); } void SetFinishInterceptionHookPoint( InterceptorBatchMethodsImpl* interceptor_methods) { if (metadata_map_ == nullptr) return; interceptor_methods->AddInterceptionHookPoint( experimental::InterceptionHookPoints::POST_RECV_INITIAL_METADATA); metadata_map_ = nullptr; } void SetHijackingState(InterceptorBatchMethodsImpl* interceptor_methods) { hijacked_ = true; if (metadata_map_ == nullptr) return; interceptor_methods->AddInterceptionHookPoint( experimental::InterceptionHookPoints::PRE_RECV_INITIAL_METADATA); } private: bool hijacked_ = false; MetadataMap* metadata_map_; }; class CallOpClientRecvStatus { public: CallOpClientRecvStatus() : recv_status_(nullptr), debug_error_string_(nullptr) {} void ClientRecvStatus(::grpc_impl::ClientContext* context, Status* status) { client_context_ = context; metadata_map_ = &client_context_->trailing_metadata_; recv_status_ = status; error_message_ = g_core_codegen_interface->grpc_empty_slice(); } protected: void AddOp(grpc_op* ops, size_t* nops) { if (recv_status_ == nullptr || hijacked_) return; grpc_op* op = &ops[(*nops)++]; op->op = GRPC_OP_RECV_STATUS_ON_CLIENT; op->data.recv_status_on_client.trailing_metadata = metadata_map_->arr(); op->data.recv_status_on_client.status = &status_code_; op->data.recv_status_on_client.status_details = &error_message_; op->data.recv_status_on_client.error_string = &debug_error_string_; op->flags = 0; op->reserved = NULL; } void FinishOp(bool* /*status*/) { if (recv_status_ == nullptr || hijacked_) return; if (static_cast(status_code_) == StatusCode::OK) { *recv_status_ = Status(); GPR_CODEGEN_DEBUG_ASSERT(debug_error_string_ == nullptr); } else { *recv_status_ = Status(static_cast(status_code_), GRPC_SLICE_IS_EMPTY(error_message_) ? grpc::string() : grpc::string(GRPC_SLICE_START_PTR(error_message_), GRPC_SLICE_END_PTR(error_message_)), metadata_map_->GetBinaryErrorDetails()); if (debug_error_string_ != nullptr) { client_context_->set_debug_error_string(debug_error_string_); g_core_codegen_interface->gpr_free((void*)debug_error_string_); } } // TODO(soheil): Find callers that set debug string even for status OK, // and fix them. g_core_codegen_interface->grpc_slice_unref(error_message_); } void SetInterceptionHookPoint( InterceptorBatchMethodsImpl* interceptor_methods) { interceptor_methods->SetRecvStatus(recv_status_); interceptor_methods->SetRecvTrailingMetadata(metadata_map_); } void SetFinishInterceptionHookPoint( InterceptorBatchMethodsImpl* interceptor_methods) { if (recv_status_ == nullptr) return; interceptor_methods->AddInterceptionHookPoint( experimental::InterceptionHookPoints::POST_RECV_STATUS); recv_status_ = nullptr; } void SetHijackingState(InterceptorBatchMethodsImpl* interceptor_methods) { hijacked_ = true; if (recv_status_ == nullptr) return; interceptor_methods->AddInterceptionHookPoint( experimental::InterceptionHookPoints::PRE_RECV_STATUS); } private: bool hijacked_ = false; ::grpc_impl::ClientContext* client_context_; MetadataMap* metadata_map_; Status* recv_status_; const char* debug_error_string_; grpc_status_code status_code_; grpc_slice error_message_; }; template , class Op2 = CallNoOp<2>, class Op3 = CallNoOp<3>, class Op4 = CallNoOp<4>, class Op5 = CallNoOp<5>, class Op6 = CallNoOp<6>> class CallOpSet; /// Primary implementation of CallOpSetInterface. /// Since we cannot use variadic templates, we declare slots up to /// the maximum count of ops we'll need in a set. We leverage the /// empty base class optimization to slim this class (especially /// when there are many unused slots used). To avoid duplicate base classes, /// the template parameter for CallNoOp is varied by argument position. template class CallOpSet : public CallOpSetInterface, public Op1, public Op2, public Op3, public Op4, public Op5, public Op6 { public: CallOpSet() : core_cq_tag_(this), return_tag_(this) {} // The copy constructor and assignment operator reset the value of // core_cq_tag_, return_tag_, done_intercepting_ and interceptor_methods_ // since those are only meaningful on a specific object, not across objects. CallOpSet(const CallOpSet& other) : core_cq_tag_(this), return_tag_(this), call_(other.call_), done_intercepting_(false), interceptor_methods_(InterceptorBatchMethodsImpl()) {} CallOpSet& operator=(const CallOpSet& other) { core_cq_tag_ = this; return_tag_ = this; call_ = other.call_; done_intercepting_ = false; interceptor_methods_ = InterceptorBatchMethodsImpl(); return *this; } void FillOps(Call* call) override { done_intercepting_ = false; g_core_codegen_interface->grpc_call_ref(call->call()); call_ = *call; // It's fine to create a copy of call since it's just pointers if (RunInterceptors()) { ContinueFillOpsAfterInterception(); } else { // After the interceptors are run, ContinueFillOpsAfterInterception will // be run } } bool FinalizeResult(void** tag, bool* status) override { if (done_intercepting_) { // Complete the avalanching since we are done with this batch of ops call_.cq()->CompleteAvalanching(); // We have already finished intercepting and filling in the results. This // round trip from the core needed to be made because interceptors were // run *tag = return_tag_; *status = saved_status_; g_core_codegen_interface->grpc_call_unref(call_.call()); return true; } this->Op1::FinishOp(status); this->Op2::FinishOp(status); this->Op3::FinishOp(status); this->Op4::FinishOp(status); this->Op5::FinishOp(status); this->Op6::FinishOp(status); saved_status_ = *status; if (RunInterceptorsPostRecv()) { *tag = return_tag_; g_core_codegen_interface->grpc_call_unref(call_.call()); return true; } // Interceptors are going to be run, so we can't return the tag just yet. // After the interceptors are run, ContinueFinalizeResultAfterInterception return false; } void set_output_tag(void* return_tag) { return_tag_ = return_tag; } void* core_cq_tag() override { return core_cq_tag_; } /// set_core_cq_tag is used to provide a different core CQ tag than "this". /// This is used for callback-based tags, where the core tag is the core /// callback function. It does not change the use or behavior of any other /// function (such as FinalizeResult) void set_core_cq_tag(void* core_cq_tag) { core_cq_tag_ = core_cq_tag; } // This will be called while interceptors are run if the RPC is a hijacked // RPC. This should set hijacking state for each of the ops. void SetHijackingState() override { this->Op1::SetHijackingState(&interceptor_methods_); this->Op2::SetHijackingState(&interceptor_methods_); this->Op3::SetHijackingState(&interceptor_methods_); this->Op4::SetHijackingState(&interceptor_methods_); this->Op5::SetHijackingState(&interceptor_methods_); this->Op6::SetHijackingState(&interceptor_methods_); } // Should be called after interceptors are done running void ContinueFillOpsAfterInterception() override { static const size_t MAX_OPS = 6; grpc_op ops[MAX_OPS]; size_t nops = 0; this->Op1::AddOp(ops, &nops); this->Op2::AddOp(ops, &nops); this->Op3::AddOp(ops, &nops); this->Op4::AddOp(ops, &nops); this->Op5::AddOp(ops, &nops); this->Op6::AddOp(ops, &nops); grpc_call_error err = g_core_codegen_interface->grpc_call_start_batch( call_.call(), ops, nops, core_cq_tag(), nullptr); if (err != GRPC_CALL_OK) { // A failure here indicates an API misuse; for example, doing a Write // while another Write is already pending on the same RPC or invoking // WritesDone multiple times // gpr_log(GPR_ERROR, "API misuse of type %s observed", // g_core_codegen_interface->grpc_call_error_to_string(err)); GPR_CODEGEN_ASSERT(false); } } // Should be called after interceptors are done running on the finalize result // path void ContinueFinalizeResultAfterInterception() override { done_intercepting_ = true; // The following call_start_batch is internally-generated so no need for an // explanatory log on failure. GPR_CODEGEN_ASSERT(g_core_codegen_interface->grpc_call_start_batch( call_.call(), nullptr, 0, core_cq_tag(), nullptr) == GRPC_CALL_OK); } private: // Returns true if no interceptors need to be run bool RunInterceptors() { interceptor_methods_.ClearState(); interceptor_methods_.SetCallOpSetInterface(this); interceptor_methods_.SetCall(&call_); this->Op1::SetInterceptionHookPoint(&interceptor_methods_); this->Op2::SetInterceptionHookPoint(&interceptor_methods_); this->Op3::SetInterceptionHookPoint(&interceptor_methods_); this->Op4::SetInterceptionHookPoint(&interceptor_methods_); this->Op5::SetInterceptionHookPoint(&interceptor_methods_); this->Op6::SetInterceptionHookPoint(&interceptor_methods_); if (interceptor_methods_.InterceptorsListEmpty()) { return true; } // This call will go through interceptors and would need to // schedule new batches, so delay completion queue shutdown call_.cq()->RegisterAvalanching(); return interceptor_methods_.RunInterceptors(); } // Returns true if no interceptors need to be run bool RunInterceptorsPostRecv() { // Call and OpSet had already been set on the set state. // SetReverse also clears previously set hook points interceptor_methods_.SetReverse(); this->Op1::SetFinishInterceptionHookPoint(&interceptor_methods_); this->Op2::SetFinishInterceptionHookPoint(&interceptor_methods_); this->Op3::SetFinishInterceptionHookPoint(&interceptor_methods_); this->Op4::SetFinishInterceptionHookPoint(&interceptor_methods_); this->Op5::SetFinishInterceptionHookPoint(&interceptor_methods_); this->Op6::SetFinishInterceptionHookPoint(&interceptor_methods_); return interceptor_methods_.RunInterceptors(); } void* core_cq_tag_; void* return_tag_; Call call_; bool done_intercepting_ = false; InterceptorBatchMethodsImpl interceptor_methods_; bool saved_status_; }; } // namespace internal } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_CALL_OP_SET_H grpc-1.30.2/include/grpcpp/impl/codegen/call_op_set_interface.h000066400000000000000000000040401370425124100244650ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_CALL_OP_SET_INTERFACE_H #define GRPCPP_IMPL_CODEGEN_CALL_OP_SET_INTERFACE_H #include namespace grpc { namespace internal { class Call; /// An abstract collection of call ops, used to generate the /// grpc_call_op structure to pass down to the lower layers, /// and as it is-a CompletionQueueTag, also massages the final /// completion into the correct form for consumption in the C++ /// API. class CallOpSetInterface : public CompletionQueueTag { public: /// Fills in grpc_op, starting from ops[*nops] and moving /// upwards. virtual void FillOps(internal::Call* call) = 0; /// Get the tag to be used at the core completion queue. Generally, the /// value of core_cq_tag will be "this". However, it can be overridden if we /// want core to process the tag differently (e.g., as a core callback) virtual void* core_cq_tag() = 0; // This will be called while interceptors are run if the RPC is a hijacked // RPC. This should set hijacking state for each of the ops. virtual void SetHijackingState() = 0; // Should be called after interceptors are done running virtual void ContinueFillOpsAfterInterception() = 0; // Should be called after interceptors are done running on the finalize result // path virtual void ContinueFinalizeResultAfterInterception() = 0; }; } // namespace internal } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_CALL_OP_SET_INTERFACE_H grpc-1.30.2/include/grpcpp/impl/codegen/callback_common.h000066400000000000000000000174311370425124100232750ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_CALLBACK_COMMON_H #define GRPCPP_IMPL_CODEGEN_CALLBACK_COMMON_H #include #include #include #include #include #include #include namespace grpc { namespace internal { /// An exception-safe way of invoking a user-specified callback function // TODO(vjpai): decide whether it is better for this to take a const lvalue // parameter or an rvalue parameter, or if it even matters template void CatchingCallback(Func&& func, Args&&... args) { #if GRPC_ALLOW_EXCEPTIONS try { func(std::forward(args)...); } catch (...) { // nothing to return or change here, just don't crash the library } #else // GRPC_ALLOW_EXCEPTIONS func(std::forward(args)...); #endif // GRPC_ALLOW_EXCEPTIONS } template Reactor* CatchingReactorGetter(Func&& func, Args&&... args) { #if GRPC_ALLOW_EXCEPTIONS try { return func(std::forward(args)...); } catch (...) { // fail the RPC, don't crash the library return nullptr; } #else // GRPC_ALLOW_EXCEPTIONS return func(std::forward(args)...); #endif // GRPC_ALLOW_EXCEPTIONS } // The contract on these tags is that they are single-shot. They must be // constructed and then fired at exactly one point. There is no expectation // that they can be reused without reconstruction. class CallbackWithStatusTag : public grpc_experimental_completion_queue_functor { public: // always allocated against a call arena, no memory free required static void operator delete(void* /*ptr*/, std::size_t size) { GPR_CODEGEN_ASSERT(size == sizeof(CallbackWithStatusTag)); } // This operator should never be called as the memory should be freed as part // of the arena destruction. It only exists to provide a matching operator // delete to the operator new so that some compilers will not complain (see // https://github.com/grpc/grpc/issues/11301) Note at the time of adding this // there are no tests catching the compiler warning. static void operator delete(void*, void*) { GPR_CODEGEN_ASSERT(false); } CallbackWithStatusTag(grpc_call* call, std::function f, CompletionQueueTag* ops) : call_(call), func_(std::move(f)), ops_(ops) { g_core_codegen_interface->grpc_call_ref(call); functor_run = &CallbackWithStatusTag::StaticRun; // A client-side callback should never be run inline since they will always // have work to do from the user application. So, set the parent's // inlineable field to false inlineable = false; } ~CallbackWithStatusTag() {} Status* status_ptr() { return &status_; } // force_run can not be performed on a tag if operations using this tag // have been sent to PerformOpsOnCall. It is intended for error conditions // that are detected before the operations are internally processed. void force_run(Status s) { status_ = std::move(s); Run(true); } private: grpc_call* call_; std::function func_; CompletionQueueTag* ops_; Status status_; static void StaticRun(grpc_experimental_completion_queue_functor* cb, int ok) { static_cast(cb)->Run(static_cast(ok)); } void Run(bool ok) { void* ignored = ops_; if (!ops_->FinalizeResult(&ignored, &ok)) { // The tag was swallowed return; } GPR_CODEGEN_ASSERT(ignored == ops_); // Last use of func_ or status_, so ok to move them out auto func = std::move(func_); auto status = std::move(status_); func_ = nullptr; // reset to clear this out for sure status_ = Status(); // reset to clear this out for sure CatchingCallback(std::move(func), std::move(status)); g_core_codegen_interface->grpc_call_unref(call_); } }; /// CallbackWithSuccessTag can be reused multiple times, and will be used in /// this fashion for streaming operations. As a result, it shouldn't clear /// anything up until its destructor class CallbackWithSuccessTag : public grpc_experimental_completion_queue_functor { public: // always allocated against a call arena, no memory free required static void operator delete(void* /*ptr*/, std::size_t size) { GPR_CODEGEN_ASSERT(size == sizeof(CallbackWithSuccessTag)); } // This operator should never be called as the memory should be freed as part // of the arena destruction. It only exists to provide a matching operator // delete to the operator new so that some compilers will not complain (see // https://github.com/grpc/grpc/issues/11301) Note at the time of adding this // there are no tests catching the compiler warning. static void operator delete(void*, void*) { GPR_CODEGEN_ASSERT(false); } CallbackWithSuccessTag() : call_(nullptr) {} CallbackWithSuccessTag(const CallbackWithSuccessTag&) = delete; CallbackWithSuccessTag& operator=(const CallbackWithSuccessTag&) = delete; ~CallbackWithSuccessTag() { Clear(); } // Set can only be called on a default-constructed or Clear'ed tag. // It should never be called on a tag that was constructed with arguments // or on a tag that has been Set before unless the tag has been cleared. // can_inline indicates that this particular callback can be executed inline // (without needing a thread hop) and is only used for library-provided server // callbacks. void Set(grpc_call* call, std::function f, CompletionQueueTag* ops, bool can_inline) { GPR_CODEGEN_ASSERT(call_ == nullptr); g_core_codegen_interface->grpc_call_ref(call); call_ = call; func_ = std::move(f); ops_ = ops; functor_run = &CallbackWithSuccessTag::StaticRun; inlineable = can_inline; } void Clear() { if (call_ != nullptr) { grpc_call* call = call_; call_ = nullptr; func_ = nullptr; g_core_codegen_interface->grpc_call_unref(call); } } CompletionQueueTag* ops() { return ops_; } // force_run can not be performed on a tag if operations using this tag // have been sent to PerformOpsOnCall. It is intended for error conditions // that are detected before the operations are internally processed. void force_run(bool ok) { Run(ok); } /// check if this tag is currently set operator bool() const { return call_ != nullptr; } private: grpc_call* call_; std::function func_; CompletionQueueTag* ops_; static void StaticRun(grpc_experimental_completion_queue_functor* cb, int ok) { static_cast(cb)->Run(static_cast(ok)); } void Run(bool ok) { void* ignored = ops_; // Allow a "false" return value from FinalizeResult to silence the // callback, just as it silences a CQ tag in the async cases #ifndef NDEBUG auto* ops = ops_; #endif bool do_callback = ops_->FinalizeResult(&ignored, &ok); GPR_CODEGEN_DEBUG_ASSERT(ignored == ops); if (do_callback) { CatchingCallback(func_, ok); } } }; } // namespace internal } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_CALLBACK_COMMON_H grpc-1.30.2/include/grpcpp/impl/codegen/channel_interface.h000066400000000000000000000151211370425124100236130ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_CHANNEL_INTERFACE_H #define GRPCPP_IMPL_CODEGEN_CHANNEL_INTERFACE_H #include #include #include #include namespace grpc_impl { class ClientContext; class CompletionQueue; template class ClientReader; template class ClientWriter; template class ClientReaderWriter; namespace internal { template class CallbackUnaryCallImpl; template class ClientAsyncReaderFactory; template class ClientAsyncWriterFactory; template class ClientAsyncReaderWriterFactory; template class ClientAsyncResponseReaderFactory; template class ClientCallbackReaderWriterFactory; template class ClientCallbackReaderFactory; template class ClientCallbackWriterFactory; class ClientCallbackUnaryFactory; } // namespace internal } // namespace grpc_impl namespace grpc { class ChannelInterface; namespace experimental { class DelegatingChannel; } namespace internal { class Call; class CallOpSetInterface; class RpcMethod; class InterceptedChannel; template class BlockingUnaryCallImpl; } // namespace internal /// Codegen interface for \a grpc::Channel. class ChannelInterface { public: virtual ~ChannelInterface() {} /// Get the current channel state. If the channel is in IDLE and /// \a try_to_connect is set to true, try to connect. virtual grpc_connectivity_state GetState(bool try_to_connect) = 0; /// Return the \a tag on \a cq when the channel state is changed or \a /// deadline expires. \a GetState needs to called to get the current state. template void NotifyOnStateChange(grpc_connectivity_state last_observed, T deadline, ::grpc_impl::CompletionQueue* cq, void* tag) { TimePoint deadline_tp(deadline); NotifyOnStateChangeImpl(last_observed, deadline_tp.raw_time(), cq, tag); } /// Blocking wait for channel state change or \a deadline expiration. /// \a GetState needs to called to get the current state. template bool WaitForStateChange(grpc_connectivity_state last_observed, T deadline) { TimePoint deadline_tp(deadline); return WaitForStateChangeImpl(last_observed, deadline_tp.raw_time()); } /// Wait for this channel to be connected template bool WaitForConnected(T deadline) { grpc_connectivity_state state; while ((state = GetState(true)) != GRPC_CHANNEL_READY) { if (!WaitForStateChange(state, deadline)) return false; } return true; } private: template friend class ::grpc_impl::ClientReader; template friend class ::grpc_impl::ClientWriter; template friend class ::grpc_impl::ClientReaderWriter; template friend class ::grpc_impl::internal::ClientAsyncReaderFactory; template friend class ::grpc_impl::internal::ClientAsyncWriterFactory; template friend class ::grpc_impl::internal::ClientAsyncReaderWriterFactory; template friend class ::grpc_impl::internal::ClientAsyncResponseReaderFactory; template friend class ::grpc_impl::internal::ClientCallbackReaderWriterFactory; template friend class ::grpc_impl::internal::ClientCallbackReaderFactory; template friend class ::grpc_impl::internal::ClientCallbackWriterFactory; friend class ::grpc_impl::internal::ClientCallbackUnaryFactory; template friend class ::grpc::internal::BlockingUnaryCallImpl; template friend class ::grpc_impl::internal::CallbackUnaryCallImpl; friend class ::grpc::internal::RpcMethod; friend class ::grpc::experimental::DelegatingChannel; friend class ::grpc::internal::InterceptedChannel; virtual internal::Call CreateCall(const internal::RpcMethod& method, ::grpc_impl::ClientContext* context, ::grpc_impl::CompletionQueue* cq) = 0; virtual void PerformOpsOnCall(internal::CallOpSetInterface* ops, internal::Call* call) = 0; virtual void* RegisterMethod(const char* method) = 0; virtual void NotifyOnStateChangeImpl(grpc_connectivity_state last_observed, gpr_timespec deadline, ::grpc_impl::CompletionQueue* cq, void* tag) = 0; virtual bool WaitForStateChangeImpl(grpc_connectivity_state last_observed, gpr_timespec deadline) = 0; // EXPERIMENTAL // This is needed to keep codegen_test_minimal happy. InterceptedChannel needs // to make use of this but can't directly call Channel's implementation // because of the test. // Returns an empty Call object (rather than being pure) since this is a new // method and adding a new pure method to an interface would be a breaking // change (even though this is private and non-API) virtual internal::Call CreateCallInternal( const internal::RpcMethod& /*method*/, ::grpc_impl::ClientContext* /*context*/, ::grpc_impl::CompletionQueue* /*cq*/, size_t /*interceptor_pos*/) { return internal::Call(); } // EXPERIMENTAL // A method to get the callbackable completion queue associated with this // channel. If the return value is nullptr, this channel doesn't support // callback operations. // TODO(vjpai): Consider a better default like using a global CQ // Returns nullptr (rather than being pure) since this is a post-1.0 method // and adding a new pure method to an interface would be a breaking change // (even though this is private and non-API) virtual ::grpc_impl::CompletionQueue* CallbackCQ() { return nullptr; } }; } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_CHANNEL_INTERFACE_H grpc-1.30.2/include/grpcpp/impl/codegen/client_callback.h000066400000000000000000000046141370425124100232620ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_CLIENT_CALLBACK_H #define GRPCPP_IMPL_CODEGEN_CLIENT_CALLBACK_H #include namespace grpc { #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL template using ClientCallbackReader = ::grpc_impl::ClientCallbackReader; template using ClientCallbackWriter = ::grpc_impl::ClientCallbackWriter; template using ClientCallbackReaderWriter = ::grpc_impl::ClientCallbackReaderWriter; template using ClientReadReactor = ::grpc_impl::ClientReadReactor; template using ClientWriteReactor = ::grpc_impl::ClientWriteReactor; template using ClientBidiReactor = ::grpc_impl::ClientBidiReactor; typedef ::grpc_impl::ClientUnaryReactor ClientUnaryReactor; #endif // TODO(vjpai): Remove namespace experimental when de-experimentalized fully. namespace experimental { template using ClientCallbackReader = ::grpc_impl::ClientCallbackReader; template using ClientCallbackWriter = ::grpc_impl::ClientCallbackWriter; template using ClientCallbackReaderWriter = ::grpc_impl::ClientCallbackReaderWriter; template using ClientReadReactor = ::grpc_impl::ClientReadReactor; template using ClientWriteReactor = ::grpc_impl::ClientWriteReactor; template using ClientBidiReactor = ::grpc_impl::ClientBidiReactor; typedef ::grpc_impl::ClientUnaryReactor ClientUnaryReactor; } // namespace experimental } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_CLIENT_CALLBACK_H grpc-1.30.2/include/grpcpp/impl/codegen/client_callback_impl.h000066400000000000000000001217511370425124100243050ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. */ #ifndef GRPCPP_IMPL_CODEGEN_CLIENT_CALLBACK_IMPL_H #define GRPCPP_IMPL_CODEGEN_CLIENT_CALLBACK_IMPL_H #include #include #include #include #include #include #include #include #include namespace grpc { namespace internal { class RpcMethod; } // namespace internal } // namespace grpc namespace grpc_impl { class Channel; class ClientContext; namespace internal { /// Perform a callback-based unary call /// TODO(vjpai): Combine as much as possible with the blocking unary call code template void CallbackUnaryCall(::grpc::ChannelInterface* channel, const ::grpc::internal::RpcMethod& method, ::grpc_impl::ClientContext* context, const InputMessage* request, OutputMessage* result, std::function on_completion) { CallbackUnaryCallImpl x( channel, method, context, request, result, on_completion); } template class CallbackUnaryCallImpl { public: CallbackUnaryCallImpl(::grpc::ChannelInterface* channel, const ::grpc::internal::RpcMethod& method, ::grpc_impl::ClientContext* context, const InputMessage* request, OutputMessage* result, std::function on_completion) { ::grpc_impl::CompletionQueue* cq = channel->CallbackCQ(); GPR_CODEGEN_ASSERT(cq != nullptr); grpc::internal::Call call(channel->CreateCall(method, context, cq)); using FullCallOpSet = grpc::internal::CallOpSet< ::grpc::internal::CallOpSendInitialMetadata, grpc::internal::CallOpSendMessage, grpc::internal::CallOpRecvInitialMetadata, grpc::internal::CallOpRecvMessage, grpc::internal::CallOpClientSendClose, grpc::internal::CallOpClientRecvStatus>; struct OpSetAndTag { FullCallOpSet opset; grpc::internal::CallbackWithStatusTag tag; }; const size_t alloc_sz = sizeof(OpSetAndTag); auto* const alloced = static_cast( ::grpc::g_core_codegen_interface->grpc_call_arena_alloc(call.call(), alloc_sz)); auto* ops = new (&alloced->opset) FullCallOpSet; auto* tag = new (&alloced->tag) grpc::internal::CallbackWithStatusTag(call.call(), on_completion, ops); // TODO(vjpai): Unify code with sync API as much as possible ::grpc::Status s = ops->SendMessagePtr(request); if (!s.ok()) { tag->force_run(s); return; } ops->SendInitialMetadata(&context->send_initial_metadata_, context->initial_metadata_flags()); ops->RecvInitialMetadata(context); ops->RecvMessage(result); ops->AllowNoMessage(); ops->ClientSendClose(); ops->ClientRecvStatus(context, tag->status_ptr()); ops->set_core_cq_tag(tag); call.PerformOps(ops); } }; } // namespace internal // Forward declarations template class ClientBidiReactor; template class ClientReadReactor; template class ClientWriteReactor; class ClientUnaryReactor; // NOTE: The streaming objects are not actually implemented in the public API. // These interfaces are provided for mocking only. Typical applications // will interact exclusively with the reactors that they define. template class ClientCallbackReaderWriter { public: virtual ~ClientCallbackReaderWriter() {} virtual void StartCall() = 0; virtual void Write(const Request* req, ::grpc::WriteOptions options) = 0; virtual void WritesDone() = 0; virtual void Read(Response* resp) = 0; virtual void AddHold(int holds) = 0; virtual void RemoveHold() = 0; protected: void BindReactor(ClientBidiReactor* reactor) { reactor->BindStream(this); } }; template class ClientCallbackReader { public: virtual ~ClientCallbackReader() {} virtual void StartCall() = 0; virtual void Read(Response* resp) = 0; virtual void AddHold(int holds) = 0; virtual void RemoveHold() = 0; protected: void BindReactor(ClientReadReactor* reactor) { reactor->BindReader(this); } }; template class ClientCallbackWriter { public: virtual ~ClientCallbackWriter() {} virtual void StartCall() = 0; void Write(const Request* req) { Write(req, ::grpc::WriteOptions()); } virtual void Write(const Request* req, ::grpc::WriteOptions options) = 0; void WriteLast(const Request* req, ::grpc::WriteOptions options) { Write(req, options.set_last_message()); } virtual void WritesDone() = 0; virtual void AddHold(int holds) = 0; virtual void RemoveHold() = 0; protected: void BindReactor(ClientWriteReactor* reactor) { reactor->BindWriter(this); } }; class ClientCallbackUnary { public: virtual ~ClientCallbackUnary() {} virtual void StartCall() = 0; protected: void BindReactor(ClientUnaryReactor* reactor); }; // The following classes are the reactor interfaces that are to be implemented // by the user. They are passed in to the library as an argument to a call on a // stub (either a codegen-ed call or a generic call). The streaming RPC is // activated by calling StartCall, possibly after initiating StartRead, // StartWrite, or AddHold operations on the streaming object. Note that none of // the classes are pure; all reactions have a default empty reaction so that the // user class only needs to override those classes that it cares about. // The reactor must be passed to the stub invocation before any of the below // operations can be called. /// \a ClientBidiReactor is the interface for a bidirectional streaming RPC. template class ClientBidiReactor { public: virtual ~ClientBidiReactor() {} /// Activate the RPC and initiate any reads or writes that have been Start'ed /// before this call. All streaming RPCs issued by the client MUST have /// StartCall invoked on them (even if they are canceled) as this call is the /// activation of their lifecycle. void StartCall() { stream_->StartCall(); } /// Initiate a read operation (or post it for later initiation if StartCall /// has not yet been invoked). /// /// \param[out] resp Where to eventually store the read message. Valid when /// the library calls OnReadDone void StartRead(Response* resp) { stream_->Read(resp); } /// Initiate a write operation (or post it for later initiation if StartCall /// has not yet been invoked). /// /// \param[in] req The message to be written. The library does not take /// ownership but the caller must ensure that the message is /// not deleted or modified until OnWriteDone is called. void StartWrite(const Request* req) { StartWrite(req, ::grpc::WriteOptions()); } /// Initiate/post a write operation with specified options. /// /// \param[in] req The message to be written. The library does not take /// ownership but the caller must ensure that the message is /// not deleted or modified until OnWriteDone is called. /// \param[in] options The WriteOptions to use for writing this message void StartWrite(const Request* req, ::grpc::WriteOptions options) { stream_->Write(req, std::move(options)); } /// Initiate/post a write operation with specified options and an indication /// that this is the last write (like StartWrite and StartWritesDone, merged). /// Note that calling this means that no more calls to StartWrite, /// StartWriteLast, or StartWritesDone are allowed. /// /// \param[in] req The message to be written. The library does not take /// ownership but the caller must ensure that the message is /// not deleted or modified until OnWriteDone is called. /// \param[in] options The WriteOptions to use for writing this message void StartWriteLast(const Request* req, ::grpc::WriteOptions options) { StartWrite(req, std::move(options.set_last_message())); } /// Indicate that the RPC will have no more write operations. This can only be /// issued once for a given RPC. This is not required or allowed if /// StartWriteLast is used since that already has the same implication. /// Note that calling this means that no more calls to StartWrite, /// StartWriteLast, or StartWritesDone are allowed. void StartWritesDone() { stream_->WritesDone(); } /// Holds are needed if (and only if) this stream has operations that take /// place on it after StartCall but from outside one of the reactions /// (OnReadDone, etc). This is _not_ a common use of the streaming API. /// /// Holds must be added before calling StartCall. If a stream still has a hold /// in place, its resources will not be destroyed even if the status has /// already come in from the wire and there are currently no active callbacks /// outstanding. Similarly, the stream will not call OnDone if there are still /// holds on it. /// /// For example, if a StartRead or StartWrite operation is going to be /// initiated from elsewhere in the application, the application should call /// AddHold or AddMultipleHolds before StartCall. If there is going to be, /// for example, a read-flow and a write-flow taking place outside the /// reactions, then call AddMultipleHolds(2) before StartCall. When the /// application knows that it won't issue any more read operations (such as /// when a read comes back as not ok), it should issue a RemoveHold(). It /// should also call RemoveHold() again after it does StartWriteLast or /// StartWritesDone that indicates that there will be no more write ops. /// The number of RemoveHold calls must match the total number of AddHold /// calls plus the number of holds added by AddMultipleHolds. /// The argument to AddMultipleHolds must be positive. void AddHold() { AddMultipleHolds(1); } void AddMultipleHolds(int holds) { GPR_CODEGEN_DEBUG_ASSERT(holds > 0); stream_->AddHold(holds); } void RemoveHold() { stream_->RemoveHold(); } /// Notifies the application that all operations associated with this RPC /// have completed and all Holds have been removed. OnDone provides the RPC /// status outcome for both successful and failed RPCs and will be called in /// all cases. If it is not called, it indicates an application-level problem /// (like failure to remove a hold). /// /// \param[in] s The status outcome of this RPC virtual void OnDone(const ::grpc::Status& /*s*/) {} /// Notifies the application that a read of initial metadata from the /// server is done. If the application chooses not to implement this method, /// it can assume that the initial metadata has been read before the first /// call of OnReadDone or OnDone. /// /// \param[in] ok Was the initial metadata read successfully? If false, no /// new read/write operation will succeed, and any further /// Start* operations should not be called. virtual void OnReadInitialMetadataDone(bool /*ok*/) {} /// Notifies the application that a StartRead operation completed. /// /// \param[in] ok Was it successful? If false, no new read/write operation /// will succeed, and any further Start* should not be called. virtual void OnReadDone(bool /*ok*/) {} /// Notifies the application that a StartWrite or StartWriteLast operation /// completed. /// /// \param[in] ok Was it successful? If false, no new read/write operation /// will succeed, and any further Start* should not be called. virtual void OnWriteDone(bool /*ok*/) {} /// Notifies the application that a StartWritesDone operation completed. Note /// that this is only used on explicit StartWritesDone operations and not for /// those that are implicitly invoked as part of a StartWriteLast. /// /// \param[in] ok Was it successful? If false, the application will later see /// the failure reflected as a bad status in OnDone and no /// further Start* should be called. virtual void OnWritesDoneDone(bool /*ok*/) {} private: friend class ClientCallbackReaderWriter; void BindStream(ClientCallbackReaderWriter* stream) { stream_ = stream; } ClientCallbackReaderWriter* stream_; }; /// \a ClientReadReactor is the interface for a server-streaming RPC. /// All public methods behave as in ClientBidiReactor. template class ClientReadReactor { public: virtual ~ClientReadReactor() {} void StartCall() { reader_->StartCall(); } void StartRead(Response* resp) { reader_->Read(resp); } void AddHold() { AddMultipleHolds(1); } void AddMultipleHolds(int holds) { GPR_CODEGEN_DEBUG_ASSERT(holds > 0); reader_->AddHold(holds); } void RemoveHold() { reader_->RemoveHold(); } virtual void OnDone(const ::grpc::Status& /*s*/) {} virtual void OnReadInitialMetadataDone(bool /*ok*/) {} virtual void OnReadDone(bool /*ok*/) {} private: friend class ClientCallbackReader; void BindReader(ClientCallbackReader* reader) { reader_ = reader; } ClientCallbackReader* reader_; }; /// \a ClientWriteReactor is the interface for a client-streaming RPC. /// All public methods behave as in ClientBidiReactor. template class ClientWriteReactor { public: virtual ~ClientWriteReactor() {} void StartCall() { writer_->StartCall(); } void StartWrite(const Request* req) { StartWrite(req, ::grpc::WriteOptions()); } void StartWrite(const Request* req, ::grpc::WriteOptions options) { writer_->Write(req, std::move(options)); } void StartWriteLast(const Request* req, ::grpc::WriteOptions options) { StartWrite(req, std::move(options.set_last_message())); } void StartWritesDone() { writer_->WritesDone(); } void AddHold() { AddMultipleHolds(1); } void AddMultipleHolds(int holds) { GPR_CODEGEN_DEBUG_ASSERT(holds > 0); writer_->AddHold(holds); } void RemoveHold() { writer_->RemoveHold(); } virtual void OnDone(const ::grpc::Status& /*s*/) {} virtual void OnReadInitialMetadataDone(bool /*ok*/) {} virtual void OnWriteDone(bool /*ok*/) {} virtual void OnWritesDoneDone(bool /*ok*/) {} private: friend class ClientCallbackWriter; void BindWriter(ClientCallbackWriter* writer) { writer_ = writer; } ClientCallbackWriter* writer_; }; /// \a ClientUnaryReactor is a reactor-style interface for a unary RPC. /// This is _not_ a common way of invoking a unary RPC. In practice, this /// option should be used only if the unary RPC wants to receive initial /// metadata without waiting for the response to complete. Most deployments of /// RPC systems do not use this option, but it is needed for generality. /// All public methods behave as in ClientBidiReactor. /// StartCall is included for consistency with the other reactor flavors: even /// though there are no StartRead or StartWrite operations to queue before the /// call (that is part of the unary call itself) and there is no reactor object /// being created as a result of this call, we keep a consistent 2-phase /// initiation API among all the reactor flavors. class ClientUnaryReactor { public: virtual ~ClientUnaryReactor() {} void StartCall() { call_->StartCall(); } virtual void OnDone(const ::grpc::Status& /*s*/) {} virtual void OnReadInitialMetadataDone(bool /*ok*/) {} private: friend class ClientCallbackUnary; void BindCall(ClientCallbackUnary* call) { call_ = call; } ClientCallbackUnary* call_; }; // Define function out-of-line from class to avoid forward declaration issue inline void ClientCallbackUnary::BindReactor(ClientUnaryReactor* reactor) { reactor->BindCall(this); } namespace internal { // Forward declare factory classes for friendship template class ClientCallbackReaderWriterFactory; template class ClientCallbackReaderFactory; template class ClientCallbackWriterFactory; template class ClientCallbackReaderWriterImpl : public ClientCallbackReaderWriter { public: // always allocated against a call arena, no memory free required static void operator delete(void* /*ptr*/, std::size_t size) { GPR_CODEGEN_ASSERT(size == sizeof(ClientCallbackReaderWriterImpl)); } // This operator should never be called as the memory should be freed as part // of the arena destruction. It only exists to provide a matching operator // delete to the operator new so that some compilers will not complain (see // https://github.com/grpc/grpc/issues/11301) Note at the time of adding this // there are no tests catching the compiler warning. static void operator delete(void*, void*) { GPR_CODEGEN_ASSERT(false); } void MaybeFinish() { if (GPR_UNLIKELY(callbacks_outstanding_.fetch_sub( 1, std::memory_order_acq_rel) == 1)) { ::grpc::Status s = std::move(finish_status_); auto* reactor = reactor_; auto* call = call_.call(); this->~ClientCallbackReaderWriterImpl(); ::grpc::g_core_codegen_interface->grpc_call_unref(call); reactor->OnDone(s); } } void StartCall() override { // This call initiates two batches, plus any backlog, each with a callback // 1. Send initial metadata (unless corked) + recv initial metadata // 2. Any read backlog // 3. Any write backlog // 4. Recv trailing metadata, on_completion callback started_ = true; start_tag_.Set(call_.call(), [this](bool ok) { reactor_->OnReadInitialMetadataDone(ok); MaybeFinish(); }, &start_ops_, /*can_inline=*/false); if (!start_corked_) { start_ops_.SendInitialMetadata(&context_->send_initial_metadata_, context_->initial_metadata_flags()); } start_ops_.RecvInitialMetadata(context_); start_ops_.set_core_cq_tag(&start_tag_); call_.PerformOps(&start_ops_); // Also set up the read and write tags so that they don't have to be set up // each time write_tag_.Set(call_.call(), [this](bool ok) { reactor_->OnWriteDone(ok); MaybeFinish(); }, &write_ops_, /*can_inline=*/false); write_ops_.set_core_cq_tag(&write_tag_); read_tag_.Set(call_.call(), [this](bool ok) { reactor_->OnReadDone(ok); MaybeFinish(); }, &read_ops_, /*can_inline=*/false); read_ops_.set_core_cq_tag(&read_tag_); if (read_ops_at_start_) { call_.PerformOps(&read_ops_); } if (write_ops_at_start_) { call_.PerformOps(&write_ops_); } if (writes_done_ops_at_start_) { call_.PerformOps(&writes_done_ops_); } finish_tag_.Set(call_.call(), [this](bool /*ok*/) { MaybeFinish(); }, &finish_ops_, /*can_inline=*/false); finish_ops_.ClientRecvStatus(context_, &finish_status_); finish_ops_.set_core_cq_tag(&finish_tag_); call_.PerformOps(&finish_ops_); } void Read(Response* msg) override { read_ops_.RecvMessage(msg); callbacks_outstanding_.fetch_add(1, std::memory_order_relaxed); if (started_) { call_.PerformOps(&read_ops_); } else { read_ops_at_start_ = true; } } void Write(const Request* msg, ::grpc::WriteOptions options) override { if (start_corked_) { write_ops_.SendInitialMetadata(&context_->send_initial_metadata_, context_->initial_metadata_flags()); start_corked_ = false; } if (options.is_last_message()) { options.set_buffer_hint(); write_ops_.ClientSendClose(); } // TODO(vjpai): don't assert GPR_CODEGEN_ASSERT(write_ops_.SendMessagePtr(msg, options).ok()); callbacks_outstanding_.fetch_add(1, std::memory_order_relaxed); if (started_) { call_.PerformOps(&write_ops_); } else { write_ops_at_start_ = true; } } void WritesDone() override { if (start_corked_) { writes_done_ops_.SendInitialMetadata(&context_->send_initial_metadata_, context_->initial_metadata_flags()); start_corked_ = false; } writes_done_ops_.ClientSendClose(); writes_done_tag_.Set(call_.call(), [this](bool ok) { reactor_->OnWritesDoneDone(ok); MaybeFinish(); }, &writes_done_ops_, /*can_inline=*/false); writes_done_ops_.set_core_cq_tag(&writes_done_tag_); callbacks_outstanding_.fetch_add(1, std::memory_order_relaxed); if (started_) { call_.PerformOps(&writes_done_ops_); } else { writes_done_ops_at_start_ = true; } } void AddHold(int holds) override { callbacks_outstanding_.fetch_add(holds, std::memory_order_relaxed); } void RemoveHold() override { MaybeFinish(); } private: friend class ClientCallbackReaderWriterFactory; ClientCallbackReaderWriterImpl(grpc::internal::Call call, ::grpc_impl::ClientContext* context, ClientBidiReactor* reactor) : context_(context), call_(call), reactor_(reactor), start_corked_(context_->initial_metadata_corked_) { this->BindReactor(reactor); } ::grpc_impl::ClientContext* const context_; grpc::internal::Call call_; ClientBidiReactor* const reactor_; grpc::internal::CallOpSet start_ops_; grpc::internal::CallbackWithSuccessTag start_tag_; bool start_corked_; grpc::internal::CallOpSet finish_ops_; grpc::internal::CallbackWithSuccessTag finish_tag_; ::grpc::Status finish_status_; grpc::internal::CallOpSet write_ops_; grpc::internal::CallbackWithSuccessTag write_tag_; bool write_ops_at_start_{false}; grpc::internal::CallOpSet writes_done_ops_; grpc::internal::CallbackWithSuccessTag writes_done_tag_; bool writes_done_ops_at_start_{false}; grpc::internal::CallOpSet> read_ops_; grpc::internal::CallbackWithSuccessTag read_tag_; bool read_ops_at_start_{false}; // Minimum of 2 callbacks to pre-register for start and finish std::atomic callbacks_outstanding_{2}; bool started_{false}; }; template class ClientCallbackReaderWriterFactory { public: static void Create(::grpc::ChannelInterface* channel, const ::grpc::internal::RpcMethod& method, ::grpc_impl::ClientContext* context, ClientBidiReactor* reactor) { grpc::internal::Call call = channel->CreateCall(method, context, channel->CallbackCQ()); ::grpc::g_core_codegen_interface->grpc_call_ref(call.call()); new (::grpc::g_core_codegen_interface->grpc_call_arena_alloc( call.call(), sizeof(ClientCallbackReaderWriterImpl))) ClientCallbackReaderWriterImpl(call, context, reactor); } }; template class ClientCallbackReaderImpl : public ClientCallbackReader { public: // always allocated against a call arena, no memory free required static void operator delete(void* /*ptr*/, std::size_t size) { GPR_CODEGEN_ASSERT(size == sizeof(ClientCallbackReaderImpl)); } // This operator should never be called as the memory should be freed as part // of the arena destruction. It only exists to provide a matching operator // delete to the operator new so that some compilers will not complain (see // https://github.com/grpc/grpc/issues/11301) Note at the time of adding this // there are no tests catching the compiler warning. static void operator delete(void*, void*) { GPR_CODEGEN_ASSERT(false); } void MaybeFinish() { if (GPR_UNLIKELY(callbacks_outstanding_.fetch_sub( 1, std::memory_order_acq_rel) == 1)) { ::grpc::Status s = std::move(finish_status_); auto* reactor = reactor_; auto* call = call_.call(); this->~ClientCallbackReaderImpl(); ::grpc::g_core_codegen_interface->grpc_call_unref(call); reactor->OnDone(s); } } void StartCall() override { // This call initiates two batches, plus any backlog, each with a callback // 1. Send initial metadata (unless corked) + recv initial metadata // 2. Any backlog // 3. Recv trailing metadata, on_completion callback started_ = true; start_tag_.Set(call_.call(), [this](bool ok) { reactor_->OnReadInitialMetadataDone(ok); MaybeFinish(); }, &start_ops_, /*can_inline=*/false); start_ops_.SendInitialMetadata(&context_->send_initial_metadata_, context_->initial_metadata_flags()); start_ops_.RecvInitialMetadata(context_); start_ops_.set_core_cq_tag(&start_tag_); call_.PerformOps(&start_ops_); // Also set up the read tag so it doesn't have to be set up each time read_tag_.Set(call_.call(), [this](bool ok) { reactor_->OnReadDone(ok); MaybeFinish(); }, &read_ops_, /*can_inline=*/false); read_ops_.set_core_cq_tag(&read_tag_); if (read_ops_at_start_) { call_.PerformOps(&read_ops_); } finish_tag_.Set(call_.call(), [this](bool /*ok*/) { MaybeFinish(); }, &finish_ops_, /*can_inline=*/false); finish_ops_.ClientRecvStatus(context_, &finish_status_); finish_ops_.set_core_cq_tag(&finish_tag_); call_.PerformOps(&finish_ops_); } void Read(Response* msg) override { read_ops_.RecvMessage(msg); callbacks_outstanding_.fetch_add(1, std::memory_order_relaxed); if (started_) { call_.PerformOps(&read_ops_); } else { read_ops_at_start_ = true; } } void AddHold(int holds) override { callbacks_outstanding_.fetch_add(holds, std::memory_order_relaxed); } void RemoveHold() override { MaybeFinish(); } private: friend class ClientCallbackReaderFactory; template ClientCallbackReaderImpl(::grpc::internal::Call call, ::grpc_impl::ClientContext* context, Request* request, ClientReadReactor* reactor) : context_(context), call_(call), reactor_(reactor) { this->BindReactor(reactor); // TODO(vjpai): don't assert GPR_CODEGEN_ASSERT(start_ops_.SendMessagePtr(request).ok()); start_ops_.ClientSendClose(); } ::grpc_impl::ClientContext* const context_; grpc::internal::Call call_; ClientReadReactor* const reactor_; grpc::internal::CallOpSet start_ops_; grpc::internal::CallbackWithSuccessTag start_tag_; grpc::internal::CallOpSet finish_ops_; grpc::internal::CallbackWithSuccessTag finish_tag_; ::grpc::Status finish_status_; grpc::internal::CallOpSet> read_ops_; grpc::internal::CallbackWithSuccessTag read_tag_; bool read_ops_at_start_{false}; // Minimum of 2 callbacks to pre-register for start and finish std::atomic callbacks_outstanding_{2}; bool started_{false}; }; template class ClientCallbackReaderFactory { public: template static void Create(::grpc::ChannelInterface* channel, const ::grpc::internal::RpcMethod& method, ::grpc_impl::ClientContext* context, const Request* request, ClientReadReactor* reactor) { grpc::internal::Call call = channel->CreateCall(method, context, channel->CallbackCQ()); ::grpc::g_core_codegen_interface->grpc_call_ref(call.call()); new (::grpc::g_core_codegen_interface->grpc_call_arena_alloc( call.call(), sizeof(ClientCallbackReaderImpl))) ClientCallbackReaderImpl(call, context, request, reactor); } }; template class ClientCallbackWriterImpl : public ClientCallbackWriter { public: // always allocated against a call arena, no memory free required static void operator delete(void* /*ptr*/, std::size_t size) { GPR_CODEGEN_ASSERT(size == sizeof(ClientCallbackWriterImpl)); } // This operator should never be called as the memory should be freed as part // of the arena destruction. It only exists to provide a matching operator // delete to the operator new so that some compilers will not complain (see // https://github.com/grpc/grpc/issues/11301) Note at the time of adding this // there are no tests catching the compiler warning. static void operator delete(void*, void*) { GPR_CODEGEN_ASSERT(false); } void MaybeFinish() { if (GPR_UNLIKELY(callbacks_outstanding_.fetch_sub( 1, std::memory_order_acq_rel) == 1)) { ::grpc::Status s = std::move(finish_status_); auto* reactor = reactor_; auto* call = call_.call(); this->~ClientCallbackWriterImpl(); ::grpc::g_core_codegen_interface->grpc_call_unref(call); reactor->OnDone(s); } } void StartCall() override { // This call initiates two batches, plus any backlog, each with a callback // 1. Send initial metadata (unless corked) + recv initial metadata // 2. Any backlog // 3. Recv trailing metadata, on_completion callback started_ = true; start_tag_.Set(call_.call(), [this](bool ok) { reactor_->OnReadInitialMetadataDone(ok); MaybeFinish(); }, &start_ops_, /*can_inline=*/false); if (!start_corked_) { start_ops_.SendInitialMetadata(&context_->send_initial_metadata_, context_->initial_metadata_flags()); } start_ops_.RecvInitialMetadata(context_); start_ops_.set_core_cq_tag(&start_tag_); call_.PerformOps(&start_ops_); // Also set up the read and write tags so that they don't have to be set up // each time write_tag_.Set(call_.call(), [this](bool ok) { reactor_->OnWriteDone(ok); MaybeFinish(); }, &write_ops_, /*can_inline=*/false); write_ops_.set_core_cq_tag(&write_tag_); if (write_ops_at_start_) { call_.PerformOps(&write_ops_); } if (writes_done_ops_at_start_) { call_.PerformOps(&writes_done_ops_); } finish_tag_.Set(call_.call(), [this](bool /*ok*/) { MaybeFinish(); }, &finish_ops_, /*can_inline=*/false); finish_ops_.ClientRecvStatus(context_, &finish_status_); finish_ops_.set_core_cq_tag(&finish_tag_); call_.PerformOps(&finish_ops_); } void Write(const Request* msg, ::grpc::WriteOptions options) override { if (start_corked_) { write_ops_.SendInitialMetadata(&context_->send_initial_metadata_, context_->initial_metadata_flags()); start_corked_ = false; } if (options.is_last_message()) { options.set_buffer_hint(); write_ops_.ClientSendClose(); } // TODO(vjpai): don't assert GPR_CODEGEN_ASSERT(write_ops_.SendMessagePtr(msg, options).ok()); callbacks_outstanding_.fetch_add(1, std::memory_order_relaxed); if (started_) { call_.PerformOps(&write_ops_); } else { write_ops_at_start_ = true; } } void WritesDone() override { if (start_corked_) { writes_done_ops_.SendInitialMetadata(&context_->send_initial_metadata_, context_->initial_metadata_flags()); start_corked_ = false; } writes_done_ops_.ClientSendClose(); writes_done_tag_.Set(call_.call(), [this](bool ok) { reactor_->OnWritesDoneDone(ok); MaybeFinish(); }, &writes_done_ops_, /*can_inline=*/false); writes_done_ops_.set_core_cq_tag(&writes_done_tag_); callbacks_outstanding_.fetch_add(1, std::memory_order_relaxed); if (started_) { call_.PerformOps(&writes_done_ops_); } else { writes_done_ops_at_start_ = true; } } void AddHold(int holds) override { callbacks_outstanding_.fetch_add(holds, std::memory_order_relaxed); } void RemoveHold() override { MaybeFinish(); } private: friend class ClientCallbackWriterFactory; template ClientCallbackWriterImpl(::grpc::internal::Call call, ::grpc_impl::ClientContext* context, Response* response, ClientWriteReactor* reactor) : context_(context), call_(call), reactor_(reactor), start_corked_(context_->initial_metadata_corked_) { this->BindReactor(reactor); finish_ops_.RecvMessage(response); finish_ops_.AllowNoMessage(); } ::grpc_impl::ClientContext* const context_; grpc::internal::Call call_; ClientWriteReactor* const reactor_; grpc::internal::CallOpSet start_ops_; grpc::internal::CallbackWithSuccessTag start_tag_; bool start_corked_; grpc::internal::CallOpSet finish_ops_; grpc::internal::CallbackWithSuccessTag finish_tag_; ::grpc::Status finish_status_; grpc::internal::CallOpSet write_ops_; grpc::internal::CallbackWithSuccessTag write_tag_; bool write_ops_at_start_{false}; grpc::internal::CallOpSet writes_done_ops_; grpc::internal::CallbackWithSuccessTag writes_done_tag_; bool writes_done_ops_at_start_{false}; // Minimum of 2 callbacks to pre-register for start and finish std::atomic callbacks_outstanding_{2}; bool started_{false}; }; template class ClientCallbackWriterFactory { public: template static void Create(::grpc::ChannelInterface* channel, const ::grpc::internal::RpcMethod& method, ::grpc_impl::ClientContext* context, Response* response, ClientWriteReactor* reactor) { grpc::internal::Call call = channel->CreateCall(method, context, channel->CallbackCQ()); ::grpc::g_core_codegen_interface->grpc_call_ref(call.call()); new (::grpc::g_core_codegen_interface->grpc_call_arena_alloc( call.call(), sizeof(ClientCallbackWriterImpl))) ClientCallbackWriterImpl(call, context, response, reactor); } }; class ClientCallbackUnaryImpl final : public ClientCallbackUnary { public: // always allocated against a call arena, no memory free required static void operator delete(void* /*ptr*/, std::size_t size) { GPR_CODEGEN_ASSERT(size == sizeof(ClientCallbackUnaryImpl)); } // This operator should never be called as the memory should be freed as part // of the arena destruction. It only exists to provide a matching operator // delete to the operator new so that some compilers will not complain (see // https://github.com/grpc/grpc/issues/11301) Note at the time of adding this // there are no tests catching the compiler warning. static void operator delete(void*, void*) { GPR_CODEGEN_ASSERT(false); } void StartCall() override { // This call initiates two batches, each with a callback // 1. Send initial metadata + write + writes done + recv initial metadata // 2. Read message, recv trailing metadata started_ = true; start_tag_.Set(call_.call(), [this](bool ok) { reactor_->OnReadInitialMetadataDone(ok); MaybeFinish(); }, &start_ops_, /*can_inline=*/false); start_ops_.SendInitialMetadata(&context_->send_initial_metadata_, context_->initial_metadata_flags()); start_ops_.RecvInitialMetadata(context_); start_ops_.set_core_cq_tag(&start_tag_); call_.PerformOps(&start_ops_); finish_tag_.Set(call_.call(), [this](bool /*ok*/) { MaybeFinish(); }, &finish_ops_, /*can_inline=*/false); finish_ops_.ClientRecvStatus(context_, &finish_status_); finish_ops_.set_core_cq_tag(&finish_tag_); call_.PerformOps(&finish_ops_); } void MaybeFinish() { if (GPR_UNLIKELY(callbacks_outstanding_.fetch_sub( 1, std::memory_order_acq_rel) == 1)) { ::grpc::Status s = std::move(finish_status_); auto* reactor = reactor_; auto* call = call_.call(); this->~ClientCallbackUnaryImpl(); ::grpc::g_core_codegen_interface->grpc_call_unref(call); reactor->OnDone(s); } } private: friend class ClientCallbackUnaryFactory; template ClientCallbackUnaryImpl(::grpc::internal::Call call, ::grpc_impl::ClientContext* context, Request* request, Response* response, ClientUnaryReactor* reactor) : context_(context), call_(call), reactor_(reactor) { this->BindReactor(reactor); // TODO(vjpai): don't assert GPR_CODEGEN_ASSERT(start_ops_.SendMessagePtr(request).ok()); start_ops_.ClientSendClose(); finish_ops_.RecvMessage(response); finish_ops_.AllowNoMessage(); } ::grpc_impl::ClientContext* const context_; grpc::internal::Call call_; ClientUnaryReactor* const reactor_; grpc::internal::CallOpSet start_ops_; grpc::internal::CallbackWithSuccessTag start_tag_; grpc::internal::CallOpSet finish_ops_; grpc::internal::CallbackWithSuccessTag finish_tag_; ::grpc::Status finish_status_; // This call will have 2 callbacks: start and finish std::atomic callbacks_outstanding_{2}; bool started_{false}; }; class ClientCallbackUnaryFactory { public: template static void Create(::grpc::ChannelInterface* channel, const ::grpc::internal::RpcMethod& method, ::grpc_impl::ClientContext* context, const Request* request, Response* response, ClientUnaryReactor* reactor) { grpc::internal::Call call = channel->CreateCall(method, context, channel->CallbackCQ()); ::grpc::g_core_codegen_interface->grpc_call_ref(call.call()); new (::grpc::g_core_codegen_interface->grpc_call_arena_alloc( call.call(), sizeof(ClientCallbackUnaryImpl))) ClientCallbackUnaryImpl(call, context, request, response, reactor); } }; } // namespace internal } // namespace grpc_impl #endif // GRPCPP_IMPL_CODEGEN_CLIENT_CALLBACK_IMPL_H grpc-1.30.2/include/grpcpp/impl/codegen/client_context.h000066400000000000000000000016641370425124100232140ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_CLIENT_CONTEXT_H #define GRPCPP_IMPL_CODEGEN_CLIENT_CONTEXT_H #include namespace grpc { typedef ::grpc_impl::ClientContext ClientContext; typedef ::grpc_impl::PropagationOptions PropagationOptions; } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_CLIENT_CONTEXT_H grpc-1.30.2/include/grpcpp/impl/codegen/client_context_impl.h000066400000000000000000000456471370425124100242460ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ /// A ClientContext allows the person implementing a service client to: /// /// - Add custom metadata key-value pairs that will propagated to the server /// side. /// - Control call settings such as compression and authentication. /// - Initial and trailing metadata coming from the server. /// - Get performance metrics (ie, census). /// /// Context settings are only relevant to the call they are invoked with, that /// is to say, they aren't sticky. Some of these settings, such as the /// compression options, can be made persistent at channel construction time /// (see \a grpc::CreateCustomChannel). /// /// \warning ClientContext instances should \em not be reused across rpcs. #ifndef GRPCPP_IMPL_CODEGEN_CLIENT_CONTEXT_IMPL_H #define GRPCPP_IMPL_CODEGEN_CLIENT_CONTEXT_IMPL_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include struct census_context; struct grpc_call; namespace grpc { class ChannelInterface; namespace internal { class RpcMethod; template class BlockingUnaryCallImpl; class CallOpClientRecvStatus; class CallOpRecvInitialMetadata; class ServerContextImpl; } // namespace internal namespace testing { class InteropClientContextInspector; } // namespace testing } // namespace grpc namespace grpc_impl { namespace internal { template class CallbackUnaryCallImpl; template class ClientCallbackReaderWriterImpl; template class ClientCallbackReaderImpl; template class ClientCallbackWriterImpl; class ClientCallbackUnaryImpl; class ClientContextAccessor; } // namespace internal class CallCredentials; class Channel; class CompletionQueue; class ServerContext; template class ClientReader; template class ClientWriter; template class ClientReaderWriter; template class ClientAsyncReader; template class ClientAsyncWriter; template class ClientAsyncReaderWriter; template class ClientAsyncResponseReader; class ServerContextBase; class CallbackServerContext; /// Options for \a ClientContext::FromServerContext specifying which traits from /// the \a ServerContext to propagate (copy) from it into a new \a /// ClientContext. /// /// \see ClientContext::FromServerContext class PropagationOptions { public: PropagationOptions() : propagate_(GRPC_PROPAGATE_DEFAULTS) {} PropagationOptions& enable_deadline_propagation() { propagate_ |= GRPC_PROPAGATE_DEADLINE; return *this; } PropagationOptions& disable_deadline_propagation() { propagate_ &= ~GRPC_PROPAGATE_DEADLINE; return *this; } PropagationOptions& enable_census_stats_propagation() { propagate_ |= GRPC_PROPAGATE_CENSUS_STATS_CONTEXT; return *this; } PropagationOptions& disable_census_stats_propagation() { propagate_ &= ~GRPC_PROPAGATE_CENSUS_STATS_CONTEXT; return *this; } PropagationOptions& enable_census_tracing_propagation() { propagate_ |= GRPC_PROPAGATE_CENSUS_TRACING_CONTEXT; return *this; } PropagationOptions& disable_census_tracing_propagation() { propagate_ &= ~GRPC_PROPAGATE_CENSUS_TRACING_CONTEXT; return *this; } PropagationOptions& enable_cancellation_propagation() { propagate_ |= GRPC_PROPAGATE_CANCELLATION; return *this; } PropagationOptions& disable_cancellation_propagation() { propagate_ &= ~GRPC_PROPAGATE_CANCELLATION; return *this; } uint32_t c_bitmask() const { return propagate_; } private: uint32_t propagate_; }; /// A ClientContext allows the person implementing a service client to: /// /// - Add custom metadata key-value pairs that will propagated to the server /// side. /// - Control call settings such as compression and authentication. /// - Initial and trailing metadata coming from the server. /// - Get performance metrics (ie, census). /// /// Context settings are only relevant to the call they are invoked with, that /// is to say, they aren't sticky. Some of these settings, such as the /// compression options, can be made persistent at channel construction time /// (see \a grpc::CreateCustomChannel). /// /// \warning ClientContext instances should \em not be reused across rpcs. /// \warning The ClientContext instance used for creating an rpc must remain /// alive and valid for the lifetime of the rpc. class ClientContext { public: ClientContext(); ~ClientContext(); /// Create a new \a ClientContext as a child of an incoming server call, /// according to \a options (\see PropagationOptions). /// /// \param server_context The source server context to use as the basis for /// constructing the client context. /// \param options The options controlling what to copy from the \a /// server_context. /// /// \return A newly constructed \a ClientContext instance based on \a /// server_context, with traits propagated (copied) according to \a options. static std::unique_ptr FromServerContext( const grpc_impl::ServerContext& server_context, PropagationOptions options = PropagationOptions()); static std::unique_ptr FromCallbackServerContext( const grpc_impl::CallbackServerContext& server_context, PropagationOptions options = PropagationOptions()); /// Add the (\a meta_key, \a meta_value) pair to the metadata associated with /// a client call. These are made available at the server side by the \a /// grpc::ServerContext::client_metadata() method. /// /// \warning This method should only be called before invoking the rpc. /// /// \param meta_key The metadata key. If \a meta_value is binary data, it must /// end in "-bin". /// \param meta_value The metadata value. If its value is binary, the key name /// must end in "-bin". /// /// Metadata must conform to the following format: /// Custom-Metadata -> Binary-Header / ASCII-Header /// Binary-Header -> {Header-Name "-bin" } {binary value} /// ASCII-Header -> Header-Name ASCII-Value /// Header-Name -> 1*( %x30-39 / %x61-7A / "_" / "-" / ".") ; 0-9 a-z _ - . /// ASCII-Value -> 1*( %x20-%x7E ) ; space and printable ASCII void AddMetadata(const grpc::string& meta_key, const grpc::string& meta_value); /// Return a collection of initial metadata key-value pairs. Note that keys /// may happen more than once (ie, a \a std::multimap is returned). /// /// \warning This method should only be called after initial metadata has been /// received. For streaming calls, see \a /// ClientReaderInterface::WaitForInitialMetadata(). /// /// \return A multimap of initial metadata key-value pairs from the server. const std::multimap& GetServerInitialMetadata() const { GPR_CODEGEN_ASSERT(initial_metadata_received_); return *recv_initial_metadata_.map(); } /// Return a collection of trailing metadata key-value pairs. Note that keys /// may happen more than once (ie, a \a std::multimap is returned). /// /// \warning This method is only callable once the stream has finished. /// /// \return A multimap of metadata trailing key-value pairs from the server. const std::multimap& GetServerTrailingMetadata() const { // TODO(yangg) check finished return *trailing_metadata_.map(); } /// Set the deadline for the client call. /// /// \warning This method should only be called before invoking the rpc. /// /// \param deadline the deadline for the client call. Units are determined by /// the type used. The deadline is an absolute (not relative) time. template void set_deadline(const T& deadline) { grpc::TimePoint deadline_tp(deadline); deadline_ = deadline_tp.raw_time(); } /// EXPERIMENTAL: Indicate that this request is idempotent. /// By default, RPCs are assumed to not be idempotent. /// /// If true, the gRPC library assumes that it's safe to initiate /// this RPC multiple times. void set_idempotent(bool idempotent) { idempotent_ = idempotent; } /// EXPERIMENTAL: Set this request to be cacheable. /// If set, grpc is free to use the HTTP GET verb for sending the request, /// with the possibility of receiving a cached response. void set_cacheable(bool cacheable) { cacheable_ = cacheable; } /// EXPERIMENTAL: Trigger wait-for-ready or not on this request. /// See https://github.com/grpc/grpc/blob/master/doc/wait-for-ready.md. /// If set, if an RPC is made when a channel's connectivity state is /// TRANSIENT_FAILURE or CONNECTING, the call will not "fail fast", /// and the channel will wait until the channel is READY before making the /// call. void set_wait_for_ready(bool wait_for_ready) { wait_for_ready_ = wait_for_ready; wait_for_ready_explicitly_set_ = true; } /// DEPRECATED: Use set_wait_for_ready() instead. void set_fail_fast(bool fail_fast) { set_wait_for_ready(!fail_fast); } /// Return the deadline for the client call. std::chrono::system_clock::time_point deadline() const { return grpc::Timespec2Timepoint(deadline_); } /// Return a \a gpr_timespec representation of the client call's deadline. gpr_timespec raw_deadline() const { return deadline_; } /// Set the per call authority header (see /// https://tools.ietf.org/html/rfc7540#section-8.1.2.3). void set_authority(const grpc::string& authority) { authority_ = authority; } /// Return the authentication context for the associated client call. /// It is only valid to call this during the lifetime of the client call. /// /// \see grpc::AuthContext. std::shared_ptr auth_context() const { if (auth_context_.get() == nullptr) { auth_context_ = grpc::CreateAuthContext(call_); } return auth_context_; } /// Set credentials for the client call. /// /// A credentials object encapsulates all the state needed by a client to /// authenticate with a server and make various assertions, e.g., about the /// client’s identity, role, or whether it is authorized to make a particular /// call. /// /// It is legal to call this only before initial metadata is sent. /// /// \see https://grpc.io/docs/guides/auth.html void set_credentials( const std::shared_ptr& creds); /// EXPERIMENTAL debugging API /// /// Returns the credentials for the client call. This should be used only in /// tests and for diagnostic purposes, and should not be used by application /// logic. std::shared_ptr credentials() { return creds_; } /// Return the compression algorithm the client call will request be used. /// Note that the gRPC runtime may decide to ignore this request, for example, /// due to resource constraints. grpc_compression_algorithm compression_algorithm() const { return compression_algorithm_; } /// Set \a algorithm to be the compression algorithm used for the client call. /// /// \param algorithm The compression algorithm used for the client call. void set_compression_algorithm(grpc_compression_algorithm algorithm); /// Flag whether the initial metadata should be \a corked /// /// If \a corked is true, then the initial metadata will be coalesced with the /// write of first message in the stream. As a result, any tag set for the /// initial metadata operation (starting a client-streaming or bidi-streaming /// RPC) will not actually be sent to the completion queue or delivered /// via Next. /// /// \param corked The flag indicating whether the initial metadata is to be /// corked or not. void set_initial_metadata_corked(bool corked) { initial_metadata_corked_ = corked; } /// Return the peer uri in a string. /// It is only valid to call this during the lifetime of the client call. /// /// \warning This value is never authenticated or subject to any security /// related code. It must not be used for any authentication related /// functionality. Instead, use auth_context. /// /// \return The call's peer URI. grpc::string peer() const; /// Sets the census context. /// It is only valid to call this before the client call is created. A common /// place of setting census context is from within the DefaultConstructor /// method of GlobalCallbacks. void set_census_context(struct census_context* ccp) { census_context_ = ccp; } /// Returns the census context that has been set, or nullptr if not set. struct census_context* census_context() const { return census_context_; } /// Send a best-effort out-of-band cancel on the call associated with /// this client context. The call could be in any stage; e.g., if it is /// already finished, it may still return success. /// /// There is no guarantee the call will be cancelled. /// /// Note that TryCancel() does not change any of the tags that are pending /// on the completion queue. All pending tags will still be delivered /// (though their ok result may reflect the effect of cancellation). void TryCancel(); /// Global Callbacks /// /// Can be set exactly once per application to install hooks whenever /// a client context is constructed and destructed. class GlobalCallbacks { public: virtual ~GlobalCallbacks() {} virtual void DefaultConstructor(ClientContext* context) = 0; virtual void Destructor(ClientContext* context) = 0; }; static void SetGlobalCallbacks(GlobalCallbacks* callbacks); /// Should be used for framework-level extensions only. /// Applications never need to call this method. grpc_call* c_call() { return call_; } /// EXPERIMENTAL debugging API /// /// if status is not ok() for an RPC, this will return a detailed string /// of the gRPC Core error that led to the failure. It should not be relied /// upon for anything other than gaining more debug data in failure cases. grpc::string debug_error_string() const { return debug_error_string_; } private: // Disallow copy and assign. ClientContext(const ClientContext&); ClientContext& operator=(const ClientContext&); friend class ::grpc::testing::InteropClientContextInspector; friend class ::grpc::internal::CallOpClientRecvStatus; friend class ::grpc::internal::CallOpRecvInitialMetadata; friend class ::grpc_impl::Channel; template friend class ::grpc_impl::ClientReader; template friend class ::grpc_impl::ClientWriter; template friend class ::grpc_impl::ClientReaderWriter; template friend class ::grpc_impl::ClientAsyncReader; template friend class ::grpc_impl::ClientAsyncWriter; template friend class ::grpc_impl::ClientAsyncReaderWriter; template friend class ::grpc_impl::ClientAsyncResponseReader; template friend class ::grpc::internal::BlockingUnaryCallImpl; template friend class ::grpc_impl::internal::CallbackUnaryCallImpl; template friend class ::grpc_impl::internal::ClientCallbackReaderWriterImpl; template friend class ::grpc_impl::internal::ClientCallbackReaderImpl; template friend class ::grpc_impl::internal::ClientCallbackWriterImpl; friend class ::grpc_impl::internal::ClientCallbackUnaryImpl; friend class ::grpc_impl::internal::ClientContextAccessor; // Used by friend class CallOpClientRecvStatus void set_debug_error_string(const grpc::string& debug_error_string) { debug_error_string_ = debug_error_string; } grpc_call* call() const { return call_; } void set_call(grpc_call* call, const std::shared_ptr<::grpc_impl::Channel>& channel); grpc::experimental::ClientRpcInfo* set_client_rpc_info( const char* method, grpc::internal::RpcMethod::RpcType type, grpc::ChannelInterface* channel, const std::vector>& creators, size_t interceptor_pos) { rpc_info_ = grpc::experimental::ClientRpcInfo(this, type, method, channel); rpc_info_.RegisterInterceptors(creators, interceptor_pos); return &rpc_info_; } uint32_t initial_metadata_flags() const { return (idempotent_ ? GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST : 0) | (wait_for_ready_ ? GRPC_INITIAL_METADATA_WAIT_FOR_READY : 0) | (cacheable_ ? GRPC_INITIAL_METADATA_CACHEABLE_REQUEST : 0) | (wait_for_ready_explicitly_set_ ? GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET : 0) | (initial_metadata_corked_ ? GRPC_INITIAL_METADATA_CORKED : 0); } grpc::string authority() { return authority_; } void SendCancelToInterceptors(); static std::unique_ptr FromInternalServerContext( const grpc_impl::ServerContextBase& server_context, PropagationOptions options); bool initial_metadata_received_; bool wait_for_ready_; bool wait_for_ready_explicitly_set_; bool idempotent_; bool cacheable_; std::shared_ptr<::grpc_impl::Channel> channel_; grpc::internal::Mutex mu_; grpc_call* call_; bool call_canceled_; gpr_timespec deadline_; grpc::string authority_; std::shared_ptr creds_; mutable std::shared_ptr auth_context_; struct census_context* census_context_; std::multimap send_initial_metadata_; mutable grpc::internal::MetadataMap recv_initial_metadata_; mutable grpc::internal::MetadataMap trailing_metadata_; grpc_call* propagate_from_call_; PropagationOptions propagation_options_; grpc_compression_algorithm compression_algorithm_; bool initial_metadata_corked_; grpc::string debug_error_string_; grpc::experimental::ClientRpcInfo rpc_info_; }; } // namespace grpc_impl #endif // GRPCPP_IMPL_CODEGEN_CLIENT_CONTEXT_IMPL_H grpc-1.30.2/include/grpcpp/impl/codegen/client_interceptor.h000066400000000000000000000156731370425124100240730ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_CLIENT_INTERCEPTOR_H #define GRPCPP_IMPL_CODEGEN_CLIENT_INTERCEPTOR_H #include #include #include #include #include namespace grpc_impl { class Channel; class ClientContext; } // namespace grpc_impl namespace grpc { namespace internal { class InterceptorBatchMethodsImpl; } namespace experimental { class ClientRpcInfo; // A factory interface for creation of client interceptors. A vector of // factories can be provided at channel creation which will be used to create a // new vector of client interceptors per RPC. Client interceptor authors should // create a subclass of ClientInterceptorFactorInterface which creates objects // of their interceptors. class ClientInterceptorFactoryInterface { public: virtual ~ClientInterceptorFactoryInterface() {} // Returns a pointer to an Interceptor object on successful creation, nullptr // otherwise. If nullptr is returned, this server interceptor factory is // ignored for the purposes of that RPC. virtual Interceptor* CreateClientInterceptor(ClientRpcInfo* info) = 0; }; } // namespace experimental namespace internal { extern experimental::ClientInterceptorFactoryInterface* g_global_client_interceptor_factory; } /// ClientRpcInfo represents the state of a particular RPC as it /// appears to an interceptor. It is created and owned by the library and /// passed to the CreateClientInterceptor method of the application's /// ClientInterceptorFactoryInterface implementation namespace experimental { class ClientRpcInfo { public: // TODO(yashykt): Stop default-constructing ClientRpcInfo and remove UNKNOWN // from the list of possible Types. /// Type categorizes RPCs by unary or streaming type enum class Type { UNARY, CLIENT_STREAMING, SERVER_STREAMING, BIDI_STREAMING, UNKNOWN // UNKNOWN is not API and will be removed later }; ~ClientRpcInfo() {} // Delete copy constructor but allow default move constructor ClientRpcInfo(const ClientRpcInfo&) = delete; ClientRpcInfo(ClientRpcInfo&&) = default; // Getter methods /// Return the fully-specified method name const char* method() const { return method_; } /// Return a pointer to the channel on which the RPC is being sent ChannelInterface* channel() { return channel_; } /// Return a pointer to the underlying ClientContext structure associated /// with the RPC to support features that apply to it grpc_impl::ClientContext* client_context() { return ctx_; } /// Return the type of the RPC (unary or a streaming flavor) Type type() const { return type_; } private: static_assert(Type::UNARY == static_cast(internal::RpcMethod::NORMAL_RPC), "violated expectation about Type enum"); static_assert(Type::CLIENT_STREAMING == static_cast(internal::RpcMethod::CLIENT_STREAMING), "violated expectation about Type enum"); static_assert(Type::SERVER_STREAMING == static_cast(internal::RpcMethod::SERVER_STREAMING), "violated expectation about Type enum"); static_assert(Type::BIDI_STREAMING == static_cast(internal::RpcMethod::BIDI_STREAMING), "violated expectation about Type enum"); // Default constructor should only be used by ClientContext ClientRpcInfo() = default; // Constructor will only be called from ClientContext ClientRpcInfo(grpc_impl::ClientContext* ctx, internal::RpcMethod::RpcType type, const char* method, grpc::ChannelInterface* channel) : ctx_(ctx), type_(static_cast(type)), method_(method), channel_(channel) {} // Move assignment should only be used by ClientContext // TODO(yashykt): Delete move assignment ClientRpcInfo& operator=(ClientRpcInfo&&) = default; // Runs interceptor at pos \a pos. void RunInterceptor( experimental::InterceptorBatchMethods* interceptor_methods, size_t pos) { GPR_CODEGEN_ASSERT(pos < interceptors_.size()); interceptors_[pos]->Intercept(interceptor_methods); } void RegisterInterceptors( const std::vector>& creators, size_t interceptor_pos) { if (interceptor_pos > creators.size()) { // No interceptors to register return; } // NOTE: The following is not a range-based for loop because it will only // iterate over a portion of the creators vector. for (auto it = creators.begin() + interceptor_pos; it != creators.end(); ++it) { auto* interceptor = (*it)->CreateClientInterceptor(this); if (interceptor != nullptr) { interceptors_.push_back( std::unique_ptr(interceptor)); } } if (internal::g_global_client_interceptor_factory != nullptr) { interceptors_.push_back(std::unique_ptr( internal::g_global_client_interceptor_factory ->CreateClientInterceptor(this))); } } grpc_impl::ClientContext* ctx_ = nullptr; // TODO(yashykt): make type_ const once move-assignment is deleted Type type_{Type::UNKNOWN}; const char* method_ = nullptr; grpc::ChannelInterface* channel_ = nullptr; std::vector> interceptors_; bool hijacked_ = false; size_t hijacked_interceptor_ = 0; friend class internal::InterceptorBatchMethodsImpl; friend class grpc_impl::ClientContext; }; // PLEASE DO NOT USE THIS. ALWAYS PREFER PER CHANNEL INTERCEPTORS OVER A GLOBAL // INTERCEPTOR. IF USAGE IS ABSOLUTELY NECESSARY, PLEASE READ THE SAFETY NOTES. // Registers a global client interceptor factory object, which is used for all // RPCs made in this process. The application is responsible for maintaining the // life of the object while gRPC operations are in progress. The global // interceptor factory should only be registered once at the start of the // process before any gRPC operations have begun. void RegisterGlobalClientInterceptorFactory( ClientInterceptorFactoryInterface* factory); // For testing purposes only void TestOnlyResetGlobalClientInterceptorFactory(); } // namespace experimental } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_CLIENT_INTERCEPTOR_H grpc-1.30.2/include/grpcpp/impl/codegen/client_unary_call.h000066400000000000000000000067361370425124100236660ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_CLIENT_UNARY_CALL_H #define GRPCPP_IMPL_CODEGEN_CLIENT_UNARY_CALL_H #include #include #include #include #include namespace grpc_impl { class ClientContext; } // namespace grpc_impl namespace grpc { namespace internal { class RpcMethod; /// Wrapper that performs a blocking unary call template Status BlockingUnaryCall(ChannelInterface* channel, const RpcMethod& method, grpc_impl::ClientContext* context, const InputMessage& request, OutputMessage* result) { return BlockingUnaryCallImpl( channel, method, context, request, result) .status(); } template class BlockingUnaryCallImpl { public: BlockingUnaryCallImpl(ChannelInterface* channel, const RpcMethod& method, grpc_impl::ClientContext* context, const InputMessage& request, OutputMessage* result) { ::grpc_impl::CompletionQueue cq(grpc_completion_queue_attributes{ GRPC_CQ_CURRENT_VERSION, GRPC_CQ_PLUCK, GRPC_CQ_DEFAULT_POLLING, nullptr}); // Pluckable completion queue ::grpc::internal::Call call(channel->CreateCall(method, context, &cq)); CallOpSet, CallOpClientSendClose, CallOpClientRecvStatus> ops; status_ = ops.SendMessagePtr(&request); if (!status_.ok()) { return; } ops.SendInitialMetadata(&context->send_initial_metadata_, context->initial_metadata_flags()); ops.RecvInitialMetadata(context); ops.RecvMessage(result); ops.AllowNoMessage(); ops.ClientSendClose(); ops.ClientRecvStatus(context, &status_); call.PerformOps(&ops); cq.Pluck(&ops); // Some of the ops might fail. If the ops fail in the core layer, status // would reflect the error. But, if the ops fail in the C++ layer, the // status would still be the same as the one returned by gRPC Core. This can // happen if deserialization of the message fails. // TODO(yashykt): If deserialization fails, but the status received is OK, // then it might be a good idea to change the status to something better // than StatusCode::UNIMPLEMENTED to reflect this. if (!ops.got_message && status_.ok()) { status_ = Status(StatusCode::UNIMPLEMENTED, "No message returned for unary request"); } } Status status() { return status_; } private: Status status_; }; } // namespace internal } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_CLIENT_UNARY_CALL_H grpc-1.30.2/include/grpcpp/impl/codegen/completion_queue.h000066400000000000000000000017131370425124100235420ustar00rootroot00000000000000/* * * Copyright 2015-2016 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_COMPLETION_QUEUE_H #define GRPCPP_IMPL_CODEGEN_COMPLETION_QUEUE_H #include namespace grpc { typedef ::grpc_impl::CompletionQueue CompletionQueue; typedef ::grpc_impl::ServerCompletionQueue ServerCompletionQueue; } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_COMPLETION_QUEUE_H grpc-1.30.2/include/grpcpp/impl/codegen/completion_queue_impl.h000066400000000000000000000435031370425124100245660ustar00rootroot00000000000000/* * * Copyright 2015-2016 gRPC 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 * * 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. * */ /// A completion queue implements a concurrent producer-consumer queue, with /// two main API-exposed methods: \a Next and \a AsyncNext. These /// methods are the essential component of the gRPC C++ asynchronous API. /// There is also a \a Shutdown method to indicate that a given completion queue /// will no longer have regular events. This must be called before the /// completion queue is destroyed. /// All completion queue APIs are thread-safe and may be used concurrently with /// any other completion queue API invocation; it is acceptable to have /// multiple threads calling \a Next or \a AsyncNext on the same or different /// completion queues, or to call these methods concurrently with a \a Shutdown /// elsewhere. /// \remark{All other API calls on completion queue should be completed before /// a completion queue destructor is called.} #ifndef GRPCPP_IMPL_CODEGEN_COMPLETION_QUEUE_IMPL_H #define GRPCPP_IMPL_CODEGEN_COMPLETION_QUEUE_IMPL_H #include #include #include #include #include #include #include #include struct grpc_completion_queue; namespace grpc_impl { class Channel; class Server; class ServerBuilder; template class ClientReader; template class ClientWriter; template class ClientReaderWriter; template class ServerReader; template class ServerWriter; class ServerContextBase; namespace internal { template class ServerReaderWriterBody; template class RpcMethodHandler; template class ClientStreamingHandler; template class ServerStreamingHandler; template class TemplatedBidiStreamingHandler; template <::grpc::StatusCode code> class ErrorMethodHandler; } // namespace internal } // namespace grpc_impl namespace grpc { class ChannelInterface; class ServerInterface; namespace internal { class CompletionQueueTag; class RpcMethod; template class BlockingUnaryCallImpl; template class CallOpSet; } // namespace internal extern CoreCodegenInterface* g_core_codegen_interface; } // namespace grpc namespace grpc_impl { /// A thin wrapper around \ref grpc_completion_queue (see \ref /// src/core/lib/surface/completion_queue.h). /// See \ref doc/cpp/perf_notes.md for notes on best practices for high /// performance servers. class CompletionQueue : private ::grpc::GrpcLibraryCodegen { public: /// Default constructor. Implicitly creates a \a grpc_completion_queue /// instance. CompletionQueue() : CompletionQueue(grpc_completion_queue_attributes{ GRPC_CQ_CURRENT_VERSION, GRPC_CQ_NEXT, GRPC_CQ_DEFAULT_POLLING, nullptr}) {} /// Wrap \a take, taking ownership of the instance. /// /// \param take The completion queue instance to wrap. Ownership is taken. explicit CompletionQueue(grpc_completion_queue* take); /// Destructor. Destroys the owned wrapped completion queue / instance. ~CompletionQueue() { ::grpc::g_core_codegen_interface->grpc_completion_queue_destroy(cq_); } /// Tri-state return for AsyncNext: SHUTDOWN, GOT_EVENT, TIMEOUT. enum NextStatus { SHUTDOWN, ///< The completion queue has been shutdown and fully-drained GOT_EVENT, ///< Got a new event; \a tag will be filled in with its ///< associated value; \a ok indicating its success. TIMEOUT ///< deadline was reached. }; /// Read from the queue, blocking until an event is available or the queue is /// shutting down. /// /// \param tag [out] Updated to point to the read event's tag. /// \param ok [out] true if read a successful event, false otherwise. /// /// Note that each tag sent to the completion queue (through RPC operations /// or alarms) will be delivered out of the completion queue by a call to /// Next (or a related method), regardless of whether the operation succeeded /// or not. Success here means that this operation completed in the normal /// valid manner. /// /// Server-side RPC request: \a ok indicates that the RPC has indeed /// been started. If it is false, the server has been Shutdown /// before this particular call got matched to an incoming RPC. /// /// Client-side StartCall/RPC invocation: \a ok indicates that the RPC is /// going to go to the wire. If it is false, it not going to the wire. This /// would happen if the channel is either permanently broken or /// transiently broken but with the fail-fast option. (Note that async unary /// RPCs don't post a CQ tag at this point, nor do client-streaming /// or bidi-streaming RPCs that have the initial metadata corked option set.) /// /// Client-side Write, Client-side WritesDone, Server-side Write, /// Server-side Finish, Server-side SendInitialMetadata (which is /// typically included in Write or Finish when not done explicitly): /// \a ok means that the data/metadata/status/etc is going to go to the /// wire. If it is false, it not going to the wire because the call /// is already dead (i.e., canceled, deadline expired, other side /// dropped the channel, etc). /// /// Client-side Read, Server-side Read, Client-side /// RecvInitialMetadata (which is typically included in Read if not /// done explicitly): \a ok indicates whether there is a valid message /// that got read. If not, you know that there are certainly no more /// messages that can ever be read from this stream. For the client-side /// operations, this only happens because the call is dead. For the /// server-sider operation, though, this could happen because the client /// has done a WritesDone already. /// /// Client-side Finish: \a ok should always be true /// /// Server-side AsyncNotifyWhenDone: \a ok should always be true /// /// Alarm: \a ok is true if it expired, false if it was canceled /// /// \return true if got an event, false if the queue is fully drained and /// shut down. bool Next(void** tag, bool* ok) { return (AsyncNextInternal(tag, ok, ::grpc::g_core_codegen_interface->gpr_inf_future( GPR_CLOCK_REALTIME)) != SHUTDOWN); } /// Read from the queue, blocking up to \a deadline (or the queue's shutdown). /// Both \a tag and \a ok are updated upon success (if an event is available /// within the \a deadline). A \a tag points to an arbitrary location usually /// employed to uniquely identify an event. /// /// \param tag [out] Upon success, updated to point to the event's tag. /// \param ok [out] Upon success, true if a successful event, false otherwise /// See documentation for CompletionQueue::Next for explanation of ok /// \param deadline [in] How long to block in wait for an event. /// /// \return The type of event read. template NextStatus AsyncNext(void** tag, bool* ok, const T& deadline) { ::grpc::TimePoint deadline_tp(deadline); return AsyncNextInternal(tag, ok, deadline_tp.raw_time()); } /// EXPERIMENTAL /// First executes \a F, then reads from the queue, blocking up to /// \a deadline (or the queue's shutdown). /// Both \a tag and \a ok are updated upon success (if an event is available /// within the \a deadline). A \a tag points to an arbitrary location usually /// employed to uniquely identify an event. /// /// \param f [in] Function to execute before calling AsyncNext on this queue. /// \param tag [out] Upon success, updated to point to the event's tag. /// \param ok [out] Upon success, true if read a regular event, false /// otherwise. /// \param deadline [in] How long to block in wait for an event. /// /// \return The type of event read. template NextStatus DoThenAsyncNext(F&& f, void** tag, bool* ok, const T& deadline) { CompletionQueueTLSCache cache = CompletionQueueTLSCache(this); f(); if (cache.Flush(tag, ok)) { return GOT_EVENT; } else { return AsyncNext(tag, ok, deadline); } } /// Request the shutdown of the queue. /// /// \warning This method must be called at some point if this completion queue /// is accessed with Next or AsyncNext. \a Next will not return false /// until this method has been called and all pending tags have been drained. /// (Likewise for \a AsyncNext returning \a NextStatus::SHUTDOWN .) /// Only once either one of these methods does that (that is, once the queue /// has been \em drained) can an instance of this class be destroyed. /// Also note that applications must ensure that no work is enqueued on this /// completion queue after this method is called. void Shutdown(); /// Returns a \em raw pointer to the underlying \a grpc_completion_queue /// instance. /// /// \warning Remember that the returned instance is owned. No transfer of /// owership is performed. grpc_completion_queue* cq() { return cq_; } protected: /// Private constructor of CompletionQueue only visible to friend classes CompletionQueue(const grpc_completion_queue_attributes& attributes) { cq_ = ::grpc::g_core_codegen_interface->grpc_completion_queue_create( ::grpc::g_core_codegen_interface->grpc_completion_queue_factory_lookup( &attributes), &attributes, NULL); InitialAvalanching(); // reserve this for the future shutdown } private: // Friends for access to server registration lists that enable checking and // logging on shutdown friend class ::grpc_impl::ServerBuilder; friend class ::grpc_impl::Server; // Friend synchronous wrappers so that they can access Pluck(), which is // a semi-private API geared towards the synchronous implementation. template friend class ::grpc_impl::ClientReader; template friend class ::grpc_impl::ClientWriter; template friend class ::grpc_impl::ClientReaderWriter; template friend class ::grpc_impl::ServerReader; template friend class ::grpc_impl::ServerWriter; template friend class ::grpc_impl::internal::ServerReaderWriterBody; template friend class ::grpc_impl::internal::RpcMethodHandler; template friend class ::grpc_impl::internal::ClientStreamingHandler; template friend class ::grpc_impl::internal::ServerStreamingHandler; template friend class ::grpc_impl::internal::TemplatedBidiStreamingHandler; template <::grpc::StatusCode code> friend class ::grpc_impl::internal::ErrorMethodHandler; friend class ::grpc_impl::ServerContextBase; friend class ::grpc::ServerInterface; template friend class ::grpc::internal::BlockingUnaryCallImpl; // Friends that need access to constructor for callback CQ friend class ::grpc_impl::Channel; // For access to Register/CompleteAvalanching template friend class ::grpc::internal::CallOpSet; /// EXPERIMENTAL /// Creates a Thread Local cache to store the first event /// On this completion queue queued from this thread. Once /// initialized, it must be flushed on the same thread. class CompletionQueueTLSCache { public: CompletionQueueTLSCache(CompletionQueue* cq); ~CompletionQueueTLSCache(); bool Flush(void** tag, bool* ok); private: CompletionQueue* cq_; bool flushed_; }; NextStatus AsyncNextInternal(void** tag, bool* ok, gpr_timespec deadline); /// Wraps \a grpc_completion_queue_pluck. /// \warning Must not be mixed with calls to \a Next. bool Pluck(::grpc::internal::CompletionQueueTag* tag) { auto deadline = ::grpc::g_core_codegen_interface->gpr_inf_future(GPR_CLOCK_REALTIME); while (true) { auto ev = ::grpc::g_core_codegen_interface->grpc_completion_queue_pluck( cq_, tag, deadline, nullptr); bool ok = ev.success != 0; void* ignored = tag; if (tag->FinalizeResult(&ignored, &ok)) { GPR_CODEGEN_ASSERT(ignored == tag); return ok; } } } /// Performs a single polling pluck on \a tag. /// \warning Must not be mixed with calls to \a Next. /// /// TODO: sreek - This calls tag->FinalizeResult() even if the cq_ is already /// shutdown. This is most likely a bug and if it is a bug, then change this /// implementation to simple call the other TryPluck function with a zero /// timeout. i.e: /// TryPluck(tag, gpr_time_0(GPR_CLOCK_REALTIME)) void TryPluck(::grpc::internal::CompletionQueueTag* tag) { auto deadline = ::grpc::g_core_codegen_interface->gpr_time_0(GPR_CLOCK_REALTIME); auto ev = ::grpc::g_core_codegen_interface->grpc_completion_queue_pluck( cq_, tag, deadline, nullptr); if (ev.type == GRPC_QUEUE_TIMEOUT) return; bool ok = ev.success != 0; void* ignored = tag; // the tag must be swallowed if using TryPluck GPR_CODEGEN_ASSERT(!tag->FinalizeResult(&ignored, &ok)); } /// Performs a single polling pluck on \a tag. Calls tag->FinalizeResult if /// the pluck() was successful and returned the tag. /// /// This exects tag->FinalizeResult (if called) to return 'false' i.e expects /// that the tag is internal not something that is returned to the user. void TryPluck(::grpc::internal::CompletionQueueTag* tag, gpr_timespec deadline) { auto ev = ::grpc::g_core_codegen_interface->grpc_completion_queue_pluck( cq_, tag, deadline, nullptr); if (ev.type == GRPC_QUEUE_TIMEOUT || ev.type == GRPC_QUEUE_SHUTDOWN) { return; } bool ok = ev.success != 0; void* ignored = tag; GPR_CODEGEN_ASSERT(!tag->FinalizeResult(&ignored, &ok)); } /// Manage state of avalanching operations : completion queue tags that /// trigger other completion queue operations. The underlying core completion /// queue should not really shutdown until all avalanching operations have /// been finalized. Note that we maintain the requirement that an avalanche /// registration must take place before CQ shutdown (which must be maintained /// elsehwere) void InitialAvalanching() { gpr_atm_rel_store(&avalanches_in_flight_, static_cast(1)); } void RegisterAvalanching() { gpr_atm_no_barrier_fetch_add(&avalanches_in_flight_, static_cast(1)); } void CompleteAvalanching() { if (gpr_atm_no_barrier_fetch_add(&avalanches_in_flight_, static_cast(-1)) == 1) { ::grpc::g_core_codegen_interface->grpc_completion_queue_shutdown(cq_); } } void RegisterServer(const Server* server) { (void)server; #ifndef NDEBUG grpc::internal::MutexLock l(&server_list_mutex_); server_list_.push_back(server); #endif } void UnregisterServer(const Server* server) { (void)server; #ifndef NDEBUG grpc::internal::MutexLock l(&server_list_mutex_); server_list_.remove(server); #endif } bool ServerListEmpty() const { #ifndef NDEBUG grpc::internal::MutexLock l(&server_list_mutex_); return server_list_.empty(); #endif return true; } grpc_completion_queue* cq_; // owned gpr_atm avalanches_in_flight_; // List of servers associated with this CQ. Even though this is only used with // NDEBUG, instantiate it in all cases since otherwise the size will be // inconsistent. mutable grpc::internal::Mutex server_list_mutex_; std::list server_list_ /* GUARDED_BY(server_list_mutex_) */; }; /// A specific type of completion queue used by the processing of notifications /// by servers. Instantiated by \a ServerBuilder or Server (for health checker). class ServerCompletionQueue : public CompletionQueue { public: bool IsFrequentlyPolled() { return polling_type_ != GRPC_CQ_NON_LISTENING; } protected: /// Default constructor ServerCompletionQueue() : polling_type_(GRPC_CQ_DEFAULT_POLLING) {} private: /// \param completion_type indicates whether this is a NEXT or CALLBACK /// completion queue. /// \param polling_type Informs the GRPC library about the type of polling /// allowed on this completion queue. See grpc_cq_polling_type's description /// in grpc_types.h for more details. /// \param shutdown_cb is the shutdown callback used for CALLBACK api queues ServerCompletionQueue(grpc_cq_completion_type completion_type, grpc_cq_polling_type polling_type, grpc_experimental_completion_queue_functor* shutdown_cb) : CompletionQueue(grpc_completion_queue_attributes{ GRPC_CQ_CURRENT_VERSION, completion_type, polling_type, shutdown_cb}), polling_type_(polling_type) {} grpc_cq_polling_type polling_type_; friend class ::grpc_impl::ServerBuilder; friend class ::grpc_impl::Server; }; } // namespace grpc_impl #endif // GRPCPP_IMPL_CODEGEN_COMPLETION_QUEUE_IMPL_H grpc-1.30.2/include/grpcpp/impl/codegen/completion_queue_tag.h000066400000000000000000000040471370425124100244000ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_COMPLETION_QUEUE_TAG_H #define GRPCPP_IMPL_CODEGEN_COMPLETION_QUEUE_TAG_H namespace grpc { namespace internal { /// An interface allowing implementors to process and filter event tags. class CompletionQueueTag { public: virtual ~CompletionQueueTag() {} /// FinalizeResult must be called before informing user code that the /// operation bound to the underlying core completion queue tag has /// completed. In practice, this means: /// /// 1. For the sync API - before returning from Pluck /// 2. For the CQ-based async API - before returning from Next /// 3. For the callback-based API - before invoking the user callback /// /// This is the method that translates from core-side tag/status to /// C++ API-observable tag/status. /// /// The return value is the status of the operation (returning status is the /// general behavior of this function). If this function returns false, the /// tag is dropped and not returned from the completion queue: this concept is /// for events that are observed at core but not requested by the user /// application (e.g., server shutdown, for server unimplemented method /// responses, or for cases where a server-side RPC doesn't have a completion /// notification registered using AsyncNotifyWhenDone) virtual bool FinalizeResult(void** tag, bool* status) = 0; }; } // namespace internal } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_COMPLETION_QUEUE_TAG_H grpc-1.30.2/include/grpcpp/impl/codegen/config.h000066400000000000000000000022131370425124100214260ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_CONFIG_H #define GRPCPP_IMPL_CODEGEN_CONFIG_H #ifndef GRPC_CUSTOM_STRING #include #define GRPC_CUSTOM_STRING std::string #endif /// The following macros are deprecated and appear only for users /// with PB files generated using gRPC 1.0.x plugins. They should /// not be used in new code #define GRPC_OVERRIDE override // deprecated #define GRPC_FINAL final // deprecated namespace grpc { typedef GRPC_CUSTOM_STRING string; using std::to_string; } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_CONFIG_H grpc-1.30.2/include/grpcpp/impl/codegen/config_protobuf.h000066400000000000000000000073231370425124100233550ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_CONFIG_PROTOBUF_H #define GRPCPP_IMPL_CODEGEN_CONFIG_PROTOBUF_H #define GRPC_OPEN_SOURCE_PROTO #ifndef GRPC_CUSTOM_MESSAGE #ifdef GRPC_USE_PROTO_LITE #include #define GRPC_CUSTOM_MESSAGE ::google::protobuf::MessageLite #define GRPC_CUSTOM_MESSAGELITE ::google::protobuf::MessageLite #else #include #define GRPC_CUSTOM_MESSAGE ::google::protobuf::Message #define GRPC_CUSTOM_MESSAGELITE ::google::protobuf::MessageLite #endif #endif #ifndef GRPC_CUSTOM_DESCRIPTOR #include #include #define GRPC_CUSTOM_DESCRIPTOR ::google::protobuf::Descriptor #define GRPC_CUSTOM_DESCRIPTORPOOL ::google::protobuf::DescriptorPool #define GRPC_CUSTOM_FIELDDESCRIPTOR ::google::protobuf::FieldDescriptor #define GRPC_CUSTOM_FILEDESCRIPTOR ::google::protobuf::FileDescriptor #define GRPC_CUSTOM_FILEDESCRIPTORPROTO ::google::protobuf::FileDescriptorProto #define GRPC_CUSTOM_METHODDESCRIPTOR ::google::protobuf::MethodDescriptor #define GRPC_CUSTOM_SERVICEDESCRIPTOR ::google::protobuf::ServiceDescriptor #define GRPC_CUSTOM_SOURCELOCATION ::google::protobuf::SourceLocation #endif #ifndef GRPC_CUSTOM_DESCRIPTORDATABASE #include #define GRPC_CUSTOM_DESCRIPTORDATABASE ::google::protobuf::DescriptorDatabase #define GRPC_CUSTOM_SIMPLEDESCRIPTORDATABASE \ ::google::protobuf::SimpleDescriptorDatabase #endif #ifndef GRPC_CUSTOM_ZEROCOPYOUTPUTSTREAM #include #include #define GRPC_CUSTOM_ZEROCOPYOUTPUTSTREAM \ ::google::protobuf::io::ZeroCopyOutputStream #define GRPC_CUSTOM_ZEROCOPYINPUTSTREAM \ ::google::protobuf::io::ZeroCopyInputStream #define GRPC_CUSTOM_CODEDINPUTSTREAM ::google::protobuf::io::CodedInputStream #endif #ifndef GRPC_CUSTOM_JSONUTIL #include #define GRPC_CUSTOM_JSONUTIL ::google::protobuf::util #define GRPC_CUSTOM_UTIL_STATUS ::google::protobuf::util::Status #endif namespace grpc { namespace protobuf { typedef GRPC_CUSTOM_MESSAGE Message; typedef GRPC_CUSTOM_MESSAGELITE MessageLite; typedef GRPC_CUSTOM_DESCRIPTOR Descriptor; typedef GRPC_CUSTOM_DESCRIPTORPOOL DescriptorPool; typedef GRPC_CUSTOM_DESCRIPTORDATABASE DescriptorDatabase; typedef GRPC_CUSTOM_FIELDDESCRIPTOR FieldDescriptor; typedef GRPC_CUSTOM_FILEDESCRIPTOR FileDescriptor; typedef GRPC_CUSTOM_FILEDESCRIPTORPROTO FileDescriptorProto; typedef GRPC_CUSTOM_METHODDESCRIPTOR MethodDescriptor; typedef GRPC_CUSTOM_SERVICEDESCRIPTOR ServiceDescriptor; typedef GRPC_CUSTOM_SIMPLEDESCRIPTORDATABASE SimpleDescriptorDatabase; typedef GRPC_CUSTOM_SOURCELOCATION SourceLocation; namespace util { typedef GRPC_CUSTOM_UTIL_STATUS Status; } // namespace util namespace json = GRPC_CUSTOM_JSONUTIL; namespace io { typedef GRPC_CUSTOM_ZEROCOPYOUTPUTSTREAM ZeroCopyOutputStream; typedef GRPC_CUSTOM_ZEROCOPYINPUTSTREAM ZeroCopyInputStream; typedef GRPC_CUSTOM_CODEDINPUTSTREAM CodedInputStream; } // namespace io } // namespace protobuf } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_CONFIG_PROTOBUF_H grpc-1.30.2/include/grpcpp/impl/codegen/core_codegen.h000066400000000000000000000132221370425124100225770ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_CORE_CODEGEN_H #define GRPCPP_IMPL_CODEGEN_CORE_CODEGEN_H // This file should be compiled as part of grpcpp. #include #include #include #include namespace grpc { /// Implementation of the core codegen interface. class CoreCodegen final : public CoreCodegenInterface { private: virtual const grpc_completion_queue_factory* grpc_completion_queue_factory_lookup( const grpc_completion_queue_attributes* attributes) override; virtual grpc_completion_queue* grpc_completion_queue_create( const grpc_completion_queue_factory* factory, const grpc_completion_queue_attributes* attributes, void* reserved) override; grpc_completion_queue* grpc_completion_queue_create_for_next( void* reserved) override; grpc_completion_queue* grpc_completion_queue_create_for_pluck( void* reserved) override; void grpc_completion_queue_shutdown(grpc_completion_queue* cq) override; void grpc_completion_queue_destroy(grpc_completion_queue* cq) override; grpc_event grpc_completion_queue_pluck(grpc_completion_queue* cq, void* tag, gpr_timespec deadline, void* reserved) override; void* gpr_malloc(size_t size) override; void gpr_free(void* p) override; void grpc_init() override; void grpc_shutdown() override; void gpr_mu_init(gpr_mu* mu) override; void gpr_mu_destroy(gpr_mu* mu) override; void gpr_mu_lock(gpr_mu* mu) override; void gpr_mu_unlock(gpr_mu* mu) override; void gpr_cv_init(gpr_cv* cv) override; void gpr_cv_destroy(gpr_cv* cv) override; int gpr_cv_wait(gpr_cv* cv, gpr_mu* mu, gpr_timespec abs_deadline) override; void gpr_cv_signal(gpr_cv* cv) override; void gpr_cv_broadcast(gpr_cv* cv) override; grpc_call_error grpc_call_start_batch(grpc_call* call, const grpc_op* ops, size_t nops, void* tag, void* reserved) override; grpc_call_error grpc_call_cancel_with_status(grpc_call* call, grpc_status_code status, const char* description, void* reserved) override; void grpc_call_ref(grpc_call* call) override; void grpc_call_unref(grpc_call* call) override; void* grpc_call_arena_alloc(grpc_call* call, size_t length) override; const char* grpc_call_error_to_string(grpc_call_error error) override; grpc_byte_buffer* grpc_byte_buffer_copy(grpc_byte_buffer* bb) override; void grpc_byte_buffer_destroy(grpc_byte_buffer* bb) override; size_t grpc_byte_buffer_length(grpc_byte_buffer* bb) override; int grpc_byte_buffer_reader_init(grpc_byte_buffer_reader* reader, grpc_byte_buffer* buffer) override; void grpc_byte_buffer_reader_destroy( grpc_byte_buffer_reader* reader) override; int grpc_byte_buffer_reader_next(grpc_byte_buffer_reader* reader, grpc_slice* slice) override; int grpc_byte_buffer_reader_peek(grpc_byte_buffer_reader* reader, grpc_slice** slice) override; grpc_byte_buffer* grpc_raw_byte_buffer_create(grpc_slice* slice, size_t nslices) override; grpc_slice grpc_slice_new_with_user_data(void* p, size_t len, void (*destroy)(void*), void* user_data) override; grpc_slice grpc_slice_new_with_len(void* p, size_t len, void (*destroy)(void*, size_t)) override; grpc_slice grpc_empty_slice() override; grpc_slice grpc_slice_malloc(size_t length) override; void grpc_slice_unref(grpc_slice slice) override; grpc_slice grpc_slice_ref(grpc_slice slice) override; grpc_slice grpc_slice_split_tail(grpc_slice* s, size_t split) override; grpc_slice grpc_slice_split_head(grpc_slice* s, size_t split) override; grpc_slice grpc_slice_sub(grpc_slice s, size_t begin, size_t end) override; void grpc_slice_buffer_add(grpc_slice_buffer* sb, grpc_slice slice) override; void grpc_slice_buffer_pop(grpc_slice_buffer* sb) override; grpc_slice grpc_slice_from_static_buffer(const void* buffer, size_t length) override; grpc_slice grpc_slice_from_copied_buffer(const void* buffer, size_t length) override; void grpc_metadata_array_init(grpc_metadata_array* array) override; void grpc_metadata_array_destroy(grpc_metadata_array* array) override; gpr_timespec gpr_inf_future(gpr_clock_type type) override; gpr_timespec gpr_time_0(gpr_clock_type type) override; virtual const Status& ok() override; virtual const Status& cancelled() override; void assert_fail(const char* failed_assertion, const char* file, int line) override; }; } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_CORE_CODEGEN_H grpc-1.30.2/include/grpcpp/impl/codegen/core_codegen_interface.h000066400000000000000000000170461370425124100246270ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_CORE_CODEGEN_INTERFACE_H #define GRPCPP_IMPL_CODEGEN_CORE_CODEGEN_INTERFACE_H #include #include #include #include #include #include namespace grpc { /// Interface between the codegen library and the minimal subset of core /// features required by the generated code. /// /// All undocumented methods are simply forwarding the call to their namesakes. /// Please refer to their corresponding documentation for details. /// /// \warning This interface should be considered internal and private. class CoreCodegenInterface { public: virtual ~CoreCodegenInterface() = default; /// Upon a failed assertion, log the error. virtual void assert_fail(const char* failed_assertion, const char* file, int line) = 0; virtual const grpc_completion_queue_factory* grpc_completion_queue_factory_lookup( const grpc_completion_queue_attributes* attributes) = 0; virtual grpc_completion_queue* grpc_completion_queue_create( const grpc_completion_queue_factory* factory, const grpc_completion_queue_attributes* attributes, void* reserved) = 0; virtual grpc_completion_queue* grpc_completion_queue_create_for_next( void* reserved) = 0; virtual grpc_completion_queue* grpc_completion_queue_create_for_pluck( void* reserved) = 0; virtual void grpc_completion_queue_shutdown(grpc_completion_queue* cq) = 0; virtual void grpc_completion_queue_destroy(grpc_completion_queue* cq) = 0; virtual grpc_event grpc_completion_queue_pluck(grpc_completion_queue* cq, void* tag, gpr_timespec deadline, void* reserved) = 0; virtual void* gpr_malloc(size_t size) = 0; virtual void gpr_free(void* p) = 0; // These are only to be used to fix edge cases involving grpc_init and // grpc_shutdown. Calling grpc_init from the codegen interface before // the real grpc_init is called will cause a crash, so if you use this // function, ensure that it is not the first call to grpc_init. virtual void grpc_init() = 0; virtual void grpc_shutdown() = 0; virtual void gpr_mu_init(gpr_mu* mu) = 0; virtual void gpr_mu_destroy(gpr_mu* mu) = 0; virtual void gpr_mu_lock(gpr_mu* mu) = 0; virtual void gpr_mu_unlock(gpr_mu* mu) = 0; virtual void gpr_cv_init(gpr_cv* cv) = 0; virtual void gpr_cv_destroy(gpr_cv* cv) = 0; virtual int gpr_cv_wait(gpr_cv* cv, gpr_mu* mu, gpr_timespec abs_deadline) = 0; virtual void gpr_cv_signal(gpr_cv* cv) = 0; virtual void gpr_cv_broadcast(gpr_cv* cv) = 0; virtual grpc_byte_buffer* grpc_byte_buffer_copy(grpc_byte_buffer* bb) = 0; virtual void grpc_byte_buffer_destroy(grpc_byte_buffer* bb) = 0; virtual size_t grpc_byte_buffer_length(grpc_byte_buffer* bb) GRPC_MUST_USE_RESULT = 0; virtual int grpc_byte_buffer_reader_init(grpc_byte_buffer_reader* reader, grpc_byte_buffer* buffer) GRPC_MUST_USE_RESULT = 0; virtual void grpc_byte_buffer_reader_destroy( grpc_byte_buffer_reader* reader) = 0; virtual int grpc_byte_buffer_reader_next(grpc_byte_buffer_reader* reader, grpc_slice* slice) = 0; virtual int grpc_byte_buffer_reader_peek(grpc_byte_buffer_reader* reader, grpc_slice** slice) = 0; virtual grpc_byte_buffer* grpc_raw_byte_buffer_create(grpc_slice* slice, size_t nslices) = 0; virtual grpc_slice grpc_slice_new_with_user_data(void* p, size_t len, void (*destroy)(void*), void* user_data) = 0; virtual grpc_slice grpc_slice_new_with_len(void* p, size_t len, void (*destroy)(void*, size_t)) = 0; virtual grpc_call_error grpc_call_start_batch(grpc_call* call, const grpc_op* ops, size_t nops, void* tag, void* reserved) = 0; virtual grpc_call_error grpc_call_cancel_with_status(grpc_call* call, grpc_status_code status, const char* description, void* reserved) = 0; virtual void grpc_call_ref(grpc_call* call) = 0; virtual void grpc_call_unref(grpc_call* call) = 0; virtual void* grpc_call_arena_alloc(grpc_call* call, size_t length) = 0; virtual const char* grpc_call_error_to_string(grpc_call_error error) = 0; virtual grpc_slice grpc_empty_slice() = 0; virtual grpc_slice grpc_slice_malloc(size_t length) = 0; virtual void grpc_slice_unref(grpc_slice slice) = 0; virtual grpc_slice grpc_slice_ref(grpc_slice slice) = 0; virtual grpc_slice grpc_slice_split_tail(grpc_slice* s, size_t split) = 0; virtual grpc_slice grpc_slice_split_head(grpc_slice* s, size_t split) = 0; virtual grpc_slice grpc_slice_sub(grpc_slice s, size_t begin, size_t end) = 0; virtual void grpc_slice_buffer_add(grpc_slice_buffer* sb, grpc_slice slice) = 0; virtual void grpc_slice_buffer_pop(grpc_slice_buffer* sb) = 0; virtual grpc_slice grpc_slice_from_static_buffer(const void* buffer, size_t length) = 0; virtual grpc_slice grpc_slice_from_copied_buffer(const void* buffer, size_t length) = 0; virtual void grpc_metadata_array_init(grpc_metadata_array* array) = 0; virtual void grpc_metadata_array_destroy(grpc_metadata_array* array) = 0; virtual const Status& ok() = 0; virtual const Status& cancelled() = 0; virtual gpr_timespec gpr_inf_future(gpr_clock_type type) = 0; virtual gpr_timespec gpr_time_0(gpr_clock_type type) = 0; }; extern CoreCodegenInterface* g_core_codegen_interface; /// Codegen specific version of \a GPR_ASSERT. #define GPR_CODEGEN_ASSERT(x) \ do { \ if (GPR_UNLIKELY(!(x))) { \ grpc::g_core_codegen_interface->assert_fail(#x, __FILE__, __LINE__); \ } \ } while (0) /// Codegen specific version of \a GPR_DEBUG_ASSERT. #ifndef NDEBUG #define GPR_CODEGEN_DEBUG_ASSERT(x) GPR_CODEGEN_ASSERT(x) #else #define GPR_CODEGEN_DEBUG_ASSERT(x) \ do { \ } while (0) #endif } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_CORE_CODEGEN_INTERFACE_H grpc-1.30.2/include/grpcpp/impl/codegen/create_auth_context.h000066400000000000000000000017331370425124100242170ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_CREATE_AUTH_CONTEXT_H #define GRPCPP_IMPL_CODEGEN_CREATE_AUTH_CONTEXT_H #include #include #include namespace grpc { std::shared_ptr CreateAuthContext(grpc_call* call); } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_CREATE_AUTH_CONTEXT_H grpc-1.30.2/include/grpcpp/impl/codegen/delegating_channel.h000066400000000000000000000057331370425124100237660ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_DELEGATING_CHANNEL_H #define GRPCPP_IMPL_CODEGEN_DELEGATING_CHANNEL_H namespace grpc { namespace experimental { class DelegatingChannel : public ::grpc::ChannelInterface { public: virtual ~DelegatingChannel() {} DelegatingChannel(std::shared_ptr<::grpc::ChannelInterface> delegate_channel) : delegate_channel_(delegate_channel) {} grpc_connectivity_state GetState(bool try_to_connect) override { return delegate_channel()->GetState(try_to_connect); } std::shared_ptr<::grpc::ChannelInterface> delegate_channel() { return delegate_channel_; } private: internal::Call CreateCall(const internal::RpcMethod& method, ClientContext* context, ::grpc_impl::CompletionQueue* cq) final { return delegate_channel()->CreateCall(method, context, cq); } void PerformOpsOnCall(internal::CallOpSetInterface* ops, internal::Call* call) final { delegate_channel()->PerformOpsOnCall(ops, call); } void* RegisterMethod(const char* method) final { return delegate_channel()->RegisterMethod(method); } void NotifyOnStateChangeImpl(grpc_connectivity_state last_observed, gpr_timespec deadline, ::grpc_impl::CompletionQueue* cq, void* tag) override { delegate_channel()->NotifyOnStateChangeImpl(last_observed, deadline, cq, tag); } bool WaitForStateChangeImpl(grpc_connectivity_state last_observed, gpr_timespec deadline) override { return delegate_channel()->WaitForStateChangeImpl(last_observed, deadline); } internal::Call CreateCallInternal(const internal::RpcMethod& method, ClientContext* context, ::grpc_impl::CompletionQueue* cq, size_t interceptor_pos) final { return delegate_channel()->CreateCallInternal(method, context, cq, interceptor_pos); } ::grpc_impl::CompletionQueue* CallbackCQ() final { return delegate_channel()->CallbackCQ(); } std::shared_ptr<::grpc::ChannelInterface> delegate_channel_; }; } // namespace experimental } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_DELEGATING_CHANNEL_H grpc-1.30.2/include/grpcpp/impl/codegen/grpc_library.h000066400000000000000000000035061370425124100226460ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_GRPC_LIBRARY_H #define GRPCPP_IMPL_CODEGEN_GRPC_LIBRARY_H #include namespace grpc { class GrpcLibraryInterface { public: virtual ~GrpcLibraryInterface() = default; virtual void init() = 0; virtual void shutdown() = 0; }; /// Initialized by \a grpc::GrpcLibraryInitializer from /// extern GrpcLibraryInterface* g_glip; /// Classes that require gRPC to be initialized should inherit from this class. class GrpcLibraryCodegen { public: GrpcLibraryCodegen(bool call_grpc_init = true) : grpc_init_called_(false) { if (call_grpc_init) { GPR_CODEGEN_ASSERT(g_glip && "gRPC library not initialized. See " "grpc::internal::GrpcLibraryInitializer."); g_glip->init(); grpc_init_called_ = true; } } virtual ~GrpcLibraryCodegen() { if (grpc_init_called_) { GPR_CODEGEN_ASSERT(g_glip && "gRPC library not initialized. See " "grpc::internal::GrpcLibraryInitializer."); g_glip->shutdown(); } } private: bool grpc_init_called_; }; } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_GRPC_LIBRARY_H grpc-1.30.2/include/grpcpp/impl/codegen/intercepted_channel.h000066400000000000000000000055221370425124100241650ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_INTERCEPTED_CHANNEL_H #define GRPCPP_IMPL_CODEGEN_INTERCEPTED_CHANNEL_H #include namespace grpc_impl { class CompletionQueue; } namespace grpc { namespace internal { class InterceptorBatchMethodsImpl; /// An InterceptedChannel is available to client Interceptors. An /// InterceptedChannel is unique to an interceptor, and when an RPC is started /// on this channel, only those interceptors that come after this interceptor /// see the RPC. class InterceptedChannel : public ChannelInterface { public: virtual ~InterceptedChannel() { channel_ = nullptr; } /// Get the current channel state. If the channel is in IDLE and /// \a try_to_connect is set to true, try to connect. grpc_connectivity_state GetState(bool try_to_connect) override { return channel_->GetState(try_to_connect); } private: InterceptedChannel(ChannelInterface* channel, size_t pos) : channel_(channel), interceptor_pos_(pos) {} Call CreateCall(const RpcMethod& method, ::grpc_impl::ClientContext* context, ::grpc_impl::CompletionQueue* cq) override { return channel_->CreateCallInternal(method, context, cq, interceptor_pos_); } void PerformOpsOnCall(CallOpSetInterface* ops, Call* call) override { return channel_->PerformOpsOnCall(ops, call); } void* RegisterMethod(const char* method) override { return channel_->RegisterMethod(method); } void NotifyOnStateChangeImpl(grpc_connectivity_state last_observed, gpr_timespec deadline, ::grpc_impl::CompletionQueue* cq, void* tag) override { return channel_->NotifyOnStateChangeImpl(last_observed, deadline, cq, tag); } bool WaitForStateChangeImpl(grpc_connectivity_state last_observed, gpr_timespec deadline) override { return channel_->WaitForStateChangeImpl(last_observed, deadline); } ::grpc_impl::CompletionQueue* CallbackCQ() override { return channel_->CallbackCQ(); } ChannelInterface* channel_; size_t interceptor_pos_; friend class InterceptorBatchMethodsImpl; }; } // namespace internal } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_INTERCEPTED_CHANNEL_H grpc-1.30.2/include/grpcpp/impl/codegen/interceptor.h000066400000000000000000000253071370425124100225300ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_INTERCEPTOR_H #define GRPCPP_IMPL_CODEGEN_INTERCEPTOR_H #include #include #include #include #include #include namespace grpc { class ChannelInterface; class Status; namespace experimental { /// An enumeration of different possible points at which the \a Intercept /// method of the \a Interceptor interface may be called. Any given call /// to \a Intercept will include one or more of these hook points, and /// each hook point makes certain types of information available to the /// interceptor. /// In these enumeration names, PRE_SEND means that an interception has taken /// place between the time the application provided a certain type of data /// (e.g., initial metadata, status) and the time that that data goes to the /// other side. POST_SEND means that the data has been committed for going to /// the other side (even if it has not yet been received at the other side). /// PRE_RECV means an interception between the time that a certain /// operation has been requested and it is available. POST_RECV means that a /// result is available but has not yet been passed back to the application. /// A batch of interception points will only contain either PRE or POST hooks /// but not both types. For example, a batch with PRE_SEND hook points will not /// contain POST_RECV or POST_SEND ops. Likewise, a batch with POST_* ops can /// not contain PRE_* ops. enum class InterceptionHookPoints { /// The first three in this list are for clients and servers PRE_SEND_INITIAL_METADATA, PRE_SEND_MESSAGE, POST_SEND_MESSAGE, PRE_SEND_STATUS, // server only PRE_SEND_CLOSE, // client only: WritesDone for stream; after write in unary /// The following three are for hijacked clients only. A batch with PRE_RECV_* /// hook points will never contain hook points of other types. PRE_RECV_INITIAL_METADATA, PRE_RECV_MESSAGE, PRE_RECV_STATUS, /// The following two are for all clients and servers POST_RECV_INITIAL_METADATA, POST_RECV_MESSAGE, POST_RECV_STATUS, // client only POST_RECV_CLOSE, // server only /// This is a special hook point available to both clients and servers when /// TryCancel() is performed. /// - No other hook points will be present along with this. /// - It is illegal for an interceptor to block/delay this operation. /// - ALL interceptors see this hook point irrespective of whether the /// RPC was hijacked or not. PRE_SEND_CANCEL, NUM_INTERCEPTION_HOOKS }; /// Class that is passed as an argument to the \a Intercept method /// of the application's \a Interceptor interface implementation. It has five /// purposes: /// 1. Indicate which hook points are present at a specific interception /// 2. Allow an interceptor to inform the library that an RPC should /// continue to the next stage of its processing (which may be another /// interceptor or the main path of the library) /// 3. Allow an interceptor to hijack the processing of the RPC (only for /// client-side RPCs with PRE_SEND_INITIAL_METADATA) so that it does not /// proceed with normal processing beyond that stage /// 4. Access the relevant fields of an RPC at each interception point /// 5. Set some fields of an RPC at each interception point, when possible class InterceptorBatchMethods { public: virtual ~InterceptorBatchMethods() {} /// Determine whether the current batch has an interception hook point /// of type \a type virtual bool QueryInterceptionHookPoint(InterceptionHookPoints type) = 0; /// Signal that the interceptor is done intercepting the current batch of the /// RPC. Every interceptor must either call Proceed or Hijack on each /// interception. In most cases, only Proceed will be used. Explicit use of /// Proceed is what enables interceptors to delay the processing of RPCs /// while they perform other work. /// Proceed is a no-op if the batch contains PRE_SEND_CANCEL. Simply returning /// from the Intercept method does the job of continuing the RPC in this case. /// This is because PRE_SEND_CANCEL is always in a separate batch and is not /// allowed to be delayed. virtual void Proceed() = 0; /// Indicate that the interceptor has hijacked the RPC (only valid if the /// batch contains send_initial_metadata on the client side). Later /// interceptors in the interceptor list will not be called. Later batches /// on the same RPC will go through interception, but only up to the point /// of the hijacking interceptor. virtual void Hijack() = 0; /// Send Message Methods /// GetSerializedSendMessage and GetSendMessage/ModifySendMessage are the /// available methods to view and modify the request payload. An interceptor /// can access the payload in either serialized form or non-serialized form /// but not both at the same time. /// gRPC performs serialization in a lazy manner, which means /// that a call to GetSerializedSendMessage will result in a serialization /// operation if the payload stored is not in the serialized form already; the /// non-serialized form will be lost and GetSendMessage will no longer return /// a valid pointer, and this will remain true for later interceptors too. /// This can change however if ModifySendMessage is used to replace the /// current payload. Note that ModifySendMessage requires a new payload /// message in the non-serialized form. This will overwrite the existing /// payload irrespective of whether it had been serialized earlier. Also note /// that gRPC Async API requires early serialization of the payload which /// means that the payload would be available in the serialized form only /// unless an interceptor replaces the payload with ModifySendMessage. /// Returns a modifable ByteBuffer holding the serialized form of the message /// that is going to be sent. Valid for PRE_SEND_MESSAGE interceptions. /// A return value of nullptr indicates that this ByteBuffer is not valid. virtual ByteBuffer* GetSerializedSendMessage() = 0; /// Returns a non-modifiable pointer to the non-serialized form of the message /// to be sent. Valid for PRE_SEND_MESSAGE interceptions. A return value of /// nullptr indicates that this field is not valid. virtual const void* GetSendMessage() = 0; /// Overwrites the message to be sent with \a message. \a message should be in /// the non-serialized form expected by the method. Valid for PRE_SEND_MESSAGE /// interceptions. Note that the interceptor is responsible for maintaining /// the life of the message till it is serialized or it receives the /// POST_SEND_MESSAGE interception point, whichever happens earlier. The /// modifying interceptor may itself force early serialization by calling /// GetSerializedSendMessage. virtual void ModifySendMessage(const void* message) = 0; /// Checks whether the SEND MESSAGE op succeeded. Valid for POST_SEND_MESSAGE /// interceptions. virtual bool GetSendMessageStatus() = 0; /// Returns a modifiable multimap of the initial metadata to be sent. Valid /// for PRE_SEND_INITIAL_METADATA interceptions. A value of nullptr indicates /// that this field is not valid. virtual std::multimap* GetSendInitialMetadata() = 0; /// Returns the status to be sent. Valid for PRE_SEND_STATUS interceptions. virtual Status GetSendStatus() = 0; /// Overwrites the status with \a status. Valid for PRE_SEND_STATUS /// interceptions. virtual void ModifySendStatus(const Status& status) = 0; /// Returns a modifiable multimap of the trailing metadata to be sent. Valid /// for PRE_SEND_STATUS interceptions. A value of nullptr indicates /// that this field is not valid. virtual std::multimap* GetSendTrailingMetadata() = 0; /// Returns a pointer to the modifiable received message. Note that the /// message is already deserialized but the type is not set; the interceptor /// should static_cast to the appropriate type before using it. This is valid /// for PRE_RECV_MESSAGE and POST_RECV_MESSAGE interceptions; nullptr for not /// valid virtual void* GetRecvMessage() = 0; /// Returns a modifiable multimap of the received initial metadata. /// Valid for PRE_RECV_INITIAL_METADATA and POST_RECV_INITIAL_METADATA /// interceptions; nullptr if not valid virtual std::multimap* GetRecvInitialMetadata() = 0; /// Returns a modifiable view of the received status on PRE_RECV_STATUS and /// POST_RECV_STATUS interceptions; nullptr if not valid. virtual Status* GetRecvStatus() = 0; /// Returns a modifiable multimap of the received trailing metadata on /// PRE_RECV_STATUS and POST_RECV_STATUS interceptions; nullptr if not valid virtual std::multimap* GetRecvTrailingMetadata() = 0; /// Gets an intercepted channel. When a call is started on this interceptor, /// only interceptors after the current interceptor are created from the /// factory objects registered with the channel. This allows calls to be /// started from interceptors without infinite regress through the interceptor /// list. virtual std::unique_ptr GetInterceptedChannel() = 0; /// On a hijacked RPC, an interceptor can decide to fail a PRE_RECV_MESSAGE /// op. This would be a signal to the reader that there will be no more /// messages, or the stream has failed or been cancelled. virtual void FailHijackedRecvMessage() = 0; /// On a hijacked RPC/ to-be hijacked RPC, this can be called to fail a SEND /// MESSAGE op virtual void FailHijackedSendMessage() = 0; }; /// Interface for an interceptor. Interceptor authors must create a class /// that derives from this parent class. class Interceptor { public: virtual ~Interceptor() {} /// The one public method of an Interceptor interface. Override this to /// trigger the desired actions at the hook points described above. virtual void Intercept(InterceptorBatchMethods* methods) = 0; }; } // namespace experimental } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_INTERCEPTOR_H grpc-1.30.2/include/grpcpp/impl/codegen/interceptor_common.h000066400000000000000000000437701370425124100241040ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_INTERCEPTOR_COMMON_H #define GRPCPP_IMPL_CODEGEN_INTERCEPTOR_COMMON_H #include #include #include #include #include #include #include #include namespace grpc { namespace internal { class InterceptorBatchMethodsImpl : public experimental::InterceptorBatchMethods { public: InterceptorBatchMethodsImpl() { for (auto i = static_cast(0); i < experimental::InterceptionHookPoints::NUM_INTERCEPTION_HOOKS; i = static_cast( static_cast(i) + 1)) { hooks_[static_cast(i)] = false; } } ~InterceptorBatchMethodsImpl() {} bool QueryInterceptionHookPoint( experimental::InterceptionHookPoints type) override { return hooks_[static_cast(type)]; } void Proceed() override { if (call_->client_rpc_info() != nullptr) { return ProceedClient(); } GPR_CODEGEN_ASSERT(call_->server_rpc_info() != nullptr); ProceedServer(); } void Hijack() override { // Only the client can hijack when sending down initial metadata GPR_CODEGEN_ASSERT(!reverse_ && ops_ != nullptr && call_->client_rpc_info() != nullptr); // It is illegal to call Hijack twice GPR_CODEGEN_ASSERT(!ran_hijacking_interceptor_); auto* rpc_info = call_->client_rpc_info(); rpc_info->hijacked_ = true; rpc_info->hijacked_interceptor_ = current_interceptor_index_; ClearHookPoints(); ops_->SetHijackingState(); ran_hijacking_interceptor_ = true; rpc_info->RunInterceptor(this, current_interceptor_index_); } void AddInterceptionHookPoint(experimental::InterceptionHookPoints type) { hooks_[static_cast(type)] = true; } ByteBuffer* GetSerializedSendMessage() override { GPR_CODEGEN_ASSERT(orig_send_message_ != nullptr); if (*orig_send_message_ != nullptr) { GPR_CODEGEN_ASSERT(serializer_(*orig_send_message_).ok()); *orig_send_message_ = nullptr; } return send_message_; } const void* GetSendMessage() override { GPR_CODEGEN_ASSERT(orig_send_message_ != nullptr); return *orig_send_message_; } void ModifySendMessage(const void* message) override { GPR_CODEGEN_ASSERT(orig_send_message_ != nullptr); *orig_send_message_ = message; } bool GetSendMessageStatus() override { return !*fail_send_message_; } std::multimap* GetSendInitialMetadata() override { return send_initial_metadata_; } Status GetSendStatus() override { return Status(static_cast(*code_), *error_message_, *error_details_); } void ModifySendStatus(const Status& status) override { *code_ = static_cast(status.error_code()); *error_details_ = status.error_details(); *error_message_ = status.error_message(); } std::multimap* GetSendTrailingMetadata() override { return send_trailing_metadata_; } void* GetRecvMessage() override { return recv_message_; } std::multimap* GetRecvInitialMetadata() override { return recv_initial_metadata_->map(); } Status* GetRecvStatus() override { return recv_status_; } void FailHijackedSendMessage() override { GPR_CODEGEN_ASSERT(hooks_[static_cast( experimental::InterceptionHookPoints::PRE_SEND_MESSAGE)]); *fail_send_message_ = true; } std::multimap* GetRecvTrailingMetadata() override { return recv_trailing_metadata_->map(); } void SetSendMessage(ByteBuffer* buf, const void** msg, bool* fail_send_message, std::function serializer) { send_message_ = buf; orig_send_message_ = msg; fail_send_message_ = fail_send_message; serializer_ = serializer; } void SetSendInitialMetadata( std::multimap* metadata) { send_initial_metadata_ = metadata; } void SetSendStatus(grpc_status_code* code, grpc::string* error_details, grpc::string* error_message) { code_ = code; error_details_ = error_details; error_message_ = error_message; } void SetSendTrailingMetadata( std::multimap* metadata) { send_trailing_metadata_ = metadata; } void SetRecvMessage(void* message, bool* hijacked_recv_message_failed) { recv_message_ = message; hijacked_recv_message_failed_ = hijacked_recv_message_failed; } void SetRecvInitialMetadata(MetadataMap* map) { recv_initial_metadata_ = map; } void SetRecvStatus(Status* status) { recv_status_ = status; } void SetRecvTrailingMetadata(MetadataMap* map) { recv_trailing_metadata_ = map; } std::unique_ptr GetInterceptedChannel() override { auto* info = call_->client_rpc_info(); if (info == nullptr) { return std::unique_ptr(nullptr); } // The intercepted channel starts from the interceptor just after the // current interceptor return std::unique_ptr(new InterceptedChannel( info->channel(), current_interceptor_index_ + 1)); } void FailHijackedRecvMessage() override { GPR_CODEGEN_ASSERT(hooks_[static_cast( experimental::InterceptionHookPoints::PRE_RECV_MESSAGE)]); *hijacked_recv_message_failed_ = true; } // Clears all state void ClearState() { reverse_ = false; ran_hijacking_interceptor_ = false; ClearHookPoints(); } // Prepares for Post_recv operations void SetReverse() { reverse_ = true; ran_hijacking_interceptor_ = false; ClearHookPoints(); } // This needs to be set before interceptors are run void SetCall(Call* call) { call_ = call; } // This needs to be set before interceptors are run using RunInterceptors(). // Alternatively, RunInterceptors(std::function f) can be used. void SetCallOpSetInterface(CallOpSetInterface* ops) { ops_ = ops; } // SetCall should have been called before this. // Returns true if the interceptors list is empty bool InterceptorsListEmpty() { auto* client_rpc_info = call_->client_rpc_info(); if (client_rpc_info != nullptr) { if (client_rpc_info->interceptors_.size() == 0) { return true; } else { return false; } } auto* server_rpc_info = call_->server_rpc_info(); if (server_rpc_info == nullptr || server_rpc_info->interceptors_.size() == 0) { return true; } return false; } // This should be used only by subclasses of CallOpSetInterface. SetCall and // SetCallOpSetInterface should have been called before this. After all the // interceptors are done running, either ContinueFillOpsAfterInterception or // ContinueFinalizeOpsAfterInterception will be called. Note that neither of // them is invoked if there were no interceptors registered. bool RunInterceptors() { GPR_CODEGEN_ASSERT(ops_); auto* client_rpc_info = call_->client_rpc_info(); if (client_rpc_info != nullptr) { if (client_rpc_info->interceptors_.size() == 0) { return true; } else { RunClientInterceptors(); return false; } } auto* server_rpc_info = call_->server_rpc_info(); if (server_rpc_info == nullptr || server_rpc_info->interceptors_.size() == 0) { return true; } RunServerInterceptors(); return false; } // Returns true if no interceptors are run. Returns false otherwise if there // are interceptors registered. After the interceptors are done running \a f // will be invoked. This is to be used only by BaseAsyncRequest and // SyncRequest. bool RunInterceptors(std::function f) { // This is used only by the server for initial call request GPR_CODEGEN_ASSERT(reverse_ == true); GPR_CODEGEN_ASSERT(call_->client_rpc_info() == nullptr); auto* server_rpc_info = call_->server_rpc_info(); if (server_rpc_info == nullptr || server_rpc_info->interceptors_.size() == 0) { return true; } callback_ = std::move(f); RunServerInterceptors(); return false; } private: void RunClientInterceptors() { auto* rpc_info = call_->client_rpc_info(); if (!reverse_) { current_interceptor_index_ = 0; } else { if (rpc_info->hijacked_) { current_interceptor_index_ = rpc_info->hijacked_interceptor_; } else { current_interceptor_index_ = rpc_info->interceptors_.size() - 1; } } rpc_info->RunInterceptor(this, current_interceptor_index_); } void RunServerInterceptors() { auto* rpc_info = call_->server_rpc_info(); if (!reverse_) { current_interceptor_index_ = 0; } else { current_interceptor_index_ = rpc_info->interceptors_.size() - 1; } rpc_info->RunInterceptor(this, current_interceptor_index_); } void ProceedClient() { auto* rpc_info = call_->client_rpc_info(); if (rpc_info->hijacked_ && !reverse_ && current_interceptor_index_ == rpc_info->hijacked_interceptor_ && !ran_hijacking_interceptor_) { // We now need to provide hijacked recv ops to this interceptor ClearHookPoints(); ops_->SetHijackingState(); ran_hijacking_interceptor_ = true; rpc_info->RunInterceptor(this, current_interceptor_index_); return; } if (!reverse_) { current_interceptor_index_++; // We are going down the stack of interceptors if (current_interceptor_index_ < rpc_info->interceptors_.size()) { if (rpc_info->hijacked_ && current_interceptor_index_ > rpc_info->hijacked_interceptor_) { // This is a hijacked RPC and we are done with hijacking ops_->ContinueFillOpsAfterInterception(); } else { rpc_info->RunInterceptor(this, current_interceptor_index_); } } else { // we are done running all the interceptors without any hijacking ops_->ContinueFillOpsAfterInterception(); } } else { // We are going up the stack of interceptors if (current_interceptor_index_ > 0) { // Continue running interceptors current_interceptor_index_--; rpc_info->RunInterceptor(this, current_interceptor_index_); } else { // we are done running all the interceptors without any hijacking ops_->ContinueFinalizeResultAfterInterception(); } } } void ProceedServer() { auto* rpc_info = call_->server_rpc_info(); if (!reverse_) { current_interceptor_index_++; if (current_interceptor_index_ < rpc_info->interceptors_.size()) { return rpc_info->RunInterceptor(this, current_interceptor_index_); } else if (ops_) { return ops_->ContinueFillOpsAfterInterception(); } } else { // We are going up the stack of interceptors if (current_interceptor_index_ > 0) { // Continue running interceptors current_interceptor_index_--; return rpc_info->RunInterceptor(this, current_interceptor_index_); } else if (ops_) { return ops_->ContinueFinalizeResultAfterInterception(); } } GPR_CODEGEN_ASSERT(callback_); callback_(); } void ClearHookPoints() { for (auto i = static_cast(0); i < experimental::InterceptionHookPoints::NUM_INTERCEPTION_HOOKS; i = static_cast( static_cast(i) + 1)) { hooks_[static_cast(i)] = false; } } std::array( experimental::InterceptionHookPoints::NUM_INTERCEPTION_HOOKS)> hooks_; size_t current_interceptor_index_ = 0; // Current iterator bool reverse_ = false; bool ran_hijacking_interceptor_ = false; Call* call_ = nullptr; // The Call object is present along with CallOpSet // object/callback CallOpSetInterface* ops_ = nullptr; std::function callback_; ByteBuffer* send_message_ = nullptr; bool* fail_send_message_ = nullptr; const void** orig_send_message_ = nullptr; std::function serializer_; std::multimap* send_initial_metadata_; grpc_status_code* code_ = nullptr; grpc::string* error_details_ = nullptr; grpc::string* error_message_ = nullptr; std::multimap* send_trailing_metadata_ = nullptr; void* recv_message_ = nullptr; bool* hijacked_recv_message_failed_ = nullptr; MetadataMap* recv_initial_metadata_ = nullptr; Status* recv_status_ = nullptr; MetadataMap* recv_trailing_metadata_ = nullptr; }; // A special implementation of InterceptorBatchMethods to send a Cancel // notification down the interceptor stack class CancelInterceptorBatchMethods : public experimental::InterceptorBatchMethods { public: bool QueryInterceptionHookPoint( experimental::InterceptionHookPoints type) override { if (type == experimental::InterceptionHookPoints::PRE_SEND_CANCEL) { return true; } else { return false; } } void Proceed() override { // This is a no-op. For actual continuation of the RPC simply needs to // return from the Intercept method } void Hijack() override { // Only the client can hijack when sending down initial metadata GPR_CODEGEN_ASSERT(false && "It is illegal to call Hijack on a method which has a " "Cancel notification"); } ByteBuffer* GetSerializedSendMessage() override { GPR_CODEGEN_ASSERT(false && "It is illegal to call GetSendMessage on a method which " "has a Cancel notification"); return nullptr; } bool GetSendMessageStatus() override { GPR_CODEGEN_ASSERT( false && "It is illegal to call GetSendMessageStatus on a method which " "has a Cancel notification"); return false; } const void* GetSendMessage() override { GPR_CODEGEN_ASSERT( false && "It is illegal to call GetOriginalSendMessage on a method which " "has a Cancel notification"); return nullptr; } void ModifySendMessage(const void* /*message*/) override { GPR_CODEGEN_ASSERT( false && "It is illegal to call ModifySendMessage on a method which " "has a Cancel notification"); } std::multimap* GetSendInitialMetadata() override { GPR_CODEGEN_ASSERT(false && "It is illegal to call GetSendInitialMetadata on a " "method which has a Cancel notification"); return nullptr; } Status GetSendStatus() override { GPR_CODEGEN_ASSERT(false && "It is illegal to call GetSendStatus on a method which " "has a Cancel notification"); return Status(); } void ModifySendStatus(const Status& /*status*/) override { GPR_CODEGEN_ASSERT(false && "It is illegal to call ModifySendStatus on a method " "which has a Cancel notification"); return; } std::multimap* GetSendTrailingMetadata() override { GPR_CODEGEN_ASSERT(false && "It is illegal to call GetSendTrailingMetadata on a " "method which has a Cancel notification"); return nullptr; } void* GetRecvMessage() override { GPR_CODEGEN_ASSERT(false && "It is illegal to call GetRecvMessage on a method which " "has a Cancel notification"); return nullptr; } std::multimap* GetRecvInitialMetadata() override { GPR_CODEGEN_ASSERT(false && "It is illegal to call GetRecvInitialMetadata on a " "method which has a Cancel notification"); return nullptr; } Status* GetRecvStatus() override { GPR_CODEGEN_ASSERT(false && "It is illegal to call GetRecvStatus on a method which " "has a Cancel notification"); return nullptr; } std::multimap* GetRecvTrailingMetadata() override { GPR_CODEGEN_ASSERT(false && "It is illegal to call GetRecvTrailingMetadata on a " "method which has a Cancel notification"); return nullptr; } std::unique_ptr GetInterceptedChannel() override { GPR_CODEGEN_ASSERT(false && "It is illegal to call GetInterceptedChannel on a " "method which has a Cancel notification"); return std::unique_ptr(nullptr); } void FailHijackedRecvMessage() override { GPR_CODEGEN_ASSERT(false && "It is illegal to call FailHijackedRecvMessage on a " "method which has a Cancel notification"); } void FailHijackedSendMessage() override { GPR_CODEGEN_ASSERT(false && "It is illegal to call FailHijackedSendMessage on a " "method which has a Cancel notification"); } }; } // namespace internal } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_INTERCEPTOR_COMMON_H grpc-1.30.2/include/grpcpp/impl/codegen/message_allocator.h000066400000000000000000000061161370425124100236530ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_MESSAGE_ALLOCATOR_H #define GRPCPP_IMPL_CODEGEN_MESSAGE_ALLOCATOR_H namespace grpc { #ifndef GRPC_CALLBACK_API_NONEXPERIMENTAL namespace experimental { #endif // NOTE: This is an API for advanced users who need custom allocators. // Per rpc struct for the allocator. This is the interface to return to user. class RpcAllocatorState { public: virtual ~RpcAllocatorState() = default; // Optionally deallocate request early to reduce the size of working set. // A custom MessageAllocator needs to be registered to make use of this. // This is not abstract because implementing it is optional. virtual void FreeRequest() {} }; // This is the interface returned by the allocator. // grpc library will call the methods to get request/response pointers and to // release the object when it is done. template class MessageHolder : public RpcAllocatorState { public: // Release this object. For example, if the custom allocator's // AllocateMessasge creates an instance of a subclass with new, the Release() // should do a "delete this;". virtual void Release() = 0; RequestT* request() { return request_; } ResponseT* response() { return response_; } protected: void set_request(RequestT* request) { request_ = request; } void set_response(ResponseT* response) { response_ = response; } private: // NOTE: subclasses should set these pointers. RequestT* request_; ResponseT* response_; }; // A custom allocator can be set via the generated code to a callback unary // method, such as SetMessageAllocatorFor_Echo(custom_allocator). The allocator // needs to be alive for the lifetime of the server. // Implementations need to be thread-safe. template class MessageAllocator { public: virtual ~MessageAllocator() = default; virtual MessageHolder* AllocateMessages() = 0; }; #ifndef GRPC_CALLBACK_API_NONEXPERIMENTAL } // namespace experimental #endif // TODO(vjpai): Remove namespace experimental when de-experimentalized fully. #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL namespace experimental { using ::grpc::RpcAllocatorState; template using MessageHolder = ::grpc::MessageHolder; template using MessageAllocator = ::grpc::MessageAllocator; } // namespace experimental #endif } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_MESSAGE_ALLOCATOR_H grpc-1.30.2/include/grpcpp/impl/codegen/metadata_map.h000066400000000000000000000056471370425124100226140ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_METADATA_MAP_H #define GRPCPP_IMPL_CODEGEN_METADATA_MAP_H #include #include #include namespace grpc { namespace internal { const char kBinaryErrorDetailsKey[] = "grpc-status-details-bin"; class MetadataMap { public: MetadataMap() { Setup(); } ~MetadataMap() { Destroy(); } grpc::string GetBinaryErrorDetails() { // if filled_, extract from the multimap for O(log(n)) if (filled_) { auto iter = map_.find(kBinaryErrorDetailsKey); if (iter != map_.end()) { return grpc::string(iter->second.begin(), iter->second.length()); } } // if not yet filled, take the O(n) lookup to avoid allocating the // multimap until it is requested. // TODO(ncteisen): plumb this through core as a first class object, just // like code and message. else { for (size_t i = 0; i < arr_.count; i++) { if (strncmp(reinterpret_cast( GRPC_SLICE_START_PTR(arr_.metadata[i].key)), kBinaryErrorDetailsKey, GRPC_SLICE_LENGTH(arr_.metadata[i].key)) == 0) { return grpc::string(reinterpret_cast( GRPC_SLICE_START_PTR(arr_.metadata[i].value)), GRPC_SLICE_LENGTH(arr_.metadata[i].value)); } } } return grpc::string(); } std::multimap* map() { FillMap(); return &map_; } grpc_metadata_array* arr() { return &arr_; } void Reset() { filled_ = false; map_.clear(); Destroy(); Setup(); } private: bool filled_ = false; grpc_metadata_array arr_; std::multimap map_; void Destroy() { g_core_codegen_interface->grpc_metadata_array_destroy(&arr_); } void Setup() { memset(&arr_, 0, sizeof(arr_)); } void FillMap() { if (filled_) return; filled_ = true; for (size_t i = 0; i < arr_.count; i++) { // TODO(yangg) handle duplicates? map_.insert(std::pair( StringRefFromSlice(&arr_.metadata[i].key), StringRefFromSlice(&arr_.metadata[i].value))); } } }; } // namespace internal } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_METADATA_MAP_H grpc-1.30.2/include/grpcpp/impl/codegen/method_handler.h000066400000000000000000000051121370425124100231370ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_METHOD_HANDLER_H #define GRPCPP_IMPL_CODEGEN_METHOD_HANDLER_H #include namespace grpc { namespace internal { template using BidiStreamingHandler = ::grpc_impl::internal::BidiStreamingHandler; template using RpcMethodHandler = ::grpc_impl::internal::RpcMethodHandler; template using ClientStreamingHandler = ::grpc_impl::internal::ClientStreamingHandler; template using ServerStreamingHandler = ::grpc_impl::internal::ServerStreamingHandler; template using TemplatedBidiStreamingHandler = ::grpc_impl::internal::TemplatedBidiStreamingHandler; template using StreamedUnaryHandler = ::grpc_impl::internal::StreamedUnaryHandler; template using SplitServerStreamingHandler = ::grpc_impl::internal::SplitServerStreamingHandler; template using ErrorMethodHandler = ::grpc_impl::internal::ErrorMethodHandler; using UnknownMethodHandler = ::grpc_impl::internal::UnknownMethodHandler; using ResourceExhaustedHandler = ::grpc_impl::internal::ResourceExhaustedHandler; } // namespace internal } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_METHOD_HANDLER_H grpc-1.30.2/include/grpcpp/impl/codegen/method_handler_impl.h000066400000000000000000000357261370425124100241760ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_METHOD_HANDLER_IMPL_H #define GRPCPP_IMPL_CODEGEN_METHOD_HANDLER_IMPL_H #include #include #include #include namespace grpc_impl { namespace internal { // Invoke the method handler, fill in the status, and // return whether or not we finished safely (without an exception). // Note that exception handling is 0-cost in most compiler/library // implementations (except when an exception is actually thrown), // so this process doesn't require additional overhead in the common case. // Additionally, we don't need to return if we caught an exception or not; // the handling is the same in either case. template ::grpc::Status CatchingFunctionHandler(Callable&& handler) { #if GRPC_ALLOW_EXCEPTIONS try { return handler(); } catch (...) { return ::grpc::Status(::grpc::StatusCode::UNKNOWN, "Unexpected error in RPC handling"); } #else // GRPC_ALLOW_EXCEPTIONS return handler(); #endif // GRPC_ALLOW_EXCEPTIONS } /// A wrapper class of an application provided rpc method handler. template class RpcMethodHandler : public ::grpc::internal::MethodHandler { public: RpcMethodHandler( std::function<::grpc::Status(ServiceType*, ::grpc_impl::ServerContext*, const RequestType*, ResponseType*)> func, ServiceType* service) : func_(func), service_(service) {} void RunHandler(const HandlerParameter& param) final { ResponseType rsp; ::grpc::Status status = param.status; if (status.ok()) { status = CatchingFunctionHandler([this, ¶m, &rsp] { return func_( service_, static_cast<::grpc_impl::ServerContext*>(param.server_context), static_cast(param.request), &rsp); }); static_cast(param.request)->~RequestType(); } GPR_CODEGEN_ASSERT(!param.server_context->sent_initial_metadata_); ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpSendMessage, ::grpc::internal::CallOpServerSendStatus> ops; ops.SendInitialMetadata(¶m.server_context->initial_metadata_, param.server_context->initial_metadata_flags()); if (param.server_context->compression_level_set()) { ops.set_compression_level(param.server_context->compression_level()); } if (status.ok()) { status = ops.SendMessagePtr(&rsp); } ops.ServerSendStatus(¶m.server_context->trailing_metadata_, status); param.call->PerformOps(&ops); param.call->cq()->Pluck(&ops); } void* Deserialize(grpc_call* call, grpc_byte_buffer* req, ::grpc::Status* status, void** /*handler_data*/) final { ::grpc::ByteBuffer buf; buf.set_buffer(req); auto* request = new (::grpc::g_core_codegen_interface->grpc_call_arena_alloc( call, sizeof(RequestType))) RequestType(); *status = ::grpc::SerializationTraits::Deserialize(&buf, request); buf.Release(); if (status->ok()) { return request; } request->~RequestType(); return nullptr; } private: /// Application provided rpc handler function. std::function<::grpc::Status(ServiceType*, ::grpc_impl::ServerContext*, const RequestType*, ResponseType*)> func_; // The class the above handler function lives in. ServiceType* service_; }; /// A wrapper class of an application provided client streaming handler. template class ClientStreamingHandler : public ::grpc::internal::MethodHandler { public: ClientStreamingHandler( std::function<::grpc::Status(ServiceType*, ::grpc_impl::ServerContext*, ::grpc_impl::ServerReader*, ResponseType*)> func, ServiceType* service) : func_(func), service_(service) {} void RunHandler(const HandlerParameter& param) final { ::grpc_impl::ServerReader reader( param.call, static_cast<::grpc_impl::ServerContext*>(param.server_context)); ResponseType rsp; ::grpc::Status status = CatchingFunctionHandler([this, ¶m, &reader, &rsp] { return func_( service_, static_cast<::grpc_impl::ServerContext*>(param.server_context), &reader, &rsp); }); ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpSendMessage, ::grpc::internal::CallOpServerSendStatus> ops; if (!param.server_context->sent_initial_metadata_) { ops.SendInitialMetadata(¶m.server_context->initial_metadata_, param.server_context->initial_metadata_flags()); if (param.server_context->compression_level_set()) { ops.set_compression_level(param.server_context->compression_level()); } } if (status.ok()) { status = ops.SendMessagePtr(&rsp); } ops.ServerSendStatus(¶m.server_context->trailing_metadata_, status); param.call->PerformOps(&ops); param.call->cq()->Pluck(&ops); } private: std::function<::grpc::Status(ServiceType*, ::grpc_impl::ServerContext*, ::grpc_impl::ServerReader*, ResponseType*)> func_; ServiceType* service_; }; /// A wrapper class of an application provided server streaming handler. template class ServerStreamingHandler : public ::grpc::internal::MethodHandler { public: ServerStreamingHandler( std::function<::grpc::Status(ServiceType*, ::grpc_impl::ServerContext*, const RequestType*, ::grpc_impl::ServerWriter*)> func, ServiceType* service) : func_(func), service_(service) {} void RunHandler(const HandlerParameter& param) final { ::grpc::Status status = param.status; if (status.ok()) { ::grpc_impl::ServerWriter writer( param.call, static_cast<::grpc_impl::ServerContext*>(param.server_context)); status = CatchingFunctionHandler([this, ¶m, &writer] { return func_( service_, static_cast<::grpc_impl::ServerContext*>(param.server_context), static_cast(param.request), &writer); }); static_cast(param.request)->~RequestType(); } ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpServerSendStatus> ops; if (!param.server_context->sent_initial_metadata_) { ops.SendInitialMetadata(¶m.server_context->initial_metadata_, param.server_context->initial_metadata_flags()); if (param.server_context->compression_level_set()) { ops.set_compression_level(param.server_context->compression_level()); } } ops.ServerSendStatus(¶m.server_context->trailing_metadata_, status); param.call->PerformOps(&ops); if (param.server_context->has_pending_ops_) { param.call->cq()->Pluck(¶m.server_context->pending_ops_); } param.call->cq()->Pluck(&ops); } void* Deserialize(grpc_call* call, grpc_byte_buffer* req, ::grpc::Status* status, void** /*handler_data*/) final { ::grpc::ByteBuffer buf; buf.set_buffer(req); auto* request = new (::grpc::g_core_codegen_interface->grpc_call_arena_alloc( call, sizeof(RequestType))) RequestType(); *status = ::grpc::SerializationTraits::Deserialize(&buf, request); buf.Release(); if (status->ok()) { return request; } request->~RequestType(); return nullptr; } private: std::function<::grpc::Status(ServiceType*, ::grpc_impl::ServerContext*, const RequestType*, ::grpc_impl::ServerWriter*)> func_; ServiceType* service_; }; /// A wrapper class of an application provided bidi-streaming handler. /// This also applies to server-streamed implementation of a unary method /// with the additional requirement that such methods must have done a /// write for status to be ok /// Since this is used by more than 1 class, the service is not passed in. /// Instead, it is expected to be an implicitly-captured argument of func /// (through bind or something along those lines) template class TemplatedBidiStreamingHandler : public ::grpc::internal::MethodHandler { public: TemplatedBidiStreamingHandler( std::function<::grpc::Status(::grpc_impl::ServerContext*, Streamer*)> func) : func_(func), write_needed_(WriteNeeded) {} void RunHandler(const HandlerParameter& param) final { Streamer stream(param.call, static_cast<::grpc_impl::ServerContext*>( param.server_context)); ::grpc::Status status = CatchingFunctionHandler([this, ¶m, &stream] { return func_( static_cast<::grpc_impl::ServerContext*>(param.server_context), &stream); }); ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpServerSendStatus> ops; if (!param.server_context->sent_initial_metadata_) { ops.SendInitialMetadata(¶m.server_context->initial_metadata_, param.server_context->initial_metadata_flags()); if (param.server_context->compression_level_set()) { ops.set_compression_level(param.server_context->compression_level()); } if (write_needed_ && status.ok()) { // If we needed a write but never did one, we need to mark the // status as a fail status = ::grpc::Status(::grpc::StatusCode::INTERNAL, "Service did not provide response message"); } } ops.ServerSendStatus(¶m.server_context->trailing_metadata_, status); param.call->PerformOps(&ops); if (param.server_context->has_pending_ops_) { param.call->cq()->Pluck(¶m.server_context->pending_ops_); } param.call->cq()->Pluck(&ops); } private: std::function<::grpc::Status(::grpc_impl::ServerContext*, Streamer*)> func_; const bool write_needed_; }; template class BidiStreamingHandler : public TemplatedBidiStreamingHandler< ::grpc_impl::ServerReaderWriter, false> { public: BidiStreamingHandler( std::function<::grpc::Status( ServiceType*, ::grpc_impl::ServerContext*, ::grpc_impl::ServerReaderWriter*)> func, ServiceType* service) // TODO(vjpai): When gRPC supports C++14, move-capture func in the below : TemplatedBidiStreamingHandler< ::grpc_impl::ServerReaderWriter, false>( [func, service]( ::grpc_impl::ServerContext* ctx, ::grpc_impl::ServerReaderWriter* streamer) { return func(service, ctx, streamer); }) {} }; template class StreamedUnaryHandler : public TemplatedBidiStreamingHandler< ::grpc_impl::ServerUnaryStreamer, true> { public: explicit StreamedUnaryHandler( std::function<::grpc::Status( ::grpc_impl::ServerContext*, ::grpc_impl::ServerUnaryStreamer*)> func) : TemplatedBidiStreamingHandler< ::grpc_impl::ServerUnaryStreamer, true>( std::move(func)) {} }; template class SplitServerStreamingHandler : public TemplatedBidiStreamingHandler< ::grpc_impl::ServerSplitStreamer, false> { public: explicit SplitServerStreamingHandler( std::function<::grpc::Status( ::grpc_impl::ServerContext*, ::grpc_impl::ServerSplitStreamer*)> func) : TemplatedBidiStreamingHandler< ::grpc_impl::ServerSplitStreamer, false>( std::move(func)) {} }; /// General method handler class for errors that prevent real method use /// e.g., handle unknown method by returning UNIMPLEMENTED error. template <::grpc::StatusCode code> class ErrorMethodHandler : public ::grpc::internal::MethodHandler { public: template static void FillOps(::grpc_impl::ServerContextBase* context, T* ops) { ::grpc::Status status(code, ""); if (!context->sent_initial_metadata_) { ops->SendInitialMetadata(&context->initial_metadata_, context->initial_metadata_flags()); if (context->compression_level_set()) { ops->set_compression_level(context->compression_level()); } context->sent_initial_metadata_ = true; } ops->ServerSendStatus(&context->trailing_metadata_, status); } void RunHandler(const HandlerParameter& param) final { ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpServerSendStatus> ops; FillOps(param.server_context, &ops); param.call->PerformOps(&ops); param.call->cq()->Pluck(&ops); } void* Deserialize(grpc_call* /*call*/, grpc_byte_buffer* req, ::grpc::Status* /*status*/, void** /*handler_data*/) final { // We have to destroy any request payload if (req != nullptr) { ::grpc::g_core_codegen_interface->grpc_byte_buffer_destroy(req); } return nullptr; } }; typedef ErrorMethodHandler<::grpc::StatusCode::UNIMPLEMENTED> UnknownMethodHandler; typedef ErrorMethodHandler<::grpc::StatusCode::RESOURCE_EXHAUSTED> ResourceExhaustedHandler; } // namespace internal } // namespace grpc_impl #endif // GRPCPP_IMPL_CODEGEN_METHOD_HANDLER_IMPL_H grpc-1.30.2/include/grpcpp/impl/codegen/proto_buffer_reader.h000066400000000000000000000133231370425124100242030ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_PROTO_BUFFER_READER_H #define GRPCPP_IMPL_CODEGEN_PROTO_BUFFER_READER_H #include #include #include #include #include #include #include #include #include /// This header provides an object that reads bytes directly from a /// grpc::ByteBuffer, via the ZeroCopyInputStream interface namespace grpc { extern CoreCodegenInterface* g_core_codegen_interface; /// This is a specialization of the protobuf class ZeroCopyInputStream /// The principle is to get one chunk of data at a time from the proto layer, /// with options to backup (re-see some bytes) or skip (forward past some bytes) /// /// Read more about ZeroCopyInputStream interface here: /// https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.io.zero_copy_stream#ZeroCopyInputStream class ProtoBufferReader : public ::grpc::protobuf::io::ZeroCopyInputStream { public: /// Constructs buffer reader from \a buffer. Will set \a status() to non ok /// if \a buffer is invalid (the internal buffer has not been initialized). explicit ProtoBufferReader(ByteBuffer* buffer) : byte_count_(0), backup_count_(0), status_() { /// Implemented through a grpc_byte_buffer_reader which iterates /// over the slices that make up a byte buffer if (!buffer->Valid() || !g_core_codegen_interface->grpc_byte_buffer_reader_init( &reader_, buffer->c_buffer())) { status_ = Status(StatusCode::INTERNAL, "Couldn't initialize byte buffer reader"); } } ~ProtoBufferReader() { if (status_.ok()) { g_core_codegen_interface->grpc_byte_buffer_reader_destroy(&reader_); } } /// Give the proto library a chunk of data from the stream. The caller /// may safely read from data[0, size - 1]. bool Next(const void** data, int* size) override { if (!status_.ok()) { return false; } /// If we have backed up previously, we need to return the backed-up slice if (backup_count_ > 0) { *data = GRPC_SLICE_START_PTR(*slice_) + GRPC_SLICE_LENGTH(*slice_) - backup_count_; GPR_CODEGEN_ASSERT(backup_count_ <= INT_MAX); *size = (int)backup_count_; backup_count_ = 0; return true; } /// Otherwise get the next slice from the byte buffer reader if (!g_core_codegen_interface->grpc_byte_buffer_reader_peek(&reader_, &slice_)) { return false; } *data = GRPC_SLICE_START_PTR(*slice_); // On win x64, int is only 32bit GPR_CODEGEN_ASSERT(GRPC_SLICE_LENGTH(*slice_) <= INT_MAX); byte_count_ += * size = (int)GRPC_SLICE_LENGTH(*slice_); return true; } /// Returns the status of the buffer reader. Status status() const { return status_; } /// The proto library calls this to indicate that we should back up \a count /// bytes that have already been returned by the last call of Next. /// So do the backup and have that ready for a later Next. void BackUp(int count) override { GPR_CODEGEN_ASSERT(count <= static_cast(GRPC_SLICE_LENGTH(*slice_))); backup_count_ = count; } /// The proto library calls this to skip over \a count bytes. Implement this /// using Next and BackUp combined. bool Skip(int count) override { const void* data; int size; while (Next(&data, &size)) { if (size >= count) { BackUp(size - count); return true; } // size < count; count -= size; } // error or we have too large count; return false; } /// Returns the total number of bytes read since this object was created. int64_t ByteCount() const override { return byte_count_ - backup_count_; } // These protected members are needed to support internal optimizations. // they expose internal bits of grpc core that are NOT stable. If you have // a use case needs to use one of these functions, please send an email to // https://groups.google.com/forum/#!forum/grpc-io. protected: void set_byte_count(int64_t byte_count) { byte_count_ = byte_count; } int64_t backup_count() { return backup_count_; } void set_backup_count(int64_t backup_count) { backup_count_ = backup_count; } grpc_byte_buffer_reader* reader() { return &reader_; } grpc_slice* slice() { return slice_; } grpc_slice** mutable_slice_ptr() { return &slice_; } private: int64_t byte_count_; ///< total bytes read since object creation int64_t backup_count_; ///< how far backed up in the stream we are grpc_byte_buffer_reader reader_; ///< internal object to read \a grpc_slice ///< from the \a grpc_byte_buffer grpc_slice* slice_; ///< current slice passed back to the caller Status status_; ///< status of the entire object }; } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_PROTO_BUFFER_READER_H grpc-1.30.2/include/grpcpp/impl/codegen/proto_buffer_writer.h000066400000000000000000000160101370425124100242510ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_PROTO_BUFFER_WRITER_H #define GRPCPP_IMPL_CODEGEN_PROTO_BUFFER_WRITER_H #include #include #include #include #include #include #include #include /// This header provides an object that writes bytes directly into a /// grpc::ByteBuffer, via the ZeroCopyOutputStream interface namespace grpc { extern CoreCodegenInterface* g_core_codegen_interface; // Forward declaration for testing use only namespace internal { class ProtoBufferWriterPeer; } // namespace internal const int kProtoBufferWriterMaxBufferLength = 1024 * 1024; /// This is a specialization of the protobuf class ZeroCopyOutputStream. /// The principle is to give the proto layer one buffer of bytes at a time /// that it can use to serialize the next portion of the message, with the /// option to "backup" if more buffer is given than required at the last buffer. /// /// Read more about ZeroCopyOutputStream interface here: /// https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.io.zero_copy_stream#ZeroCopyOutputStream class ProtoBufferWriter : public ::grpc::protobuf::io::ZeroCopyOutputStream { public: /// Constructor for this derived class /// /// \param[out] byte_buffer A pointer to the grpc::ByteBuffer created /// \param block_size How big are the chunks to allocate at a time /// \param total_size How many total bytes are required for this proto ProtoBufferWriter(ByteBuffer* byte_buffer, int block_size, int total_size) : block_size_(block_size), total_size_(total_size), byte_count_(0), have_backup_(false) { GPR_CODEGEN_ASSERT(!byte_buffer->Valid()); /// Create an empty raw byte buffer and look at its underlying slice buffer grpc_byte_buffer* bp = g_core_codegen_interface->grpc_raw_byte_buffer_create(NULL, 0); byte_buffer->set_buffer(bp); slice_buffer_ = &bp->data.raw.slice_buffer; } ~ProtoBufferWriter() { if (have_backup_) { g_core_codegen_interface->grpc_slice_unref(backup_slice_); } } /// Give the proto library the next buffer of bytes and its size. It is /// safe for the caller to write from data[0, size - 1]. bool Next(void** data, int* size) override { // Protobuf should not ask for more memory than total_size_. GPR_CODEGEN_ASSERT(byte_count_ < total_size_); // 1. Use the remaining backup slice if we have one // 2. Otherwise allocate a slice, up to the remaining length needed // or our maximum allocation size // 3. Provide the slice start and size available // 4. Add the slice being returned to the slice buffer size_t remain = static_cast(total_size_ - byte_count_); if (have_backup_) { /// If we have a backup slice, we should use it first slice_ = backup_slice_; have_backup_ = false; if (GRPC_SLICE_LENGTH(slice_) > remain) { GRPC_SLICE_SET_LENGTH(slice_, remain); } } else { // When less than a whole block is needed, only allocate that much. // But make sure the allocated slice is not inlined. size_t allocate_length = remain > static_cast(block_size_) ? block_size_ : remain; slice_ = g_core_codegen_interface->grpc_slice_malloc( allocate_length > GRPC_SLICE_INLINED_SIZE ? allocate_length : GRPC_SLICE_INLINED_SIZE + 1); } *data = GRPC_SLICE_START_PTR(slice_); // On win x64, int is only 32bit GPR_CODEGEN_ASSERT(GRPC_SLICE_LENGTH(slice_) <= INT_MAX); byte_count_ += * size = (int)GRPC_SLICE_LENGTH(slice_); g_core_codegen_interface->grpc_slice_buffer_add(slice_buffer_, slice_); return true; } /// Backup by \a count bytes because Next returned more bytes than needed /// (only used in the last buffer). \a count must be less than or equal too /// the last buffer returned from next. void BackUp(int count) override { /// 1. Remove the partially-used last slice from the slice buffer /// 2. Split it into the needed (if any) and unneeded part /// 3. Add the needed part back to the slice buffer /// 4. Mark that we still have the remaining part (for later use/unref) GPR_CODEGEN_ASSERT(count <= static_cast(GRPC_SLICE_LENGTH(slice_))); g_core_codegen_interface->grpc_slice_buffer_pop(slice_buffer_); if ((size_t)count == GRPC_SLICE_LENGTH(slice_)) { backup_slice_ = slice_; } else { backup_slice_ = g_core_codegen_interface->grpc_slice_split_tail( &slice_, GRPC_SLICE_LENGTH(slice_) - count); g_core_codegen_interface->grpc_slice_buffer_add(slice_buffer_, slice_); } // It's dangerous to keep an inlined grpc_slice as the backup slice, since // on a following Next() call, a reference will be returned to this slice // via GRPC_SLICE_START_PTR, which will not be an address held by // slice_buffer_. have_backup_ = backup_slice_.refcount != NULL; byte_count_ -= count; } /// Returns the total number of bytes written since this object was created. int64_t ByteCount() const override { return byte_count_; } // These protected members are needed to support internal optimizations. // they expose internal bits of grpc core that are NOT stable. If you have // a use case needs to use one of these functions, please send an email to // https://groups.google.com/forum/#!forum/grpc-io. protected: grpc_slice_buffer* slice_buffer() { return slice_buffer_; } void set_byte_count(int64_t byte_count) { byte_count_ = byte_count; } private: // friend for testing purposes only friend class internal::ProtoBufferWriterPeer; const int block_size_; ///< size to alloc for each new \a grpc_slice needed const int total_size_; ///< byte size of proto being serialized int64_t byte_count_; ///< bytes written since this object was created grpc_slice_buffer* slice_buffer_; ///< internal buffer of slices holding the serialized data bool have_backup_; ///< if we are holding a backup slice or not grpc_slice backup_slice_; ///< holds space we can still write to, if the ///< caller has called BackUp grpc_slice slice_; ///< current slice passed back to the caller }; } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_PROTO_BUFFER_WRITER_H grpc-1.30.2/include/grpcpp/impl/codegen/proto_utils.h000066400000000000000000000107121370425124100225470ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_PROTO_UTILS_H #define GRPCPP_IMPL_CODEGEN_PROTO_UTILS_H #include #include #include #include #include #include #include #include #include #include #include #include /// This header provides serialization and deserialization between gRPC /// messages serialized using protobuf and the C++ objects they represent. namespace grpc { extern CoreCodegenInterface* g_core_codegen_interface; // ProtoBufferWriter must be a subclass of ::protobuf::io::ZeroCopyOutputStream. template Status GenericSerialize(const grpc::protobuf::MessageLite& msg, ByteBuffer* bb, bool* own_buffer) { static_assert(std::is_base_of::value, "ProtoBufferWriter must be a subclass of " "::protobuf::io::ZeroCopyOutputStream"); *own_buffer = true; int byte_size = msg.ByteSizeLong(); if ((size_t)byte_size <= GRPC_SLICE_INLINED_SIZE) { Slice slice(byte_size); // We serialize directly into the allocated slices memory GPR_CODEGEN_ASSERT(slice.end() == msg.SerializeWithCachedSizesToArray( const_cast(slice.begin()))); ByteBuffer tmp(&slice, 1); bb->Swap(&tmp); return g_core_codegen_interface->ok(); } ProtoBufferWriter writer(bb, kProtoBufferWriterMaxBufferLength, byte_size); return msg.SerializeToZeroCopyStream(&writer) ? g_core_codegen_interface->ok() : Status(StatusCode::INTERNAL, "Failed to serialize message"); } // BufferReader must be a subclass of ::protobuf::io::ZeroCopyInputStream. template Status GenericDeserialize(ByteBuffer* buffer, grpc::protobuf::MessageLite* msg) { static_assert(std::is_base_of::value, "ProtoBufferReader must be a subclass of " "::protobuf::io::ZeroCopyInputStream"); if (buffer == nullptr) { return Status(StatusCode::INTERNAL, "No payload"); } Status result = g_core_codegen_interface->ok(); { ProtoBufferReader reader(buffer); if (!reader.status().ok()) { return reader.status(); } if (!msg->ParseFromZeroCopyStream(&reader)) { result = Status(StatusCode::INTERNAL, msg->InitializationErrorString()); } } buffer->Clear(); return result; } // this is needed so the following class does not conflict with protobuf // serializers that utilize internal-only tools. #ifdef GRPC_OPEN_SOURCE_PROTO // This class provides a protobuf serializer. It translates between protobuf // objects and grpc_byte_buffers. More information about SerializationTraits can // be found in include/grpcpp/impl/codegen/serialization_traits.h. template class SerializationTraits< T, typename std::enable_if< std::is_base_of::value>::type> { public: static Status Serialize(const grpc::protobuf::MessageLite& msg, ByteBuffer* bb, bool* own_buffer) { return GenericSerialize(msg, bb, own_buffer); } static Status Deserialize(ByteBuffer* buffer, grpc::protobuf::MessageLite* msg) { return GenericDeserialize(buffer, msg); } }; #endif } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_PROTO_UTILS_H grpc-1.30.2/include/grpcpp/impl/codegen/rpc_method.h000066400000000000000000000032731370425124100223140ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_RPC_METHOD_H #define GRPCPP_IMPL_CODEGEN_RPC_METHOD_H #include #include namespace grpc { namespace internal { /// Descriptor of an RPC method class RpcMethod { public: enum RpcType { NORMAL_RPC = 0, CLIENT_STREAMING, // request streaming SERVER_STREAMING, // response streaming BIDI_STREAMING }; RpcMethod(const char* name, RpcType type) : name_(name), method_type_(type), channel_tag_(NULL) {} RpcMethod(const char* name, RpcType type, const std::shared_ptr& channel) : name_(name), method_type_(type), channel_tag_(channel->RegisterMethod(name)) {} const char* name() const { return name_; } RpcType method_type() const { return method_type_; } void SetMethodType(RpcType type) { method_type_ = type; } void* channel_tag() const { return channel_tag_; } private: const char* const name_; RpcType method_type_; void* const channel_tag_; }; } // namespace internal } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_RPC_METHOD_H grpc-1.30.2/include/grpcpp/impl/codegen/rpc_service_method.h000066400000000000000000000125161370425124100240340ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_RPC_SERVICE_METHOD_H #define GRPCPP_IMPL_CODEGEN_RPC_SERVICE_METHOD_H #include #include #include #include #include #include #include #include #include #include namespace grpc_impl { class ServerContextBase; } // namespace grpc_impl namespace grpc { namespace internal { /// Base class for running an RPC handler. class MethodHandler { public: virtual ~MethodHandler() {} struct HandlerParameter { /// Constructor for HandlerParameter /// /// \param c : the gRPC Call structure for this server call /// \param context : the ServerContext structure for this server call /// \param req : the request payload, if appropriate for this RPC /// \param req_status : the request status after any interceptors have run /// \param handler_data: internal data for the handler. /// \param requester : used only by the callback API. It is a function /// called by the RPC Controller to request another RPC (and also /// to set up the state required to make that request possible) HandlerParameter(Call* c, ::grpc_impl::ServerContextBase* context, void* req, Status req_status, void* handler_data, std::function requester) : call(c), server_context(context), request(req), status(req_status), internal_data(handler_data), call_requester(std::move(requester)) {} ~HandlerParameter() {} Call* const call; ::grpc_impl::ServerContextBase* const server_context; void* const request; const Status status; void* const internal_data; const std::function call_requester; }; virtual void RunHandler(const HandlerParameter& param) = 0; /* Returns a pointer to the deserialized request. \a status reflects the result of deserialization. This pointer and the status should be filled in a HandlerParameter and passed to RunHandler. It is illegal to access the pointer after calling RunHandler. Ownership of the deserialized request is retained by the handler. Returns nullptr if deserialization failed. */ virtual void* Deserialize(grpc_call* /*call*/, grpc_byte_buffer* req, Status* /*status*/, void** /*handler_data*/) { GPR_CODEGEN_ASSERT(req == nullptr); return nullptr; } }; /// Server side rpc method class class RpcServiceMethod : public RpcMethod { public: /// Takes ownership of the handler RpcServiceMethod(const char* name, RpcMethod::RpcType type, MethodHandler* handler) : RpcMethod(name, type), server_tag_(nullptr), api_type_(ApiType::SYNC), handler_(handler) {} enum class ApiType { SYNC, ASYNC, RAW, CALL_BACK, // not CALLBACK because that is reserved in Windows RAW_CALL_BACK, }; void set_server_tag(void* tag) { server_tag_ = tag; } void* server_tag() const { return server_tag_; } /// if MethodHandler is nullptr, then this is an async method MethodHandler* handler() const { return handler_.get(); } ApiType api_type() const { return api_type_; } void SetHandler(MethodHandler* handler) { handler_.reset(handler); } void SetServerApiType(RpcServiceMethod::ApiType type) { if ((api_type_ == ApiType::SYNC) && (type == ApiType::ASYNC || type == ApiType::RAW)) { // this marks this method as async handler_.reset(); } else if (api_type_ != ApiType::SYNC) { // this is not an error condition, as it allows users to declare a server // like WithRawMethod_foo. However since it // overwrites behavior, it should be logged. gpr_log( GPR_INFO, "You are marking method %s as '%s', even though it was " "previously marked '%s'. This behavior will overwrite the original " "behavior. If you expected this then ignore this message.", name(), TypeToString(api_type_), TypeToString(type)); } api_type_ = type; } private: void* server_tag_; ApiType api_type_; std::unique_ptr handler_; const char* TypeToString(RpcServiceMethod::ApiType type) { switch (type) { case ApiType::SYNC: return "sync"; case ApiType::ASYNC: return "async"; case ApiType::RAW: return "raw"; case ApiType::CALL_BACK: return "callback"; case ApiType::RAW_CALL_BACK: return "raw_callback"; default: GPR_UNREACHABLE_CODE(return "unknown"); } } }; } // namespace internal } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_RPC_SERVICE_METHOD_H grpc-1.30.2/include/grpcpp/impl/codegen/security/000077500000000000000000000000001370425124100216615ustar00rootroot00000000000000grpc-1.30.2/include/grpcpp/impl/codegen/security/auth_context.h000066400000000000000000000057521370425124100245500ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_SECURITY_AUTH_CONTEXT_H #define GRPCPP_IMPL_CODEGEN_SECURITY_AUTH_CONTEXT_H #include #include #include #include struct grpc_auth_context; struct grpc_auth_property; struct grpc_auth_property_iterator; namespace grpc { class SecureAuthContext; typedef std::pair AuthProperty; class AuthPropertyIterator : public std::iterator { public: ~AuthPropertyIterator(); AuthPropertyIterator& operator++(); AuthPropertyIterator operator++(int); bool operator==(const AuthPropertyIterator& rhs) const; bool operator!=(const AuthPropertyIterator& rhs) const; const AuthProperty operator*(); protected: AuthPropertyIterator(); AuthPropertyIterator(const grpc_auth_property* property, const grpc_auth_property_iterator* iter); private: friend class SecureAuthContext; const grpc_auth_property* property_; // The following items form a grpc_auth_property_iterator. const grpc_auth_context* ctx_; size_t index_; const char* name_; }; /// Class encapsulating the Authentication Information. /// /// It includes the secure identity of the peer, the type of secure transport /// used as well as any other properties required by the authorization layer. class AuthContext { public: virtual ~AuthContext() {} /// Returns true if the peer is authenticated. virtual bool IsPeerAuthenticated() const = 0; /// A peer identity. /// /// It is, in general, comprised of one or more properties (in which case they /// have the same name). virtual std::vector GetPeerIdentity() const = 0; virtual grpc::string GetPeerIdentityPropertyName() const = 0; /// Returns all the property values with the given name. virtual std::vector FindPropertyValues( const grpc::string& name) const = 0; /// Iteration over all the properties. virtual AuthPropertyIterator begin() const = 0; virtual AuthPropertyIterator end() const = 0; /// Mutation functions: should only be used by an AuthMetadataProcessor. virtual void AddProperty(const grpc::string& key, const string_ref& value) = 0; virtual bool SetPeerIdentityPropertyName(const string& name) = 0; }; } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_SECURITY_AUTH_CONTEXT_H grpc-1.30.2/include/grpcpp/impl/codegen/serialization_traits.h000066400000000000000000000044721370425124100244350ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_SERIALIZATION_TRAITS_H #define GRPCPP_IMPL_CODEGEN_SERIALIZATION_TRAITS_H namespace grpc { /// Defines how to serialize and deserialize some type. /// /// Used for hooking different message serialization API's into GRPC. /// Each SerializationTraits implementation must provide the /// following functions: /// 1. static Status Serialize(const Message& msg, /// ByteBuffer* buffer, /// bool* own_buffer); /// OR /// static Status Serialize(const Message& msg, /// grpc_byte_buffer** buffer, /// bool* own_buffer); /// The former is preferred; the latter is deprecated /// /// 2. static Status Deserialize(ByteBuffer* buffer, /// Message* msg); /// OR /// static Status Deserialize(grpc_byte_buffer* buffer, /// Message* msg); /// The former is preferred; the latter is deprecated /// /// Serialize is required to convert message to a ByteBuffer, and /// return that byte buffer through *buffer. *own_buffer should /// be set to true if the caller owns said byte buffer, or false if /// ownership is retained elsewhere. /// /// Deserialize is required to convert buffer into the message stored at /// msg. max_receive_message_size is passed in as a bound on the maximum /// number of message bytes Deserialize should accept. /// /// Both functions return a Status, allowing them to explain what went /// wrong if required. template class SerializationTraits; } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_SERIALIZATION_TRAITS_H grpc-1.30.2/include/grpcpp/impl/codegen/server_callback.h000066400000000000000000000033421370425124100233070ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_SERVER_CALLBACK_H #define GRPCPP_IMPL_CODEGEN_SERVER_CALLBACK_H #include namespace grpc { #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL template using ServerReadReactor = ::grpc_impl::ServerReadReactor; template using ServerWriteReactor = ::grpc_impl::ServerWriteReactor; template using ServerBidiReactor = ::grpc_impl::ServerBidiReactor; using ServerUnaryReactor = ::grpc_impl::ServerUnaryReactor; #endif // TODO(vjpai): Remove namespace experimental when de-experimentalized fully. namespace experimental { template using ServerReadReactor = ::grpc_impl::ServerReadReactor; template using ServerWriteReactor = ::grpc_impl::ServerWriteReactor; template using ServerBidiReactor = ::grpc_impl::ServerBidiReactor; using ServerUnaryReactor = ::grpc_impl::ServerUnaryReactor; } // namespace experimental } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_SERVER_CALLBACK_H grpc-1.30.2/include/grpcpp/impl/codegen/server_callback_handlers.h000066400000000000000000001113271370425124100251720ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. */ #ifndef GRPCPP_IMPL_CODEGEN_SERVER_CALLBACK_HANDLERS_H #define GRPCPP_IMPL_CODEGEN_SERVER_CALLBACK_HANDLERS_H #include #include #include #include #include namespace grpc_impl { namespace internal { template class CallbackUnaryHandler : public ::grpc::internal::MethodHandler { public: explicit CallbackUnaryHandler( std::function get_reactor) : get_reactor_(std::move(get_reactor)) {} void SetMessageAllocator( ::grpc::experimental::MessageAllocator* allocator) { allocator_ = allocator; } void RunHandler(const HandlerParameter& param) final { // Arena allocate a controller structure (that includes request/response) ::grpc::g_core_codegen_interface->grpc_call_ref(param.call->call()); auto* allocator_state = static_cast< ::grpc::experimental::MessageHolder*>( param.internal_data); auto* call = new (::grpc::g_core_codegen_interface->grpc_call_arena_alloc( param.call->call(), sizeof(ServerCallbackUnaryImpl))) ServerCallbackUnaryImpl( static_cast<::grpc_impl::CallbackServerContext*>( param.server_context), param.call, allocator_state, std::move(param.call_requester)); param.server_context->BeginCompletionOp( param.call, [call](bool) { call->MaybeDone(); }, call); ServerUnaryReactor* reactor = nullptr; if (param.status.ok()) { reactor = ::grpc::internal::CatchingReactorGetter( get_reactor_, static_cast<::grpc_impl::CallbackServerContext*>( param.server_context), call->request(), call->response()); } if (reactor == nullptr) { // if deserialization or reactor creator failed, we need to fail the call reactor = new (::grpc::g_core_codegen_interface->grpc_call_arena_alloc( param.call->call(), sizeof(UnimplementedUnaryReactor))) UnimplementedUnaryReactor( ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "")); } /// Invoke SetupReactor as the last part of the handler call->SetupReactor(reactor); } void* Deserialize(grpc_call* call, grpc_byte_buffer* req, ::grpc::Status* status, void** handler_data) final { ::grpc::ByteBuffer buf; buf.set_buffer(req); RequestType* request = nullptr; ::grpc::experimental::MessageHolder* allocator_state = nullptr; if (allocator_ != nullptr) { allocator_state = allocator_->AllocateMessages(); } else { allocator_state = new (::grpc::g_core_codegen_interface->grpc_call_arena_alloc( call, sizeof(DefaultMessageHolder))) DefaultMessageHolder(); } *handler_data = allocator_state; request = allocator_state->request(); *status = ::grpc::SerializationTraits::Deserialize(&buf, request); buf.Release(); if (status->ok()) { return request; } // Clean up on deserialization failure. allocator_state->Release(); return nullptr; } private: std::function get_reactor_; ::grpc::experimental::MessageAllocator* allocator_ = nullptr; class ServerCallbackUnaryImpl : public ServerCallbackUnary { public: void Finish(::grpc::Status s) override { // A callback that only contains a call to MaybeDone can be run as an // inline callback regardless of whether or not OnDone is inlineable // because if the actual OnDone callback needs to be scheduled, MaybeDone // is responsible for dispatching to an executor thread if needed. Thus, // when setting up the finish_tag_, we can set its own callback to // inlineable. finish_tag_.Set( call_.call(), [this](bool) { this->MaybeDone( reactor_.load(std::memory_order_relaxed)->InternalInlineable()); }, &finish_ops_, /*can_inline=*/true); finish_ops_.set_core_cq_tag(&finish_tag_); if (!ctx_->sent_initial_metadata_) { finish_ops_.SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { finish_ops_.set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; } // The response is dropped if the status is not OK. if (s.ok()) { finish_ops_.ServerSendStatus(&ctx_->trailing_metadata_, finish_ops_.SendMessagePtr(response())); } else { finish_ops_.ServerSendStatus(&ctx_->trailing_metadata_, s); } finish_ops_.set_core_cq_tag(&finish_tag_); call_.PerformOps(&finish_ops_); } void SendInitialMetadata() override { GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_); this->Ref(); // The callback for this function should not be marked inline because it // is directly invoking a user-controlled reaction // (OnSendInitialMetadataDone). Thus it must be dispatched to an executor // thread. However, any OnDone needed after that can be inlined because it // is already running on an executor thread. meta_tag_.Set(call_.call(), [this](bool ok) { ServerUnaryReactor* reactor = reactor_.load(std::memory_order_relaxed); reactor->OnSendInitialMetadataDone(ok); this->MaybeDone(/*inlineable_ondone=*/true); }, &meta_ops_, /*can_inline=*/false); meta_ops_.SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { meta_ops_.set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; meta_ops_.set_core_cq_tag(&meta_tag_); call_.PerformOps(&meta_ops_); } private: friend class CallbackUnaryHandler; ServerCallbackUnaryImpl( ::grpc_impl::CallbackServerContext* ctx, ::grpc::internal::Call* call, ::grpc::experimental::MessageHolder* allocator_state, std::function call_requester) : ctx_(ctx), call_(*call), allocator_state_(allocator_state), call_requester_(std::move(call_requester)) { ctx_->set_message_allocator_state(allocator_state); } /// SetupReactor binds the reactor (which also releases any queued /// operations), maybe calls OnCancel if possible/needed, and maybe marks /// the completion of the RPC. This should be the last component of the /// handler. void SetupReactor(ServerUnaryReactor* reactor) { reactor_.store(reactor, std::memory_order_relaxed); this->BindReactor(reactor); this->MaybeCallOnCancel(reactor); this->MaybeDone(reactor->InternalInlineable()); } const RequestType* request() { return allocator_state_->request(); } ResponseType* response() { return allocator_state_->response(); } void CallOnDone() override { reactor_.load(std::memory_order_relaxed)->OnDone(); grpc_call* call = call_.call(); auto call_requester = std::move(call_requester_); allocator_state_->Release(); this->~ServerCallbackUnaryImpl(); // explicitly call destructor ::grpc::g_core_codegen_interface->grpc_call_unref(call); call_requester(); } ServerReactor* reactor() override { return reactor_.load(std::memory_order_relaxed); } ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata> meta_ops_; ::grpc::internal::CallbackWithSuccessTag meta_tag_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpSendMessage, ::grpc::internal::CallOpServerSendStatus> finish_ops_; ::grpc::internal::CallbackWithSuccessTag finish_tag_; ::grpc_impl::CallbackServerContext* const ctx_; ::grpc::internal::Call call_; ::grpc::experimental::MessageHolder* const allocator_state_; std::function call_requester_; // reactor_ can always be loaded/stored with relaxed memory ordering because // its value is only set once, independently of other data in the object, // and the loads that use it will always actually come provably later even // though they are from different threads since they are triggered by // actions initiated only by the setting up of the reactor_ variable. In // a sense, it's a delayed "const": it gets its value from the SetupReactor // method (not the constructor, so it's not a true const), but it doesn't // change after that and it only gets used by actions caused, directly or // indirectly, by that setup. This comment also applies to the reactor_ // variables of the other streaming objects in this file. std::atomic reactor_; // callbacks_outstanding_ follows a refcount pattern std::atomic callbacks_outstanding_{ 3}; // reserve for start, Finish, and CompletionOp }; }; template class CallbackClientStreamingHandler : public ::grpc::internal::MethodHandler { public: explicit CallbackClientStreamingHandler( std::function*( ::grpc_impl::CallbackServerContext*, ResponseType*)> get_reactor) : get_reactor_(std::move(get_reactor)) {} void RunHandler(const HandlerParameter& param) final { // Arena allocate a reader structure (that includes response) ::grpc::g_core_codegen_interface->grpc_call_ref(param.call->call()); auto* reader = new (::grpc::g_core_codegen_interface->grpc_call_arena_alloc( param.call->call(), sizeof(ServerCallbackReaderImpl))) ServerCallbackReaderImpl( static_cast<::grpc_impl::CallbackServerContext*>( param.server_context), param.call, std::move(param.call_requester)); // Inlineable OnDone can be false in the CompletionOp callback because there // is no read reactor that has an inlineable OnDone; this only applies to // the DefaultReactor (which is unary). param.server_context->BeginCompletionOp( param.call, [reader](bool) { reader->MaybeDone(/*inlineable_ondone=*/false); }, reader); ServerReadReactor* reactor = nullptr; if (param.status.ok()) { reactor = ::grpc::internal::CatchingReactorGetter< ServerReadReactor>( get_reactor_, static_cast<::grpc_impl::CallbackServerContext*>( param.server_context), reader->response()); } if (reactor == nullptr) { // if deserialization or reactor creator failed, we need to fail the call reactor = new (::grpc::g_core_codegen_interface->grpc_call_arena_alloc( param.call->call(), sizeof(UnimplementedReadReactor))) UnimplementedReadReactor( ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "")); } reader->SetupReactor(reactor); } private: std::function*( ::grpc_impl::CallbackServerContext*, ResponseType*)> get_reactor_; class ServerCallbackReaderImpl : public ServerCallbackReader { public: void Finish(::grpc::Status s) override { // A finish tag with only MaybeDone can have its callback inlined // regardless even if OnDone is not inlineable because this callback just // checks a ref and then decides whether or not to dispatch OnDone. finish_tag_.Set(call_.call(), [this](bool) { // Inlineable OnDone can be false here because there is // no read reactor that has an inlineable OnDone; this // only applies to the DefaultReactor (which is unary). this->MaybeDone(/*inlineable_ondone=*/false); }, &finish_ops_, /*can_inline=*/true); if (!ctx_->sent_initial_metadata_) { finish_ops_.SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { finish_ops_.set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; } // The response is dropped if the status is not OK. if (s.ok()) { finish_ops_.ServerSendStatus(&ctx_->trailing_metadata_, finish_ops_.SendMessagePtr(&resp_)); } else { finish_ops_.ServerSendStatus(&ctx_->trailing_metadata_, s); } finish_ops_.set_core_cq_tag(&finish_tag_); call_.PerformOps(&finish_ops_); } void SendInitialMetadata() override { GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_); this->Ref(); // The callback for this function should not be inlined because it invokes // a user-controlled reaction, but any resulting OnDone can be inlined in // the executor to which this callback is dispatched. meta_tag_.Set(call_.call(), [this](bool ok) { ServerReadReactor* reactor = reactor_.load(std::memory_order_relaxed); reactor->OnSendInitialMetadataDone(ok); this->MaybeDone(/*inlineable_ondone=*/true); }, &meta_ops_, /*can_inline=*/false); meta_ops_.SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { meta_ops_.set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; meta_ops_.set_core_cq_tag(&meta_tag_); call_.PerformOps(&meta_ops_); } void Read(RequestType* req) override { this->Ref(); read_ops_.RecvMessage(req); call_.PerformOps(&read_ops_); } private: friend class CallbackClientStreamingHandler; ServerCallbackReaderImpl(::grpc_impl::CallbackServerContext* ctx, ::grpc::internal::Call* call, std::function call_requester) : ctx_(ctx), call_(*call), call_requester_(std::move(call_requester)) {} void SetupReactor(ServerReadReactor* reactor) { reactor_.store(reactor, std::memory_order_relaxed); // The callback for this function should not be inlined because it invokes // a user-controlled reaction, but any resulting OnDone can be inlined in // the executor to which this callback is dispatched. read_tag_.Set(call_.call(), [this, reactor](bool ok) { reactor->OnReadDone(ok); this->MaybeDone(/*inlineable_ondone=*/true); }, &read_ops_, /*can_inline=*/false); read_ops_.set_core_cq_tag(&read_tag_); this->BindReactor(reactor); this->MaybeCallOnCancel(reactor); // Inlineable OnDone can be false here because there is no read // reactor that has an inlineable OnDone; this only applies to the // DefaultReactor (which is unary). this->MaybeDone(/*inlineable_ondone=*/false); } ~ServerCallbackReaderImpl() {} ResponseType* response() { return &resp_; } void CallOnDone() override { reactor_.load(std::memory_order_relaxed)->OnDone(); grpc_call* call = call_.call(); auto call_requester = std::move(call_requester_); this->~ServerCallbackReaderImpl(); // explicitly call destructor ::grpc::g_core_codegen_interface->grpc_call_unref(call); call_requester(); } ServerReactor* reactor() override { return reactor_.load(std::memory_order_relaxed); } ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata> meta_ops_; ::grpc::internal::CallbackWithSuccessTag meta_tag_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpSendMessage, ::grpc::internal::CallOpServerSendStatus> finish_ops_; ::grpc::internal::CallbackWithSuccessTag finish_tag_; ::grpc::internal::CallOpSet< ::grpc::internal::CallOpRecvMessage> read_ops_; ::grpc::internal::CallbackWithSuccessTag read_tag_; ::grpc_impl::CallbackServerContext* const ctx_; ::grpc::internal::Call call_; ResponseType resp_; std::function call_requester_; // The memory ordering of reactor_ follows ServerCallbackUnaryImpl. std::atomic*> reactor_; // callbacks_outstanding_ follows a refcount pattern std::atomic callbacks_outstanding_{ 3}; // reserve for OnStarted, Finish, and CompletionOp }; }; template class CallbackServerStreamingHandler : public ::grpc::internal::MethodHandler { public: explicit CallbackServerStreamingHandler( std::function*( ::grpc_impl::CallbackServerContext*, const RequestType*)> get_reactor) : get_reactor_(std::move(get_reactor)) {} void RunHandler(const HandlerParameter& param) final { // Arena allocate a writer structure ::grpc::g_core_codegen_interface->grpc_call_ref(param.call->call()); auto* writer = new (::grpc::g_core_codegen_interface->grpc_call_arena_alloc( param.call->call(), sizeof(ServerCallbackWriterImpl))) ServerCallbackWriterImpl( static_cast<::grpc_impl::CallbackServerContext*>( param.server_context), param.call, static_cast(param.request), std::move(param.call_requester)); // Inlineable OnDone can be false in the CompletionOp callback because there // is no write reactor that has an inlineable OnDone; this only applies to // the DefaultReactor (which is unary). param.server_context->BeginCompletionOp( param.call, [writer](bool) { writer->MaybeDone(/*inlineable_ondone=*/false); }, writer); ServerWriteReactor* reactor = nullptr; if (param.status.ok()) { reactor = ::grpc::internal::CatchingReactorGetter< ServerWriteReactor>( get_reactor_, static_cast<::grpc_impl::CallbackServerContext*>( param.server_context), writer->request()); } if (reactor == nullptr) { // if deserialization or reactor creator failed, we need to fail the call reactor = new (::grpc::g_core_codegen_interface->grpc_call_arena_alloc( param.call->call(), sizeof(UnimplementedWriteReactor))) UnimplementedWriteReactor( ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "")); } writer->SetupReactor(reactor); } void* Deserialize(grpc_call* call, grpc_byte_buffer* req, ::grpc::Status* status, void** /*handler_data*/) final { ::grpc::ByteBuffer buf; buf.set_buffer(req); auto* request = new (::grpc::g_core_codegen_interface->grpc_call_arena_alloc( call, sizeof(RequestType))) RequestType(); *status = ::grpc::SerializationTraits::Deserialize(&buf, request); buf.Release(); if (status->ok()) { return request; } request->~RequestType(); return nullptr; } private: std::function*( ::grpc_impl::CallbackServerContext*, const RequestType*)> get_reactor_; class ServerCallbackWriterImpl : public ServerCallbackWriter { public: void Finish(::grpc::Status s) override { // A finish tag with only MaybeDone can have its callback inlined // regardless even if OnDone is not inlineable because this callback just // checks a ref and then decides whether or not to dispatch OnDone. finish_tag_.Set(call_.call(), [this](bool) { // Inlineable OnDone can be false here because there is // no write reactor that has an inlineable OnDone; this // only applies to the DefaultReactor (which is unary). this->MaybeDone(/*inlineable_ondone=*/false); }, &finish_ops_, /*can_inline=*/true); finish_ops_.set_core_cq_tag(&finish_tag_); if (!ctx_->sent_initial_metadata_) { finish_ops_.SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { finish_ops_.set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; } finish_ops_.ServerSendStatus(&ctx_->trailing_metadata_, s); call_.PerformOps(&finish_ops_); } void SendInitialMetadata() override { GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_); this->Ref(); // The callback for this function should not be inlined because it invokes // a user-controlled reaction, but any resulting OnDone can be inlined in // the executor to which this callback is dispatched. meta_tag_.Set(call_.call(), [this](bool ok) { ServerWriteReactor* reactor = reactor_.load(std::memory_order_relaxed); reactor->OnSendInitialMetadataDone(ok); this->MaybeDone(/*inlineable_ondone=*/true); }, &meta_ops_, /*can_inline=*/false); meta_ops_.SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { meta_ops_.set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; meta_ops_.set_core_cq_tag(&meta_tag_); call_.PerformOps(&meta_ops_); } void Write(const ResponseType* resp, ::grpc::WriteOptions options) override { this->Ref(); if (options.is_last_message()) { options.set_buffer_hint(); } if (!ctx_->sent_initial_metadata_) { write_ops_.SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { write_ops_.set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; } // TODO(vjpai): don't assert GPR_CODEGEN_ASSERT(write_ops_.SendMessagePtr(resp, options).ok()); call_.PerformOps(&write_ops_); } void WriteAndFinish(const ResponseType* resp, ::grpc::WriteOptions options, ::grpc::Status s) override { // This combines the write into the finish callback // Don't send any message if the status is bad if (s.ok()) { // TODO(vjpai): don't assert GPR_CODEGEN_ASSERT(finish_ops_.SendMessagePtr(resp, options).ok()); } Finish(std::move(s)); } private: friend class CallbackServerStreamingHandler; ServerCallbackWriterImpl(::grpc_impl::CallbackServerContext* ctx, ::grpc::internal::Call* call, const RequestType* req, std::function call_requester) : ctx_(ctx), call_(*call), req_(req), call_requester_(std::move(call_requester)) {} void SetupReactor(ServerWriteReactor* reactor) { reactor_.store(reactor, std::memory_order_relaxed); // The callback for this function should not be inlined because it invokes // a user-controlled reaction, but any resulting OnDone can be inlined in // the executor to which this callback is dispatched. write_tag_.Set(call_.call(), [this, reactor](bool ok) { reactor->OnWriteDone(ok); this->MaybeDone(/*inlineable_ondone=*/true); }, &write_ops_, /*can_inline=*/false); write_ops_.set_core_cq_tag(&write_tag_); this->BindReactor(reactor); this->MaybeCallOnCancel(reactor); // Inlineable OnDone can be false here because there is no write // reactor that has an inlineable OnDone; this only applies to the // DefaultReactor (which is unary). this->MaybeDone(/*inlineable_ondone=*/false); } ~ServerCallbackWriterImpl() { req_->~RequestType(); } const RequestType* request() { return req_; } void CallOnDone() override { reactor_.load(std::memory_order_relaxed)->OnDone(); grpc_call* call = call_.call(); auto call_requester = std::move(call_requester_); this->~ServerCallbackWriterImpl(); // explicitly call destructor ::grpc::g_core_codegen_interface->grpc_call_unref(call); call_requester(); } ServerReactor* reactor() override { return reactor_.load(std::memory_order_relaxed); } ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata> meta_ops_; ::grpc::internal::CallbackWithSuccessTag meta_tag_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpSendMessage, ::grpc::internal::CallOpServerSendStatus> finish_ops_; ::grpc::internal::CallbackWithSuccessTag finish_tag_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpSendMessage> write_ops_; ::grpc::internal::CallbackWithSuccessTag write_tag_; ::grpc_impl::CallbackServerContext* const ctx_; ::grpc::internal::Call call_; const RequestType* req_; std::function call_requester_; // The memory ordering of reactor_ follows ServerCallbackUnaryImpl. std::atomic*> reactor_; // callbacks_outstanding_ follows a refcount pattern std::atomic callbacks_outstanding_{ 3}; // reserve for OnStarted, Finish, and CompletionOp }; }; template class CallbackBidiHandler : public ::grpc::internal::MethodHandler { public: explicit CallbackBidiHandler( std::function*( ::grpc_impl::CallbackServerContext*)> get_reactor) : get_reactor_(std::move(get_reactor)) {} void RunHandler(const HandlerParameter& param) final { ::grpc::g_core_codegen_interface->grpc_call_ref(param.call->call()); auto* stream = new (::grpc::g_core_codegen_interface->grpc_call_arena_alloc( param.call->call(), sizeof(ServerCallbackReaderWriterImpl))) ServerCallbackReaderWriterImpl( static_cast<::grpc_impl::CallbackServerContext*>( param.server_context), param.call, std::move(param.call_requester)); // Inlineable OnDone can be false in the CompletionOp callback because there // is no bidi reactor that has an inlineable OnDone; this only applies to // the DefaultReactor (which is unary). param.server_context->BeginCompletionOp( param.call, [stream](bool) { stream->MaybeDone(/*inlineable_ondone=*/false); }, stream); ServerBidiReactor* reactor = nullptr; if (param.status.ok()) { reactor = ::grpc::internal::CatchingReactorGetter< ServerBidiReactor>( get_reactor_, static_cast<::grpc_impl::CallbackServerContext*>( param.server_context)); } if (reactor == nullptr) { // if deserialization or reactor creator failed, we need to fail the call reactor = new (::grpc::g_core_codegen_interface->grpc_call_arena_alloc( param.call->call(), sizeof(UnimplementedBidiReactor))) UnimplementedBidiReactor( ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "")); } stream->SetupReactor(reactor); } private: std::function*( ::grpc_impl::CallbackServerContext*)> get_reactor_; class ServerCallbackReaderWriterImpl : public ServerCallbackReaderWriter { public: void Finish(::grpc::Status s) override { // A finish tag with only MaybeDone can have its callback inlined // regardless even if OnDone is not inlineable because this callback just // checks a ref and then decides whether or not to dispatch OnDone. finish_tag_.Set(call_.call(), [this](bool) { // Inlineable OnDone can be false here because there is // no bidi reactor that has an inlineable OnDone; this // only applies to the DefaultReactor (which is unary). this->MaybeDone(/*inlineable_ondone=*/false); }, &finish_ops_, /*can_inline=*/true); finish_ops_.set_core_cq_tag(&finish_tag_); if (!ctx_->sent_initial_metadata_) { finish_ops_.SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { finish_ops_.set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; } finish_ops_.ServerSendStatus(&ctx_->trailing_metadata_, s); call_.PerformOps(&finish_ops_); } void SendInitialMetadata() override { GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_); this->Ref(); // The callback for this function should not be inlined because it invokes // a user-controlled reaction, but any resulting OnDone can be inlined in // the executor to which this callback is dispatched. meta_tag_.Set(call_.call(), [this](bool ok) { ServerBidiReactor* reactor = reactor_.load(std::memory_order_relaxed); reactor->OnSendInitialMetadataDone(ok); this->MaybeDone(/*inlineable_ondone=*/true); }, &meta_ops_, /*can_inline=*/false); meta_ops_.SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { meta_ops_.set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; meta_ops_.set_core_cq_tag(&meta_tag_); call_.PerformOps(&meta_ops_); } void Write(const ResponseType* resp, ::grpc::WriteOptions options) override { this->Ref(); if (options.is_last_message()) { options.set_buffer_hint(); } if (!ctx_->sent_initial_metadata_) { write_ops_.SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { write_ops_.set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; } // TODO(vjpai): don't assert GPR_CODEGEN_ASSERT(write_ops_.SendMessagePtr(resp, options).ok()); call_.PerformOps(&write_ops_); } void WriteAndFinish(const ResponseType* resp, ::grpc::WriteOptions options, ::grpc::Status s) override { // Don't send any message if the status is bad if (s.ok()) { // TODO(vjpai): don't assert GPR_CODEGEN_ASSERT(finish_ops_.SendMessagePtr(resp, options).ok()); } Finish(std::move(s)); } void Read(RequestType* req) override { this->Ref(); read_ops_.RecvMessage(req); call_.PerformOps(&read_ops_); } private: friend class CallbackBidiHandler; ServerCallbackReaderWriterImpl(::grpc_impl::CallbackServerContext* ctx, ::grpc::internal::Call* call, std::function call_requester) : ctx_(ctx), call_(*call), call_requester_(std::move(call_requester)) {} void SetupReactor(ServerBidiReactor* reactor) { reactor_.store(reactor, std::memory_order_relaxed); // The callbacks for these functions should not be inlined because they // invoke user-controlled reactions, but any resulting OnDones can be // inlined in the executor to which a callback is dispatched. write_tag_.Set(call_.call(), [this, reactor](bool ok) { reactor->OnWriteDone(ok); this->MaybeDone(/*inlineable_ondone=*/true); }, &write_ops_, /*can_inline=*/false); write_ops_.set_core_cq_tag(&write_tag_); read_tag_.Set(call_.call(), [this, reactor](bool ok) { reactor->OnReadDone(ok); this->MaybeDone(/*inlineable_ondone=*/true); }, &read_ops_, /*can_inline=*/false); read_ops_.set_core_cq_tag(&read_tag_); this->BindReactor(reactor); this->MaybeCallOnCancel(reactor); // Inlineable OnDone can be false here because there is no bidi // reactor that has an inlineable OnDone; this only applies to the // DefaultReactor (which is unary). this->MaybeDone(/*inlineable_ondone=*/false); } void CallOnDone() override { reactor_.load(std::memory_order_relaxed)->OnDone(); grpc_call* call = call_.call(); auto call_requester = std::move(call_requester_); this->~ServerCallbackReaderWriterImpl(); // explicitly call destructor ::grpc::g_core_codegen_interface->grpc_call_unref(call); call_requester(); } ServerReactor* reactor() override { return reactor_.load(std::memory_order_relaxed); } ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata> meta_ops_; ::grpc::internal::CallbackWithSuccessTag meta_tag_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpSendMessage, ::grpc::internal::CallOpServerSendStatus> finish_ops_; ::grpc::internal::CallbackWithSuccessTag finish_tag_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpSendMessage> write_ops_; ::grpc::internal::CallbackWithSuccessTag write_tag_; ::grpc::internal::CallOpSet< ::grpc::internal::CallOpRecvMessage> read_ops_; ::grpc::internal::CallbackWithSuccessTag read_tag_; ::grpc_impl::CallbackServerContext* const ctx_; ::grpc::internal::Call call_; std::function call_requester_; // The memory ordering of reactor_ follows ServerCallbackUnaryImpl. std::atomic*> reactor_; // callbacks_outstanding_ follows a refcount pattern std::atomic callbacks_outstanding_{ 3}; // reserve for OnStarted, Finish, and CompletionOp }; }; } // namespace internal } // namespace grpc_impl #endif // GRPCPP_IMPL_CODEGEN_SERVER_CALLBACK_HANDLERS_H grpc-1.30.2/include/grpcpp/impl/codegen/server_callback_impl.h000066400000000000000000000675661370425124100243520ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. */ #ifndef GRPCPP_IMPL_CODEGEN_SERVER_CALLBACK_IMPL_H #define GRPCPP_IMPL_CODEGEN_SERVER_CALLBACK_IMPL_H #include #include #include #include #include #include #include #include #include #include namespace grpc_impl { // Declare base class of all reactors as internal namespace internal { // Forward declarations template class CallbackUnaryHandler; template class CallbackClientStreamingHandler; template class CallbackServerStreamingHandler; template class CallbackBidiHandler; class ServerReactor { public: virtual ~ServerReactor() = default; virtual void OnDone() = 0; virtual void OnCancel() = 0; // The following is not API. It is for internal use only and specifies whether // all reactions of this Reactor can be run without an extra executor // scheduling. This should only be used for internally-defined reactors with // trivial reactions. virtual bool InternalInlineable() { return false; } private: template friend class CallbackUnaryHandler; template friend class CallbackClientStreamingHandler; template friend class CallbackServerStreamingHandler; template friend class CallbackBidiHandler; }; /// The base class of ServerCallbackUnary etc. class ServerCallbackCall { public: virtual ~ServerCallbackCall() {} // This object is responsible for tracking when it is safe to call OnDone and // OnCancel. OnDone should not be called until the method handler is complete, // Finish has been called, the ServerContext CompletionOp (which tracks // cancellation or successful completion) has completed, and all outstanding // Read/Write actions have seen their reactions. OnCancel should not be called // until after the method handler is done and the RPC has completed with a // cancellation. This is tracked by counting how many of these conditions have // been met and calling OnCancel when none remain unmet. // Public versions of MaybeDone: one where we don't know the reactor in // advance (used for the ServerContext CompletionOp), and one for where we // know the inlineability of the OnDone reaction. You should set the inline // flag to true if either the Reactor is InternalInlineable() or if this // callback is already being forced to run dispatched to an executor // (typically because it contains additional work than just the MaybeDone). void MaybeDone() { if (GPR_UNLIKELY(Unref() == 1)) { ScheduleOnDone(reactor()->InternalInlineable()); } } void MaybeDone(bool inline_ondone) { if (GPR_UNLIKELY(Unref() == 1)) { ScheduleOnDone(inline_ondone); } } // Fast version called with known reactor passed in, used from derived // classes, typically in non-cancel case void MaybeCallOnCancel(ServerReactor* reactor) { if (GPR_UNLIKELY(UnblockCancellation())) { CallOnCancel(reactor); } } // Slower version called from object that doesn't know the reactor a priori // (such as the ServerContext CompletionOp which is formed before the // reactor). This is used in cancel cases only, so it's ok to be slower and // invoke a virtual function. void MaybeCallOnCancel() { if (GPR_UNLIKELY(UnblockCancellation())) { CallOnCancel(reactor()); } } protected: /// Increases the reference count void Ref() { callbacks_outstanding_.fetch_add(1, std::memory_order_relaxed); } private: virtual ServerReactor* reactor() = 0; // CallOnDone performs the work required at completion of the RPC: invoking // the OnDone function and doing all necessary cleanup. This function is only // ever invoked on a fully-Unref'fed ServerCallbackCall. virtual void CallOnDone() = 0; // If the OnDone reaction is inlineable, execute it inline. Otherwise send it // to an executor. void ScheduleOnDone(bool inline_ondone); // If the OnCancel reaction is inlineable, execute it inline. Otherwise send // it to an executor. void CallOnCancel(ServerReactor* reactor); // Implement the cancellation constraint counter. Return true if OnCancel // should be called, false otherwise. bool UnblockCancellation() { return on_cancel_conditions_remaining_.fetch_sub( 1, std::memory_order_acq_rel) == 1; } /// Decreases the reference count and returns the previous value int Unref() { return callbacks_outstanding_.fetch_sub(1, std::memory_order_acq_rel); } std::atomic_int on_cancel_conditions_remaining_{2}; std::atomic_int callbacks_outstanding_{ 3}; // reserve for start, Finish, and CompletionOp }; template class DefaultMessageHolder : public ::grpc::experimental::MessageHolder { public: DefaultMessageHolder() { this->set_request(&request_obj_); this->set_response(&response_obj_); } void Release() override { // the object is allocated in the call arena. this->~DefaultMessageHolder(); } private: Request request_obj_; Response response_obj_; }; } // namespace internal // Forward declarations class ServerUnaryReactor; template class ServerReadReactor; template class ServerWriteReactor; template class ServerBidiReactor; // NOTE: The actual call/stream object classes are provided as API only to // support mocking. There are no implementations of these class interfaces in // the API. class ServerCallbackUnary : public internal::ServerCallbackCall { public: virtual ~ServerCallbackUnary() {} virtual void Finish(::grpc::Status s) = 0; virtual void SendInitialMetadata() = 0; protected: // Use a template rather than explicitly specifying ServerUnaryReactor to // delay binding and avoid a circular forward declaration issue template void BindReactor(Reactor* reactor) { reactor->InternalBindCall(this); } }; template class ServerCallbackReader : public internal::ServerCallbackCall { public: virtual ~ServerCallbackReader() {} virtual void Finish(::grpc::Status s) = 0; virtual void SendInitialMetadata() = 0; virtual void Read(Request* msg) = 0; protected: void BindReactor(ServerReadReactor* reactor) { reactor->InternalBindReader(this); } }; template class ServerCallbackWriter : public internal::ServerCallbackCall { public: virtual ~ServerCallbackWriter() {} virtual void Finish(::grpc::Status s) = 0; virtual void SendInitialMetadata() = 0; virtual void Write(const Response* msg, ::grpc::WriteOptions options) = 0; virtual void WriteAndFinish(const Response* msg, ::grpc::WriteOptions options, ::grpc::Status s) = 0; protected: void BindReactor(ServerWriteReactor* reactor) { reactor->InternalBindWriter(this); } }; template class ServerCallbackReaderWriter : public internal::ServerCallbackCall { public: virtual ~ServerCallbackReaderWriter() {} virtual void Finish(::grpc::Status s) = 0; virtual void SendInitialMetadata() = 0; virtual void Read(Request* msg) = 0; virtual void Write(const Response* msg, ::grpc::WriteOptions options) = 0; virtual void WriteAndFinish(const Response* msg, ::grpc::WriteOptions options, ::grpc::Status s) = 0; protected: void BindReactor(ServerBidiReactor* reactor) { reactor->InternalBindStream(this); } }; // The following classes are the reactor interfaces that are to be implemented // by the user, returned as the output parameter of the method handler for a // callback method. Note that none of the classes are pure; all reactions have a // default empty reaction so that the user class only needs to override those // classes that it cares about. /// \a ServerBidiReactor is the interface for a bidirectional streaming RPC. template class ServerBidiReactor : public internal::ServerReactor { public: // NOTE: Initializing stream_ as a constructor initializer rather than a // default initializer because gcc-4.x requires a copy constructor for // default initializing a templated member, which isn't ok for atomic. // TODO(vjpai): Switch to default constructor and default initializer when // gcc-4.x is no longer supported ServerBidiReactor() : stream_(nullptr) {} ~ServerBidiReactor() = default; /// Send any initial metadata stored in the RPC context. If not invoked, /// any initial metadata will be passed along with the first Write or the /// Finish (if there are no writes). void StartSendInitialMetadata() { ServerCallbackReaderWriter* stream = stream_.load(std::memory_order_acquire); if (stream == nullptr) { grpc::internal::MutexLock l(&stream_mu_); stream = stream_.load(std::memory_order_relaxed); if (stream == nullptr) { backlog_.send_initial_metadata_wanted = true; return; } } stream->SendInitialMetadata(); } /// Initiate a read operation. /// /// \param[out] req Where to eventually store the read message. Valid when /// the library calls OnReadDone void StartRead(Request* req) { ServerCallbackReaderWriter* stream = stream_.load(std::memory_order_acquire); if (stream == nullptr) { grpc::internal::MutexLock l(&stream_mu_); stream = stream_.load(std::memory_order_relaxed); if (stream == nullptr) { backlog_.read_wanted = req; return; } } stream->Read(req); } /// Initiate a write operation. /// /// \param[in] resp The message to be written. The library does not take /// ownership but the caller must ensure that the message is /// not deleted or modified until OnWriteDone is called. void StartWrite(const Response* resp) { StartWrite(resp, ::grpc::WriteOptions()); } /// Initiate a write operation with specified options. /// /// \param[in] resp The message to be written. The library does not take /// ownership but the caller must ensure that the message is /// not deleted or modified until OnWriteDone is called. /// \param[in] options The WriteOptions to use for writing this message void StartWrite(const Response* resp, ::grpc::WriteOptions options) { ServerCallbackReaderWriter* stream = stream_.load(std::memory_order_acquire); if (stream == nullptr) { grpc::internal::MutexLock l(&stream_mu_); stream = stream_.load(std::memory_order_relaxed); if (stream == nullptr) { backlog_.write_wanted = resp; backlog_.write_options_wanted = std::move(options); return; } } stream->Write(resp, std::move(options)); } /// Initiate a write operation with specified options and final RPC Status, /// which also causes any trailing metadata for this RPC to be sent out. /// StartWriteAndFinish is like merging StartWriteLast and Finish into a /// single step. A key difference, though, is that this operation doesn't have /// an OnWriteDone reaction - it is considered complete only when OnDone is /// available. An RPC can either have StartWriteAndFinish or Finish, but not /// both. /// /// \param[in] resp The message to be written. The library does not take /// ownership but the caller must ensure that the message is /// not deleted or modified until OnDone is called. /// \param[in] options The WriteOptions to use for writing this message /// \param[in] s The status outcome of this RPC void StartWriteAndFinish(const Response* resp, ::grpc::WriteOptions options, ::grpc::Status s) { ServerCallbackReaderWriter* stream = stream_.load(std::memory_order_acquire); if (stream == nullptr) { grpc::internal::MutexLock l(&stream_mu_); stream = stream_.load(std::memory_order_relaxed); if (stream == nullptr) { backlog_.write_and_finish_wanted = true; backlog_.write_wanted = resp; backlog_.write_options_wanted = std::move(options); backlog_.status_wanted = std::move(s); return; } } stream->WriteAndFinish(resp, std::move(options), std::move(s)); } /// Inform system of a planned write operation with specified options, but /// allow the library to schedule the actual write coalesced with the writing /// of trailing metadata (which takes place on a Finish call). /// /// \param[in] resp The message to be written. The library does not take /// ownership but the caller must ensure that the message is /// not deleted or modified until OnWriteDone is called. /// \param[in] options The WriteOptions to use for writing this message void StartWriteLast(const Response* resp, ::grpc::WriteOptions options) { StartWrite(resp, std::move(options.set_last_message())); } /// Indicate that the stream is to be finished and the trailing metadata and /// RPC status are to be sent. Every RPC MUST be finished using either Finish /// or StartWriteAndFinish (but not both), even if the RPC is already /// cancelled. /// /// \param[in] s The status outcome of this RPC void Finish(::grpc::Status s) { ServerCallbackReaderWriter* stream = stream_.load(std::memory_order_acquire); if (stream == nullptr) { grpc::internal::MutexLock l(&stream_mu_); stream = stream_.load(std::memory_order_relaxed); if (stream == nullptr) { backlog_.finish_wanted = true; backlog_.status_wanted = std::move(s); return; } } stream->Finish(std::move(s)); } /// Notifies the application that an explicit StartSendInitialMetadata /// operation completed. Not used when the sending of initial metadata /// piggybacks onto the first write. /// /// \param[in] ok Was it successful? If false, no further write-side operation /// will succeed. virtual void OnSendInitialMetadataDone(bool /*ok*/) {} /// Notifies the application that a StartRead operation completed. /// /// \param[in] ok Was it successful? If false, no further read-side operation /// will succeed. virtual void OnReadDone(bool /*ok*/) {} /// Notifies the application that a StartWrite (or StartWriteLast) operation /// completed. /// /// \param[in] ok Was it successful? If false, no further write-side operation /// will succeed. virtual void OnWriteDone(bool /*ok*/) {} /// Notifies the application that all operations associated with this RPC /// have completed. This is an override (from the internal base class) but /// still abstract, so derived classes MUST override it to be instantiated. void OnDone() override = 0; /// Notifies the application that this RPC has been cancelled. This is an /// override (from the internal base class) but not final, so derived classes /// should override it if they want to take action. void OnCancel() override {} private: friend class ServerCallbackReaderWriter; // May be overridden by internal implementation details. This is not a public // customization point. virtual void InternalBindStream( ServerCallbackReaderWriter* stream) { // TODO(vjpai): When stream_or_backlog_ becomes a variant (see below), use // a scoped MutexLock and std::swap stream_or_backlog_ with a variant that // has stream, then std::get out of that after the lock. // Do likewise with the remaining InternalBind* functions as well. grpc::internal::ReleasableMutexLock l(&stream_mu_); PreBindBacklog ops(std::move(backlog_)); stream_.store(stream, std::memory_order_release); l.Unlock(); if (ops.send_initial_metadata_wanted) { stream->SendInitialMetadata(); } if (ops.read_wanted != nullptr) { stream->Read(ops.read_wanted); } if (ops.write_and_finish_wanted) { stream->WriteAndFinish(ops.write_wanted, std::move(ops.write_options_wanted), std::move(ops.status_wanted)); } else { if (ops.write_wanted != nullptr) { stream->Write(ops.write_wanted, std::move(ops.write_options_wanted)); } if (ops.finish_wanted) { stream->Finish(std::move(ops.status_wanted)); } } } grpc::internal::Mutex stream_mu_; // TODO(vjpai): Make stream_or_backlog_ into a std::variant or absl::variant // once C++17 or ABSL is supported since stream and backlog are // mutually exclusive in this class. Do likewise with the // remaining reactor classes and their backlogs as well. std::atomic*> stream_{nullptr}; struct PreBindBacklog { bool send_initial_metadata_wanted = false; bool write_and_finish_wanted = false; bool finish_wanted = false; Request* read_wanted = nullptr; const Response* write_wanted = nullptr; ::grpc::WriteOptions write_options_wanted; ::grpc::Status status_wanted; }; PreBindBacklog backlog_ /* GUARDED_BY(stream_mu_) */; }; /// \a ServerReadReactor is the interface for a client-streaming RPC. template class ServerReadReactor : public internal::ServerReactor { public: ServerReadReactor() : reader_(nullptr) {} ~ServerReadReactor() = default; /// The following operation initiations are exactly like ServerBidiReactor. void StartSendInitialMetadata() { ServerCallbackReader* reader = reader_.load(std::memory_order_acquire); if (reader == nullptr) { grpc::internal::MutexLock l(&reader_mu_); reader = reader_.load(std::memory_order_relaxed); if (reader == nullptr) { backlog_.send_initial_metadata_wanted = true; return; } } reader->SendInitialMetadata(); } void StartRead(Request* req) { ServerCallbackReader* reader = reader_.load(std::memory_order_acquire); if (reader == nullptr) { grpc::internal::MutexLock l(&reader_mu_); reader = reader_.load(std::memory_order_relaxed); if (reader == nullptr) { backlog_.read_wanted = req; return; } } reader->Read(req); } void Finish(::grpc::Status s) { ServerCallbackReader* reader = reader_.load(std::memory_order_acquire); if (reader == nullptr) { grpc::internal::MutexLock l(&reader_mu_); reader = reader_.load(std::memory_order_relaxed); if (reader == nullptr) { backlog_.finish_wanted = true; backlog_.status_wanted = std::move(s); return; } } reader->Finish(std::move(s)); } /// The following notifications are exactly like ServerBidiReactor. virtual void OnSendInitialMetadataDone(bool /*ok*/) {} virtual void OnReadDone(bool /*ok*/) {} void OnDone() override = 0; void OnCancel() override {} private: friend class ServerCallbackReader; // May be overridden by internal implementation details. This is not a public // customization point. virtual void InternalBindReader(ServerCallbackReader* reader) { grpc::internal::ReleasableMutexLock l(&reader_mu_); PreBindBacklog ops(std::move(backlog_)); reader_.store(reader, std::memory_order_release); l.Unlock(); if (ops.send_initial_metadata_wanted) { reader->SendInitialMetadata(); } if (ops.read_wanted != nullptr) { reader->Read(ops.read_wanted); } if (ops.finish_wanted) { reader->Finish(std::move(ops.status_wanted)); } } grpc::internal::Mutex reader_mu_; std::atomic*> reader_{nullptr}; struct PreBindBacklog { bool send_initial_metadata_wanted = false; bool finish_wanted = false; Request* read_wanted = nullptr; ::grpc::Status status_wanted; }; PreBindBacklog backlog_ /* GUARDED_BY(reader_mu_) */; }; /// \a ServerWriteReactor is the interface for a server-streaming RPC. template class ServerWriteReactor : public internal::ServerReactor { public: ServerWriteReactor() : writer_(nullptr) {} ~ServerWriteReactor() = default; /// The following operation initiations are exactly like ServerBidiReactor. void StartSendInitialMetadata() { ServerCallbackWriter* writer = writer_.load(std::memory_order_acquire); if (writer == nullptr) { grpc::internal::MutexLock l(&writer_mu_); writer = writer_.load(std::memory_order_relaxed); if (writer == nullptr) { backlog_.send_initial_metadata_wanted = true; return; } } writer->SendInitialMetadata(); } void StartWrite(const Response* resp) { StartWrite(resp, ::grpc::WriteOptions()); } void StartWrite(const Response* resp, ::grpc::WriteOptions options) { ServerCallbackWriter* writer = writer_.load(std::memory_order_acquire); if (writer == nullptr) { grpc::internal::MutexLock l(&writer_mu_); writer = writer_.load(std::memory_order_relaxed); if (writer == nullptr) { backlog_.write_wanted = resp; backlog_.write_options_wanted = std::move(options); return; } } writer->Write(resp, std::move(options)); } void StartWriteAndFinish(const Response* resp, ::grpc::WriteOptions options, ::grpc::Status s) { ServerCallbackWriter* writer = writer_.load(std::memory_order_acquire); if (writer == nullptr) { grpc::internal::MutexLock l(&writer_mu_); writer = writer_.load(std::memory_order_relaxed); if (writer == nullptr) { backlog_.write_and_finish_wanted = true; backlog_.write_wanted = resp; backlog_.write_options_wanted = std::move(options); backlog_.status_wanted = std::move(s); return; } } writer->WriteAndFinish(resp, std::move(options), std::move(s)); } void StartWriteLast(const Response* resp, ::grpc::WriteOptions options) { StartWrite(resp, std::move(options.set_last_message())); } void Finish(::grpc::Status s) { ServerCallbackWriter* writer = writer_.load(std::memory_order_acquire); if (writer == nullptr) { grpc::internal::MutexLock l(&writer_mu_); writer = writer_.load(std::memory_order_relaxed); if (writer == nullptr) { backlog_.finish_wanted = true; backlog_.status_wanted = std::move(s); return; } } writer->Finish(std::move(s)); } /// The following notifications are exactly like ServerBidiReactor. virtual void OnSendInitialMetadataDone(bool /*ok*/) {} virtual void OnWriteDone(bool /*ok*/) {} void OnDone() override = 0; void OnCancel() override {} private: friend class ServerCallbackWriter; // May be overridden by internal implementation details. This is not a public // customization point. virtual void InternalBindWriter(ServerCallbackWriter* writer) { grpc::internal::ReleasableMutexLock l(&writer_mu_); PreBindBacklog ops(std::move(backlog_)); writer_.store(writer, std::memory_order_release); l.Unlock(); if (ops.send_initial_metadata_wanted) { writer->SendInitialMetadata(); } if (ops.write_and_finish_wanted) { writer->WriteAndFinish(ops.write_wanted, std::move(ops.write_options_wanted), std::move(ops.status_wanted)); } else { if (ops.write_wanted != nullptr) { writer->Write(ops.write_wanted, std::move(ops.write_options_wanted)); } if (ops.finish_wanted) { writer->Finish(std::move(ops.status_wanted)); } } } grpc::internal::Mutex writer_mu_; std::atomic*> writer_{nullptr}; struct PreBindBacklog { bool send_initial_metadata_wanted = false; bool write_and_finish_wanted = false; bool finish_wanted = false; const Response* write_wanted = nullptr; ::grpc::WriteOptions write_options_wanted; ::grpc::Status status_wanted; }; PreBindBacklog backlog_ /* GUARDED_BY(writer_mu_) */; }; class ServerUnaryReactor : public internal::ServerReactor { public: ServerUnaryReactor() : call_(nullptr) {} ~ServerUnaryReactor() = default; /// StartSendInitialMetadata is exactly like ServerBidiReactor. void StartSendInitialMetadata() { ServerCallbackUnary* call = call_.load(std::memory_order_acquire); if (call == nullptr) { grpc::internal::MutexLock l(&call_mu_); call = call_.load(std::memory_order_relaxed); if (call == nullptr) { backlog_.send_initial_metadata_wanted = true; return; } } call->SendInitialMetadata(); } /// Finish is similar to ServerBidiReactor except for one detail. /// If the status is non-OK, any message will not be sent. Instead, /// the client will only receive the status and any trailing metadata. void Finish(::grpc::Status s) { ServerCallbackUnary* call = call_.load(std::memory_order_acquire); if (call == nullptr) { grpc::internal::MutexLock l(&call_mu_); call = call_.load(std::memory_order_relaxed); if (call == nullptr) { backlog_.finish_wanted = true; backlog_.status_wanted = std::move(s); return; } } call->Finish(std::move(s)); } /// The following notifications are exactly like ServerBidiReactor. virtual void OnSendInitialMetadataDone(bool /*ok*/) {} void OnDone() override = 0; void OnCancel() override {} private: friend class ServerCallbackUnary; // May be overridden by internal implementation details. This is not a public // customization point. virtual void InternalBindCall(ServerCallbackUnary* call) { grpc::internal::ReleasableMutexLock l(&call_mu_); PreBindBacklog ops(std::move(backlog_)); call_.store(call, std::memory_order_release); l.Unlock(); if (ops.send_initial_metadata_wanted) { call->SendInitialMetadata(); } if (ops.finish_wanted) { call->Finish(std::move(ops.status_wanted)); } } grpc::internal::Mutex call_mu_; std::atomic call_{nullptr}; struct PreBindBacklog { bool send_initial_metadata_wanted = false; bool finish_wanted = false; ::grpc::Status status_wanted; }; PreBindBacklog backlog_ /* GUARDED_BY(call_mu_) */; }; namespace internal { template class FinishOnlyReactor : public Base { public: explicit FinishOnlyReactor(::grpc::Status s) { this->Finish(std::move(s)); } void OnDone() override { this->~FinishOnlyReactor(); } }; using UnimplementedUnaryReactor = FinishOnlyReactor; template using UnimplementedReadReactor = FinishOnlyReactor>; template using UnimplementedWriteReactor = FinishOnlyReactor>; template using UnimplementedBidiReactor = FinishOnlyReactor>; } // namespace internal } // namespace grpc_impl #endif // GRPCPP_IMPL_CODEGEN_SERVER_CALLBACK_IMPL_H grpc-1.30.2/include/grpcpp/impl/codegen/server_context.h000066400000000000000000000024471370425124100232440ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_SERVER_CONTEXT_H #define GRPCPP_IMPL_CODEGEN_SERVER_CONTEXT_H #include namespace grpc { typedef ::grpc_impl::ServerContext ServerContext; #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL typedef ::grpc_impl::ServerContextBase ServerContextBase; typedef ::grpc_impl::CallbackServerContext CallbackServerContext; #endif // TODO(vjpai): Remove namespace experimental when de-experimentalized fully. namespace experimental { typedef ::grpc_impl::ServerContextBase ServerContextBase; typedef ::grpc_impl::CallbackServerContext CallbackServerContext; } // namespace experimental } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_SERVER_CONTEXT_H grpc-1.30.2/include/grpcpp/impl/codegen/server_context_impl.h000066400000000000000000000557771370425124100243030ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_SERVER_CONTEXT_IMPL_H #define GRPCPP_IMPL_CODEGEN_SERVER_CONTEXT_IMPL_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include struct grpc_metadata; struct grpc_call; struct census_context; namespace grpc_impl { class ClientContext; class CompletionQueue; class Server; template class ServerAsyncReader; template class ServerAsyncWriter; template class ServerAsyncResponseWriter; template class ServerAsyncReaderWriter; template class ServerReader; template class ServerWriter; namespace internal { template class BidiStreamingHandler; template class CallbackUnaryHandler; template class CallbackClientStreamingHandler; template class CallbackServerStreamingHandler; template class CallbackBidiHandler; template class ClientStreamingHandler; template class RpcMethodHandler; template class FinishOnlyReactor; template class ServerReaderWriterBody; template class ServerStreamingHandler; class ServerReactor; template class TemplatedBidiStreamingHandler; template <::grpc::StatusCode code> class ErrorMethodHandler; } // namespace internal } // namespace grpc_impl namespace grpc { class GenericServerContext; class ServerInterface; #ifndef GRPC_CALLBACK_API_NONEXPERIMENTAL namespace experimental { #endif class GenericCallbackServerContext; #ifndef GRPC_CALLBACK_API_NONEXPERIMENTAL } // namespace experimental #endif namespace internal { class Call; } // namespace internal namespace testing { class InteropServerContextInspector; class ServerContextTestSpouse; class DefaultReactorTestPeer; } // namespace testing } // namespace grpc namespace grpc_impl { /// Base class of ServerContext. Experimental until callback API is final. class ServerContextBase { public: virtual ~ServerContextBase(); /// Return the deadline for the server call. std::chrono::system_clock::time_point deadline() const { return ::grpc::Timespec2Timepoint(deadline_); } /// Return a \a gpr_timespec representation of the server call's deadline. gpr_timespec raw_deadline() const { return deadline_; } /// Add the (\a key, \a value) pair to the initial metadata /// associated with a server call. These are made available at the client side /// by the \a grpc::ClientContext::GetServerInitialMetadata() method. /// /// \warning This method should only be called before sending initial metadata /// to the client (which can happen explicitly, or implicitly when sending a /// a response message or status to the client). /// /// \param key The metadata key. If \a value is binary data, it must /// end in "-bin". /// \param value The metadata value. If its value is binary, the key name /// must end in "-bin". /// /// Metadata must conform to the following format: /// Custom-Metadata -> Binary-Header / ASCII-Header /// Binary-Header -> {Header-Name "-bin" } {binary value} /// ASCII-Header -> Header-Name ASCII-Value /// Header-Name -> 1*( %x30-39 / %x61-7A / "_" / "-" / ".") ; 0-9 a-z _ - . /// ASCII-Value -> 1*( %x20-%x7E ) ; space and printable ASCII void AddInitialMetadata(const grpc::string& key, const grpc::string& value); /// Add the (\a key, \a value) pair to the initial metadata /// associated with a server call. These are made available at the client /// side by the \a grpc::ClientContext::GetServerTrailingMetadata() method. /// /// \warning This method should only be called before sending trailing /// metadata to the client (which happens when the call is finished and a /// status is sent to the client). /// /// \param key The metadata key. If \a value is binary data, /// it must end in "-bin". /// \param value The metadata value. If its value is binary, the key name /// must end in "-bin". /// /// Metadata must conform to the following format: /// Custom-Metadata -> Binary-Header / ASCII-Header /// Binary-Header -> {Header-Name "-bin" } {binary value} /// ASCII-Header -> Header-Name ASCII-Value /// Header-Name -> 1*( %x30-39 / %x61-7A / "_" / "-" / ".") ; 0-9 a-z _ - . /// ASCII-Value -> 1*( %x20-%x7E ) ; space and printable ASCII void AddTrailingMetadata(const grpc::string& key, const grpc::string& value); /// IsCancelled is always safe to call when using sync or callback API. /// When using async API, it is only safe to call IsCancelled after /// the AsyncNotifyWhenDone tag has been delivered. Thread-safe. bool IsCancelled() const; /// Cancel the Call from the server. This is a best-effort API and /// depending on when it is called, the RPC may still appear successful to /// the client. /// For example, if TryCancel() is called on a separate thread, it might race /// with the server handler which might return success to the client before /// TryCancel() was even started by the thread. /// /// It is the caller's responsibility to prevent such races and ensure that if /// TryCancel() is called, the serverhandler must return Status::CANCELLED. /// The only exception is that if the serverhandler is already returning an /// error status code, it is ok to not return Status::CANCELLED even if /// TryCancel() was called. /// /// Note that TryCancel() does not change any of the tags that are pending /// on the completion queue. All pending tags will still be delivered /// (though their ok result may reflect the effect of cancellation). void TryCancel() const; /// Return a collection of initial metadata key-value pairs sent from the /// client. Note that keys may happen more than /// once (ie, a \a std::multimap is returned). /// /// It is safe to use this method after initial metadata has been received, /// Calls always begin with the client sending initial metadata, so this is /// safe to access as soon as the call has begun on the server side. /// /// \return A multimap of initial metadata key-value pairs from the server. const std::multimap& client_metadata() const { return *client_metadata_.map(); } /// Return the compression algorithm to be used by the server call. grpc_compression_level compression_level() const { return compression_level_; } /// Set \a level to be the compression level used for the server call. /// /// \param level The compression level used for the server call. void set_compression_level(grpc_compression_level level) { compression_level_set_ = true; compression_level_ = level; } /// Return a bool indicating whether the compression level for this call /// has been set (either implicitly or through a previous call to /// \a set_compression_level. bool compression_level_set() const { return compression_level_set_; } /// Return the compression algorithm the server call will request be used. /// Note that the gRPC runtime may decide to ignore this request, for example, /// due to resource constraints, or if the server is aware the client doesn't /// support the requested algorithm. grpc_compression_algorithm compression_algorithm() const { return compression_algorithm_; } /// Set \a algorithm to be the compression algorithm used for the server call. /// /// \param algorithm The compression algorithm used for the server call. void set_compression_algorithm(grpc_compression_algorithm algorithm); /// Set the serialized load reporting costs in \a cost_data for the call. void SetLoadReportingCosts(const std::vector& cost_data); /// Return the authentication context for this server call. /// /// \see grpc::AuthContext. std::shared_ptr auth_context() const { if (auth_context_.get() == nullptr) { auth_context_ = ::grpc::CreateAuthContext(call_); } return auth_context_; } /// Return the peer uri in a string. /// WARNING: this value is never authenticated or subject to any security /// related code. It must not be used for any authentication related /// functionality. Instead, use auth_context. grpc::string peer() const; /// Get the census context associated with this server call. const struct census_context* census_context() const; /// Should be used for framework-level extensions only. /// Applications never need to call this method. grpc_call* c_call() { return call_; } protected: /// Async only. Has to be called before the rpc starts. /// Returns the tag in completion queue when the rpc finishes. /// IsCancelled() can then be called to check whether the rpc was cancelled. /// TODO(vjpai): Fix this so that the tag is returned even if the call never /// starts (https://github.com/grpc/grpc/issues/10136). void AsyncNotifyWhenDone(void* tag) { has_notify_when_done_tag_ = true; async_notify_when_done_tag_ = tag; } /// NOTE: This is an API for advanced users who need custom allocators. /// Get and maybe mutate the allocator state associated with the current RPC. /// Currently only applicable for callback unary RPC methods. /// WARNING: This is experimental API and could be changed or removed. ::grpc::experimental::RpcAllocatorState* GetRpcAllocatorState() { return message_allocator_state_; } /// Get a library-owned default unary reactor for use in minimal reaction /// cases. This supports typical unary RPC usage of providing a response and /// status. It supports immediate Finish (finish from within the method /// handler) or delayed Finish (finish called after the method handler /// invocation). It does not support reacting to cancellation or completion, /// or early sending of initial metadata. Since this is a library-owned /// reactor, it should not be delete'd or freed in any way. This is more /// efficient than creating a user-owned reactor both because of avoiding an /// allocation and because its minimal reactions are optimized using a core /// surface flag that allows their reactions to run inline without any /// thread-hop. /// /// This method should not be called more than once or called after return /// from the method handler. /// /// WARNING: This is experimental API and could be changed or removed. ::grpc_impl::ServerUnaryReactor* DefaultReactor() { // Short-circuit the case where a default reactor was already set up by // the TestPeer. if (test_unary_ != nullptr) { return reinterpret_cast(&default_reactor_); } new (&default_reactor_) Reactor; #ifndef NDEBUG bool old = false; assert(default_reactor_used_.compare_exchange_strong( old, true, std::memory_order_relaxed)); #else default_reactor_used_.store(true, std::memory_order_relaxed); #endif return reinterpret_cast(&default_reactor_); } /// Constructors for use by derived classes ServerContextBase(); ServerContextBase(gpr_timespec deadline, grpc_metadata_array* arr); private: friend class ::grpc::testing::InteropServerContextInspector; friend class ::grpc::testing::ServerContextTestSpouse; friend class ::grpc::testing::DefaultReactorTestPeer; friend class ::grpc::ServerInterface; friend class ::grpc_impl::Server; template friend class ::grpc_impl::ServerAsyncReader; template friend class ::grpc_impl::ServerAsyncWriter; template friend class ::grpc_impl::ServerAsyncResponseWriter; template friend class ::grpc_impl::ServerAsyncReaderWriter; template friend class ::grpc_impl::ServerReader; template friend class ::grpc_impl::ServerWriter; template friend class ::grpc_impl::internal::ServerReaderWriterBody; template friend class ::grpc_impl::internal::RpcMethodHandler; template friend class ::grpc_impl::internal::ClientStreamingHandler; template friend class ::grpc_impl::internal::ServerStreamingHandler; template friend class ::grpc_impl::internal::TemplatedBidiStreamingHandler; template friend class ::grpc_impl::internal::CallbackUnaryHandler; template friend class ::grpc_impl::internal::CallbackClientStreamingHandler; template friend class ::grpc_impl::internal::CallbackServerStreamingHandler; template friend class ::grpc_impl::internal::CallbackBidiHandler; template <::grpc::StatusCode code> friend class ::grpc_impl::internal::ErrorMethodHandler; template friend class ::grpc_impl::internal::FinishOnlyReactor; friend class ::grpc_impl::ClientContext; friend class ::grpc::GenericServerContext; #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL friend class ::grpc::GenericCallbackServerContext; #else friend class ::grpc::experimental::GenericCallbackServerContext; #endif /// Prevent copying. ServerContextBase(const ServerContextBase&); ServerContextBase& operator=(const ServerContextBase&); class CompletionOp; void BeginCompletionOp( ::grpc::internal::Call* call, std::function callback, ::grpc_impl::internal::ServerCallbackCall* callback_controller); /// Return the tag queued by BeginCompletionOp() ::grpc::internal::CompletionQueueTag* GetCompletionOpTag(); void set_call(grpc_call* call) { call_ = call; } void BindDeadlineAndMetadata(gpr_timespec deadline, grpc_metadata_array* arr); void Clear(); void Setup(gpr_timespec deadline); uint32_t initial_metadata_flags() const { return 0; } ::grpc::experimental::ServerRpcInfo* set_server_rpc_info( const char* method, ::grpc::internal::RpcMethod::RpcType type, const std::vector>& creators) { if (creators.size() != 0) { rpc_info_ = new ::grpc::experimental::ServerRpcInfo(this, method, type); rpc_info_->RegisterInterceptors(creators); } return rpc_info_; } void set_message_allocator_state( ::grpc::experimental::RpcAllocatorState* allocator_state) { message_allocator_state_ = allocator_state; } CompletionOp* completion_op_; bool has_notify_when_done_tag_; void* async_notify_when_done_tag_; ::grpc::internal::CallbackWithSuccessTag completion_tag_; gpr_timespec deadline_; grpc_call* call_; ::grpc_impl::CompletionQueue* cq_; bool sent_initial_metadata_; mutable std::shared_ptr auth_context_; mutable ::grpc::internal::MetadataMap client_metadata_; std::multimap initial_metadata_; std::multimap trailing_metadata_; bool compression_level_set_; grpc_compression_level compression_level_; grpc_compression_algorithm compression_algorithm_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpSendMessage> pending_ops_; bool has_pending_ops_; ::grpc::experimental::ServerRpcInfo* rpc_info_; ::grpc::experimental::RpcAllocatorState* message_allocator_state_ = nullptr; class Reactor : public ServerUnaryReactor { public: void OnCancel() override {} void OnDone() override {} // Override InternalInlineable for this class since its reactions are // trivial and thus do not need to be run from the executor (triggering a // thread hop). This should only be used by internal reactors (thus the // name) and not by user application code. bool InternalInlineable() override { return true; } }; void SetupTestDefaultReactor(std::function func) { test_unary_.reset(new TestServerCallbackUnary(this, std::move(func))); } bool test_status_set() const { return (test_unary_ != nullptr) && test_unary_->status_set(); } ::grpc::Status test_status() const { return test_unary_->status(); } class TestServerCallbackUnary : public ::grpc_impl::ServerCallbackUnary { public: TestServerCallbackUnary(ServerContextBase* ctx, std::function func) : reactor_(ctx->DefaultReactor()), func_(std::move(func)) { this->BindReactor(reactor_); } void Finish(::grpc::Status s) override { status_ = s; func_(std::move(s)); status_set_.store(true, std::memory_order_release); } void SendInitialMetadata() override {} bool status_set() const { return status_set_.load(std::memory_order_acquire); } ::grpc::Status status() const { return status_; } private: void CallOnDone() override {} ::grpc_impl::internal::ServerReactor* reactor() override { return reactor_; } ::grpc_impl::ServerUnaryReactor* const reactor_; std::atomic_bool status_set_{false}; ::grpc::Status status_; const std::function func_; }; typename std::aligned_storage::type default_reactor_; std::atomic_bool default_reactor_used_{false}; std::unique_ptr test_unary_; }; /// A ServerContext or CallbackServerContext allows the code implementing a /// service handler to: /// /// - Add custom initial and trailing metadata key-value pairs that will /// propagated to the client side. /// - Control call settings such as compression and authentication. /// - Access metadata coming from the client. /// - Get performance metrics (ie, census). /// /// Context settings are only relevant to the call handler they are supplied to, /// that is to say, they aren't sticky across multiple calls. Some of these /// settings, such as the compression options, can be made persistent at server /// construction time by specifying the appropriate \a ChannelArguments /// to a \a grpc::ServerBuilder, via \a ServerBuilder::AddChannelArgument. /// /// \warning ServerContext instances should \em not be reused across rpcs. class ServerContext : public ServerContextBase { public: ServerContext() {} // for async calls using ServerContextBase::AddInitialMetadata; using ServerContextBase::AddTrailingMetadata; using ServerContextBase::auth_context; using ServerContextBase::c_call; using ServerContextBase::census_context; using ServerContextBase::client_metadata; using ServerContextBase::compression_algorithm; using ServerContextBase::compression_level; using ServerContextBase::compression_level_set; using ServerContextBase::deadline; using ServerContextBase::IsCancelled; using ServerContextBase::peer; using ServerContextBase::raw_deadline; using ServerContextBase::set_compression_algorithm; using ServerContextBase::set_compression_level; using ServerContextBase::SetLoadReportingCosts; using ServerContextBase::TryCancel; // Sync/CQ-based Async ServerContext only using ServerContextBase::AsyncNotifyWhenDone; private: // Constructor for internal use by server only friend class ::grpc_impl::Server; ServerContext(gpr_timespec deadline, grpc_metadata_array* arr) : ServerContextBase(deadline, arr) {} // CallbackServerContext only using ServerContextBase::DefaultReactor; using ServerContextBase::GetRpcAllocatorState; /// Prevent copying. ServerContext(const ServerContext&) = delete; ServerContext& operator=(const ServerContext&) = delete; }; class CallbackServerContext : public ServerContextBase { public: /// Public constructors are for direct use only by mocking tests. In practice, /// these objects will be owned by the library. CallbackServerContext() {} using ServerContextBase::AddInitialMetadata; using ServerContextBase::AddTrailingMetadata; using ServerContextBase::auth_context; using ServerContextBase::c_call; using ServerContextBase::census_context; using ServerContextBase::client_metadata; using ServerContextBase::compression_algorithm; using ServerContextBase::compression_level; using ServerContextBase::compression_level_set; using ServerContextBase::deadline; using ServerContextBase::IsCancelled; using ServerContextBase::peer; using ServerContextBase::raw_deadline; using ServerContextBase::set_compression_algorithm; using ServerContextBase::set_compression_level; using ServerContextBase::SetLoadReportingCosts; using ServerContextBase::TryCancel; // CallbackServerContext only using ServerContextBase::DefaultReactor; using ServerContextBase::GetRpcAllocatorState; private: // Sync/CQ-based Async ServerContext only using ServerContextBase::AsyncNotifyWhenDone; /// Prevent copying. CallbackServerContext(const CallbackServerContext&) = delete; CallbackServerContext& operator=(const CallbackServerContext&) = delete; }; } // namespace grpc_impl static_assert(std::is_base_of<::grpc_impl::ServerContextBase, ::grpc_impl::ServerContext>::value, "improper base class"); static_assert(std::is_base_of<::grpc_impl::ServerContextBase, ::grpc_impl::CallbackServerContext>::value, "improper base class"); static_assert(sizeof(::grpc_impl::ServerContextBase) == sizeof(::grpc_impl::ServerContext), "wrong size"); static_assert(sizeof(::grpc_impl::ServerContextBase) == sizeof(::grpc_impl::CallbackServerContext), "wrong size"); #endif // GRPCPP_IMPL_CODEGEN_SERVER_CONTEXT_IMPL_H grpc-1.30.2/include/grpcpp/impl/codegen/server_interceptor.h000066400000000000000000000117271370425124100241170ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_SERVER_INTERCEPTOR_H #define GRPCPP_IMPL_CODEGEN_SERVER_INTERCEPTOR_H #include #include #include #include #include namespace grpc_impl { class ServerContextBase; } // namespace grpc_impl namespace grpc { namespace internal { class InterceptorBatchMethodsImpl; } namespace experimental { class ServerRpcInfo; // A factory interface for creation of server interceptors. A vector of // factories can be provided to ServerBuilder which will be used to create a new // vector of server interceptors per RPC. Server interceptor authors should // create a subclass of ServerInterceptorFactorInterface which creates objects // of their interceptors. class ServerInterceptorFactoryInterface { public: virtual ~ServerInterceptorFactoryInterface() {} // Returns a pointer to an Interceptor object on successful creation, nullptr // otherwise. If nullptr is returned, this server interceptor factory is // ignored for the purposes of that RPC. virtual Interceptor* CreateServerInterceptor(ServerRpcInfo* info) = 0; }; /// ServerRpcInfo represents the state of a particular RPC as it /// appears to an interceptor. It is created and owned by the library and /// passed to the CreateServerInterceptor method of the application's /// ServerInterceptorFactoryInterface implementation class ServerRpcInfo { public: /// Type categorizes RPCs by unary or streaming type enum class Type { UNARY, CLIENT_STREAMING, SERVER_STREAMING, BIDI_STREAMING }; ~ServerRpcInfo() {} // Delete all copy and move constructors and assignments ServerRpcInfo(const ServerRpcInfo&) = delete; ServerRpcInfo& operator=(const ServerRpcInfo&) = delete; ServerRpcInfo(ServerRpcInfo&&) = delete; ServerRpcInfo& operator=(ServerRpcInfo&&) = delete; // Getter methods /// Return the fully-specified method name const char* method() const { return method_; } /// Return the type of the RPC (unary or a streaming flavor) Type type() const { return type_; } /// Return a pointer to the underlying ServerContext structure associated /// with the RPC to support features that apply to it grpc_impl::ServerContextBase* server_context() { return ctx_; } private: static_assert(Type::UNARY == static_cast(internal::RpcMethod::NORMAL_RPC), "violated expectation about Type enum"); static_assert(Type::CLIENT_STREAMING == static_cast(internal::RpcMethod::CLIENT_STREAMING), "violated expectation about Type enum"); static_assert(Type::SERVER_STREAMING == static_cast(internal::RpcMethod::SERVER_STREAMING), "violated expectation about Type enum"); static_assert(Type::BIDI_STREAMING == static_cast(internal::RpcMethod::BIDI_STREAMING), "violated expectation about Type enum"); ServerRpcInfo(grpc_impl::ServerContextBase* ctx, const char* method, internal::RpcMethod::RpcType type) : ctx_(ctx), method_(method), type_(static_cast(type)) {} // Runs interceptor at pos \a pos. void RunInterceptor( experimental::InterceptorBatchMethods* interceptor_methods, size_t pos) { GPR_CODEGEN_ASSERT(pos < interceptors_.size()); interceptors_[pos]->Intercept(interceptor_methods); } void RegisterInterceptors( const std::vector< std::unique_ptr>& creators) { for (const auto& creator : creators) { auto* interceptor = creator->CreateServerInterceptor(this); if (interceptor != nullptr) { interceptors_.push_back( std::unique_ptr(interceptor)); } } } void Ref() { ref_.fetch_add(1, std::memory_order_relaxed); } void Unref() { if (GPR_UNLIKELY(ref_.fetch_sub(1, std::memory_order_acq_rel) == 1)) { delete this; } } grpc_impl::ServerContextBase* ctx_ = nullptr; const char* method_ = nullptr; const Type type_; std::atomic ref_{1}; std::vector> interceptors_; friend class internal::InterceptorBatchMethodsImpl; friend class grpc_impl::ServerContextBase; }; } // namespace experimental } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_SERVER_INTERCEPTOR_H grpc-1.30.2/include/grpcpp/impl/codegen/server_interface.h000066400000000000000000000404361370425124100235200ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_SERVER_INTERFACE_H #define GRPCPP_IMPL_CODEGEN_SERVER_INTERFACE_H #include #include #include #include #include #include #include #include #include #include namespace grpc_impl { class Channel; class CompletionQueue; class ServerCompletionQueue; class ServerCredentials; } // namespace grpc_impl namespace grpc { class AsyncGenericService; class GenericServerContext; class Service; extern CoreCodegenInterface* g_core_codegen_interface; /// Models a gRPC server. /// /// Servers are configured and started via \a grpc::ServerBuilder. namespace internal { class ServerAsyncStreamingInterface; } // namespace internal #ifndef GRPC_CALLBACK_API_NONEXPERIMENTAL namespace experimental { #endif class CallbackGenericService; #ifndef GRPC_CALLBACK_API_NONEXPERIMENTAL } // namespace experimental #endif namespace experimental { class ServerInterceptorFactoryInterface; } // namespace experimental class ServerInterface : public internal::CallHook { public: virtual ~ServerInterface() {} /// \a Shutdown does the following things: /// /// 1. Shutdown the server: deactivate all listening ports, mark it in /// "shutdown mode" so that further call Request's or incoming RPC matches /// are no longer allowed. Also return all Request'ed-but-not-yet-active /// calls as failed (!ok). This refers to calls that have been requested /// at the server by the server-side library or application code but that /// have not yet been matched to incoming RPCs from the client. Note that /// this would even include default calls added automatically by the gRPC /// C++ API without the user's input (e.g., "Unimplemented RPC method") /// /// 2. Block until all rpc method handlers invoked automatically by the sync /// API finish. /// /// 3. If all pending calls complete (and all their operations are /// retrieved by Next) before \a deadline expires, this finishes /// gracefully. Otherwise, forcefully cancel all pending calls associated /// with the server after \a deadline expires. In the case of the sync API, /// if the RPC function for a streaming call has already been started and /// takes a week to complete, the RPC function won't be forcefully /// terminated (since that would leave state corrupt and incomplete) and /// the method handler will just keep running (which will prevent the /// server from completing the "join" operation that it needs to do at /// shutdown time). /// /// All completion queue associated with the server (for example, for async /// serving) must be shutdown *after* this method has returned: /// See \a ServerBuilder::AddCompletionQueue for details. /// They must also be drained (by repeated Next) after being shutdown. /// /// \param deadline How long to wait until pending rpcs are forcefully /// terminated. template void Shutdown(const T& deadline) { ShutdownInternal(TimePoint(deadline).raw_time()); } /// Shutdown the server without a deadline and forced cancellation. /// /// All completion queue associated with the server (for example, for async /// serving) must be shutdown *after* this method has returned: /// See \a ServerBuilder::AddCompletionQueue for details. void Shutdown() { ShutdownInternal( g_core_codegen_interface->gpr_inf_future(GPR_CLOCK_MONOTONIC)); } /// Block waiting for all work to complete. /// /// \warning The server must be either shutting down or some other thread must /// call \a Shutdown for this function to ever return. virtual void Wait() = 0; protected: friend class ::grpc::Service; /// Register a service. This call does not take ownership of the service. /// The service must exist for the lifetime of the Server instance. virtual bool RegisterService(const grpc::string* host, Service* service) = 0; /// Register a generic service. This call does not take ownership of the /// service. The service must exist for the lifetime of the Server instance. virtual void RegisterAsyncGenericService(AsyncGenericService* service) = 0; #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL /// Register a callback generic service. This call does not take ownership of /// the service. The service must exist for the lifetime of the Server /// instance. May not be abstract since this is a post-1.0 API addition. virtual void RegisterCallbackGenericService(CallbackGenericService* /*service*/) {} #else /// NOTE: class experimental_registration_interface is not part of the public /// API of this class /// TODO(vjpai): Move these contents to public API when no longer experimental class experimental_registration_interface { public: virtual ~experimental_registration_interface() {} /// May not be abstract since this is a post-1.0 API addition virtual void RegisterCallbackGenericService( experimental::CallbackGenericService* /*service*/) {} }; /// NOTE: The function experimental_registration() is not stable public API. /// It is a view to the experimental components of this class. It may be /// changed or removed at any time. May not be abstract since this is a /// post-1.0 API addition virtual experimental_registration_interface* experimental_registration() { return nullptr; } #endif /// Tries to bind \a server to the given \a addr. /// /// It can be invoked multiple times. /// /// \param addr The address to try to bind to the server (eg, localhost:1234, /// 192.168.1.1:31416, [::1]:27182, etc.). /// \params creds The credentials associated with the server. /// /// \return bound port number on success, 0 on failure. /// /// \warning It's an error to call this method on an already started server. virtual int AddListeningPort(const grpc::string& addr, grpc_impl::ServerCredentials* creds) = 0; /// Start the server. /// /// \param cqs Completion queues for handling asynchronous services. The /// caller is required to keep all completion queues live until the server is /// destroyed. /// \param num_cqs How many completion queues does \a cqs hold. virtual void Start(::grpc_impl::ServerCompletionQueue** cqs, size_t num_cqs) = 0; virtual void ShutdownInternal(gpr_timespec deadline) = 0; virtual int max_receive_message_size() const = 0; virtual grpc_server* server() = 0; virtual void PerformOpsOnCall(internal::CallOpSetInterface* ops, internal::Call* call) = 0; class BaseAsyncRequest : public internal::CompletionQueueTag { public: BaseAsyncRequest(ServerInterface* server, ::grpc_impl::ServerContext* context, internal::ServerAsyncStreamingInterface* stream, ::grpc_impl::CompletionQueue* call_cq, ::grpc_impl::ServerCompletionQueue* notification_cq, void* tag, bool delete_on_finalize); virtual ~BaseAsyncRequest(); bool FinalizeResult(void** tag, bool* status) override; private: void ContinueFinalizeResultAfterInterception(); protected: ServerInterface* const server_; ::grpc_impl::ServerContext* const context_; internal::ServerAsyncStreamingInterface* const stream_; ::grpc_impl::CompletionQueue* const call_cq_; ::grpc_impl::ServerCompletionQueue* const notification_cq_; void* const tag_; const bool delete_on_finalize_; grpc_call* call_; internal::Call call_wrapper_; internal::InterceptorBatchMethodsImpl interceptor_methods_; bool done_intercepting_; }; /// RegisteredAsyncRequest is not part of the C++ API class RegisteredAsyncRequest : public BaseAsyncRequest { public: RegisteredAsyncRequest(ServerInterface* server, ::grpc_impl::ServerContext* context, internal::ServerAsyncStreamingInterface* stream, ::grpc_impl::CompletionQueue* call_cq, ::grpc_impl::ServerCompletionQueue* notification_cq, void* tag, const char* name, internal::RpcMethod::RpcType type); virtual bool FinalizeResult(void** tag, bool* status) override { /* If we are done intercepting, then there is nothing more for us to do */ if (done_intercepting_) { return BaseAsyncRequest::FinalizeResult(tag, status); } call_wrapper_ = ::grpc::internal::Call( call_, server_, call_cq_, server_->max_receive_message_size(), context_->set_server_rpc_info(name_, type_, *server_->interceptor_creators())); return BaseAsyncRequest::FinalizeResult(tag, status); } protected: void IssueRequest(void* registered_method, grpc_byte_buffer** payload, ::grpc_impl::ServerCompletionQueue* notification_cq); const char* name_; const internal::RpcMethod::RpcType type_; }; class NoPayloadAsyncRequest final : public RegisteredAsyncRequest { public: NoPayloadAsyncRequest(internal::RpcServiceMethod* registered_method, ServerInterface* server, ::grpc_impl::ServerContext* context, internal::ServerAsyncStreamingInterface* stream, ::grpc_impl::CompletionQueue* call_cq, ::grpc_impl::ServerCompletionQueue* notification_cq, void* tag) : RegisteredAsyncRequest( server, context, stream, call_cq, notification_cq, tag, registered_method->name(), registered_method->method_type()) { IssueRequest(registered_method->server_tag(), nullptr, notification_cq); } // uses RegisteredAsyncRequest::FinalizeResult }; template class PayloadAsyncRequest final : public RegisteredAsyncRequest { public: PayloadAsyncRequest(internal::RpcServiceMethod* registered_method, ServerInterface* server, ::grpc_impl::ServerContext* context, internal::ServerAsyncStreamingInterface* stream, ::grpc_impl::CompletionQueue* call_cq, ::grpc_impl::ServerCompletionQueue* notification_cq, void* tag, Message* request) : RegisteredAsyncRequest( server, context, stream, call_cq, notification_cq, tag, registered_method->name(), registered_method->method_type()), registered_method_(registered_method), request_(request) { IssueRequest(registered_method->server_tag(), payload_.bbuf_ptr(), notification_cq); } ~PayloadAsyncRequest() { payload_.Release(); // We do not own the payload_ } bool FinalizeResult(void** tag, bool* status) override { /* If we are done intercepting, then there is nothing more for us to do */ if (done_intercepting_) { return RegisteredAsyncRequest::FinalizeResult(tag, status); } if (*status) { if (!payload_.Valid() || !SerializationTraits::Deserialize( payload_.bbuf_ptr(), request_) .ok()) { // If deserialization fails, we cancel the call and instantiate // a new instance of ourselves to request another call. We then // return false, which prevents the call from being returned to // the application. g_core_codegen_interface->grpc_call_cancel_with_status( call_, GRPC_STATUS_INTERNAL, "Unable to parse request", nullptr); g_core_codegen_interface->grpc_call_unref(call_); new PayloadAsyncRequest(registered_method_, server_, context_, stream_, call_cq_, notification_cq_, tag_, request_); delete this; return false; } } /* Set interception point for recv message */ interceptor_methods_.AddInterceptionHookPoint( experimental::InterceptionHookPoints::POST_RECV_MESSAGE); interceptor_methods_.SetRecvMessage(request_, nullptr); return RegisteredAsyncRequest::FinalizeResult(tag, status); } private: internal::RpcServiceMethod* const registered_method_; Message* const request_; ByteBuffer payload_; }; class GenericAsyncRequest : public BaseAsyncRequest { public: GenericAsyncRequest(ServerInterface* server, GenericServerContext* context, internal::ServerAsyncStreamingInterface* stream, ::grpc_impl::CompletionQueue* call_cq, ::grpc_impl::ServerCompletionQueue* notification_cq, void* tag, bool delete_on_finalize); bool FinalizeResult(void** tag, bool* status) override; private: grpc_call_details call_details_; }; template void RequestAsyncCall(internal::RpcServiceMethod* method, ::grpc_impl::ServerContext* context, internal::ServerAsyncStreamingInterface* stream, ::grpc_impl::CompletionQueue* call_cq, ::grpc_impl::ServerCompletionQueue* notification_cq, void* tag, Message* message) { GPR_CODEGEN_ASSERT(method); new PayloadAsyncRequest(method, this, context, stream, call_cq, notification_cq, tag, message); } void RequestAsyncCall(internal::RpcServiceMethod* method, ::grpc_impl::ServerContext* context, internal::ServerAsyncStreamingInterface* stream, ::grpc_impl::CompletionQueue* call_cq, ::grpc_impl::ServerCompletionQueue* notification_cq, void* tag) { GPR_CODEGEN_ASSERT(method); new NoPayloadAsyncRequest(method, this, context, stream, call_cq, notification_cq, tag); } void RequestAsyncGenericCall( GenericServerContext* context, internal::ServerAsyncStreamingInterface* stream, ::grpc_impl::CompletionQueue* call_cq, ::grpc_impl::ServerCompletionQueue* notification_cq, void* tag) { new GenericAsyncRequest(this, context, stream, call_cq, notification_cq, tag, true); } private: // EXPERIMENTAL // Getter method for the vector of interceptor factory objects. // Returns a nullptr (rather than being pure) since this is a post-1.0 method // and adding a new pure method to an interface would be a breaking change // (even though this is private and non-API) virtual std::vector< std::unique_ptr>* interceptor_creators() { return nullptr; } // EXPERIMENTAL // A method to get the callbackable completion queue associated with this // server. If the return value is nullptr, this server doesn't support // callback operations. // TODO(vjpai): Consider a better default like using a global CQ // Returns nullptr (rather than being pure) since this is a post-1.0 method // and adding a new pure method to an interface would be a breaking change // (even though this is private and non-API) virtual ::grpc_impl::CompletionQueue* CallbackCQ() { return nullptr; } }; } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_SERVER_INTERFACE_H grpc-1.30.2/include/grpcpp/impl/codegen/service_type.h000066400000000000000000000240411370425124100226650ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_SERVICE_TYPE_H #define GRPCPP_IMPL_CODEGEN_SERVICE_TYPE_H #include #include #include #include #include #include namespace grpc_impl { class Server; class CompletionQueue; class ServerContext; } // namespace grpc_impl namespace grpc { class ServerInterface; namespace internal { class Call; class ServerAsyncStreamingInterface { public: virtual ~ServerAsyncStreamingInterface() {} /// Request notification of the sending of initial metadata to the client. /// Completion will be notified by \a tag on the associated completion /// queue. This call is optional, but if it is used, it cannot be used /// concurrently with or after the \a Finish method. /// /// \param[in] tag Tag identifying this request. virtual void SendInitialMetadata(void* tag) = 0; private: friend class ::grpc::ServerInterface; virtual void BindCall(Call* call) = 0; }; } // namespace internal /// Desriptor of an RPC service and its various RPC methods class Service { public: Service() : server_(nullptr) {} virtual ~Service() {} bool has_async_methods() const { for (const auto& method : methods_) { if (method && method->handler() == nullptr) { return true; } } return false; } bool has_synchronous_methods() const { for (const auto& method : methods_) { if (method && method->api_type() == internal::RpcServiceMethod::ApiType::SYNC) { return true; } } return false; } bool has_callback_methods() const { for (const auto& method : methods_) { if (method && (method->api_type() == internal::RpcServiceMethod::ApiType::CALL_BACK || method->api_type() == internal::RpcServiceMethod::ApiType::RAW_CALL_BACK)) { return true; } } return false; } bool has_generic_methods() const { for (const auto& method : methods_) { if (method.get() == nullptr) { return true; } } return false; } protected: // TODO(vjpai): Promote experimental contents once callback API is accepted class experimental_type { public: explicit experimental_type(Service* service) : service_(service) {} void MarkMethodCallback(int index, internal::MethodHandler* handler) { service_->MarkMethodCallbackInternal(index, handler); } void MarkMethodRawCallback(int index, internal::MethodHandler* handler) { service_->MarkMethodRawCallbackInternal(index, handler); } internal::MethodHandler* GetHandler(int index) { return service_->GetHandlerInternal(index); } private: Service* service_; }; experimental_type experimental() { return experimental_type(this); } template void RequestAsyncUnary(int index, ::grpc_impl::ServerContext* context, Message* request, internal::ServerAsyncStreamingInterface* stream, ::grpc_impl::CompletionQueue* call_cq, ::grpc_impl::ServerCompletionQueue* notification_cq, void* tag) { // Typecast the index to size_t for indexing into a vector // while preserving the API that existed before a compiler // warning was first seen (grpc/grpc#11664) size_t idx = static_cast(index); server_->RequestAsyncCall(methods_[idx].get(), context, stream, call_cq, notification_cq, tag, request); } void RequestAsyncClientStreaming( int index, ::grpc_impl::ServerContext* context, internal::ServerAsyncStreamingInterface* stream, ::grpc_impl::CompletionQueue* call_cq, ::grpc_impl::ServerCompletionQueue* notification_cq, void* tag) { size_t idx = static_cast(index); server_->RequestAsyncCall(methods_[idx].get(), context, stream, call_cq, notification_cq, tag); } template void RequestAsyncServerStreaming( int index, ::grpc_impl::ServerContext* context, Message* request, internal::ServerAsyncStreamingInterface* stream, ::grpc_impl::CompletionQueue* call_cq, ::grpc_impl::ServerCompletionQueue* notification_cq, void* tag) { size_t idx = static_cast(index); server_->RequestAsyncCall(methods_[idx].get(), context, stream, call_cq, notification_cq, tag, request); } void RequestAsyncBidiStreaming( int index, ::grpc_impl::ServerContext* context, internal::ServerAsyncStreamingInterface* stream, ::grpc_impl::CompletionQueue* call_cq, ::grpc_impl::ServerCompletionQueue* notification_cq, void* tag) { size_t idx = static_cast(index); server_->RequestAsyncCall(methods_[idx].get(), context, stream, call_cq, notification_cq, tag); } void AddMethod(internal::RpcServiceMethod* method) { methods_.emplace_back(method); } void MarkMethodAsync(int index) { // This does not have to be a hard error, however no one has approached us // with a use case yet. Please file an issue if you believe you have one. size_t idx = static_cast(index); GPR_CODEGEN_ASSERT( methods_[idx].get() != nullptr && "Cannot mark the method as 'async' because it has already been " "marked as 'generic'."); methods_[idx]->SetServerApiType(internal::RpcServiceMethod::ApiType::ASYNC); } void MarkMethodRaw(int index) { // This does not have to be a hard error, however no one has approached us // with a use case yet. Please file an issue if you believe you have one. size_t idx = static_cast(index); GPR_CODEGEN_ASSERT(methods_[idx].get() != nullptr && "Cannot mark the method as 'raw' because it has already " "been marked as 'generic'."); methods_[idx]->SetServerApiType(internal::RpcServiceMethod::ApiType::RAW); } void MarkMethodGeneric(int index) { // This does not have to be a hard error, however no one has approached us // with a use case yet. Please file an issue if you believe you have one. size_t idx = static_cast(index); GPR_CODEGEN_ASSERT( methods_[idx]->handler() != nullptr && "Cannot mark the method as 'generic' because it has already been " "marked as 'async' or 'raw'."); methods_[idx].reset(); } void MarkMethodStreamed(int index, internal::MethodHandler* streamed_method) { // This does not have to be a hard error, however no one has approached us // with a use case yet. Please file an issue if you believe you have one. size_t idx = static_cast(index); GPR_CODEGEN_ASSERT(methods_[idx] && methods_[idx]->handler() && "Cannot mark an async or generic method Streamed"); methods_[idx]->SetHandler(streamed_method); // From the server's point of view, streamed unary is a special // case of BIDI_STREAMING that has 1 read and 1 write, in that order, // and split server-side streaming is BIDI_STREAMING with 1 read and // any number of writes, in that order. methods_[idx]->SetMethodType(internal::RpcMethod::BIDI_STREAMING); } #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL void MarkMethodCallback(int index, internal::MethodHandler* handler) { MarkMethodCallbackInternal(index, handler); } void MarkMethodRawCallback(int index, internal::MethodHandler* handler) { MarkMethodRawCallbackInternal(index, handler); } internal::MethodHandler* GetHandler(int index) { return GetHandlerInternal(index); } #endif private: // TODO(vjpai): migrate the Internal functions to mainline functions once // callback API is fully de-experimental void MarkMethodCallbackInternal(int index, internal::MethodHandler* handler) { // This does not have to be a hard error, however no one has approached us // with a use case yet. Please file an issue if you believe you have one. size_t idx = static_cast(index); GPR_CODEGEN_ASSERT( methods_[idx].get() != nullptr && "Cannot mark the method as 'callback' because it has already been " "marked as 'generic'."); methods_[idx]->SetHandler(handler); methods_[idx]->SetServerApiType( internal::RpcServiceMethod::ApiType::CALL_BACK); } void MarkMethodRawCallbackInternal(int index, internal::MethodHandler* handler) { // This does not have to be a hard error, however no one has approached us // with a use case yet. Please file an issue if you believe you have one. size_t idx = static_cast(index); GPR_CODEGEN_ASSERT( methods_[idx].get() != nullptr && "Cannot mark the method as 'raw callback' because it has already " "been marked as 'generic'."); methods_[idx]->SetHandler(handler); methods_[idx]->SetServerApiType( internal::RpcServiceMethod::ApiType::RAW_CALL_BACK); } internal::MethodHandler* GetHandlerInternal(int index) { size_t idx = static_cast(index); return methods_[idx]->handler(); } friend class grpc_impl::Server; friend class ServerInterface; ServerInterface* server_; std::vector> methods_; }; } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_SERVICE_TYPE_H grpc-1.30.2/include/grpcpp/impl/codegen/slice.h000066400000000000000000000122241370425124100212630ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_SLICE_H #define GRPCPP_IMPL_CODEGEN_SLICE_H #include #include #include #include namespace grpc { /// A wrapper around \a grpc_slice. /// /// A slice represents a contiguous reference counted array of bytes. /// It is cheap to take references to a slice, and it is cheap to create a /// slice pointing to a subset of another slice. class Slice final { public: /// Construct an empty slice. Slice() : slice_(g_core_codegen_interface->grpc_empty_slice()) {} /// Destructor - drops one reference. ~Slice() { g_core_codegen_interface->grpc_slice_unref(slice_); } enum AddRef { ADD_REF }; /// Construct a slice from \a slice, adding a reference. Slice(grpc_slice slice, AddRef) : slice_(g_core_codegen_interface->grpc_slice_ref(slice)) {} enum StealRef { STEAL_REF }; /// Construct a slice from \a slice, stealing a reference. Slice(grpc_slice slice, StealRef) : slice_(slice) {} /// Allocate a slice of specified size Slice(size_t len) : slice_(g_core_codegen_interface->grpc_slice_malloc(len)) {} /// Construct a slice from a copied buffer Slice(const void* buf, size_t len) : slice_(g_core_codegen_interface->grpc_slice_from_copied_buffer( reinterpret_cast(buf), len)) {} /// Construct a slice from a copied string Slice(const grpc::string& str) : slice_(g_core_codegen_interface->grpc_slice_from_copied_buffer( str.c_str(), str.length())) {} enum StaticSlice { STATIC_SLICE }; /// Construct a slice from a static buffer Slice(const void* buf, size_t len, StaticSlice) : slice_(g_core_codegen_interface->grpc_slice_from_static_buffer( reinterpret_cast(buf), len)) {} /// Copy constructor, adds a reference. Slice(const Slice& other) : slice_(g_core_codegen_interface->grpc_slice_ref(other.slice_)) {} /// Assignment, reference count is unchanged. Slice& operator=(Slice other) { std::swap(slice_, other.slice_); return *this; } /// Create a slice pointing at some data. Calls malloc to allocate a refcount /// for the object, and arranges that destroy will be called with the /// user data pointer passed in at destruction. Can be the same as buf or /// different (e.g., if data is part of a larger structure that must be /// destroyed when the data is no longer needed) Slice(void* buf, size_t len, void (*destroy)(void*), void* user_data) : slice_(g_core_codegen_interface->grpc_slice_new_with_user_data( buf, len, destroy, user_data)) {} /// Specialization of above for common case where buf == user_data Slice(void* buf, size_t len, void (*destroy)(void*)) : Slice(buf, len, destroy, buf) {} /// Similar to the above but has a destroy that also takes slice length Slice(void* buf, size_t len, void (*destroy)(void*, size_t)) : slice_(g_core_codegen_interface->grpc_slice_new_with_len(buf, len, destroy)) {} /// Byte size. size_t size() const { return GRPC_SLICE_LENGTH(slice_); } /// Raw pointer to the beginning (first element) of the slice. const uint8_t* begin() const { return GRPC_SLICE_START_PTR(slice_); } /// Raw pointer to the end (one byte \em past the last element) of the slice. const uint8_t* end() const { return GRPC_SLICE_END_PTR(slice_); } /// Raw C slice. Caller needs to call grpc_slice_unref when done. grpc_slice c_slice() const { return g_core_codegen_interface->grpc_slice_ref(slice_); } private: friend class ByteBuffer; grpc_slice slice_; }; inline grpc::string_ref StringRefFromSlice(const grpc_slice* slice) { return grpc::string_ref( reinterpret_cast(GRPC_SLICE_START_PTR(*slice)), GRPC_SLICE_LENGTH(*slice)); } inline grpc::string StringFromCopiedSlice(grpc_slice slice) { return grpc::string(reinterpret_cast(GRPC_SLICE_START_PTR(slice)), GRPC_SLICE_LENGTH(slice)); } inline grpc_slice SliceReferencingString(const grpc::string& str) { return g_core_codegen_interface->grpc_slice_from_static_buffer(str.data(), str.length()); } inline grpc_slice SliceFromCopiedString(const grpc::string& str) { return g_core_codegen_interface->grpc_slice_from_copied_buffer(str.data(), str.length()); } } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_SLICE_H grpc-1.30.2/include/grpcpp/impl/codegen/status.h000066400000000000000000000125231370425124100215110ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_STATUS_H #define GRPCPP_IMPL_CODEGEN_STATUS_H #include #include #include namespace grpc { /// Did it work? If it didn't, why? /// /// See \a grpc::StatusCode for details on the available code and their meaning. class Status { public: /// Construct an OK instance. Status() : code_(StatusCode::OK) { // Static assertions to make sure that the C++ API value correctly // maps to the core surface API value static_assert(StatusCode::OK == static_cast(GRPC_STATUS_OK), "Mismatched status code"); static_assert( StatusCode::CANCELLED == static_cast(GRPC_STATUS_CANCELLED), "Mismatched status code"); static_assert( StatusCode::UNKNOWN == static_cast(GRPC_STATUS_UNKNOWN), "Mismatched status code"); static_assert(StatusCode::INVALID_ARGUMENT == static_cast(GRPC_STATUS_INVALID_ARGUMENT), "Mismatched status code"); static_assert(StatusCode::DEADLINE_EXCEEDED == static_cast(GRPC_STATUS_DEADLINE_EXCEEDED), "Mismatched status code"); static_assert( StatusCode::NOT_FOUND == static_cast(GRPC_STATUS_NOT_FOUND), "Mismatched status code"); static_assert(StatusCode::ALREADY_EXISTS == static_cast(GRPC_STATUS_ALREADY_EXISTS), "Mismatched status code"); static_assert(StatusCode::PERMISSION_DENIED == static_cast(GRPC_STATUS_PERMISSION_DENIED), "Mismatched status code"); static_assert(StatusCode::UNAUTHENTICATED == static_cast(GRPC_STATUS_UNAUTHENTICATED), "Mismatched status code"); static_assert(StatusCode::RESOURCE_EXHAUSTED == static_cast(GRPC_STATUS_RESOURCE_EXHAUSTED), "Mismatched status code"); static_assert(StatusCode::FAILED_PRECONDITION == static_cast(GRPC_STATUS_FAILED_PRECONDITION), "Mismatched status code"); static_assert( StatusCode::ABORTED == static_cast(GRPC_STATUS_ABORTED), "Mismatched status code"); static_assert(StatusCode::OUT_OF_RANGE == static_cast(GRPC_STATUS_OUT_OF_RANGE), "Mismatched status code"); static_assert(StatusCode::UNIMPLEMENTED == static_cast(GRPC_STATUS_UNIMPLEMENTED), "Mismatched status code"); static_assert( StatusCode::INTERNAL == static_cast(GRPC_STATUS_INTERNAL), "Mismatched status code"); static_assert(StatusCode::UNAVAILABLE == static_cast(GRPC_STATUS_UNAVAILABLE), "Mismatched status code"); static_assert( StatusCode::DATA_LOSS == static_cast(GRPC_STATUS_DATA_LOSS), "Mismatched status code"); } /// Construct an instance with associated \a code and \a error_message. /// It is an error to construct an OK status with non-empty \a error_message. Status(StatusCode code, const grpc::string& error_message) : code_(code), error_message_(error_message) {} /// Construct an instance with \a code, \a error_message and /// \a error_details. It is an error to construct an OK status with non-empty /// \a error_message and/or \a error_details. Status(StatusCode code, const grpc::string& error_message, const grpc::string& error_details) : code_(code), error_message_(error_message), binary_error_details_(error_details) {} // Pre-defined special status objects. /// An OK pre-defined instance. static const Status& OK; /// A CANCELLED pre-defined instance. static const Status& CANCELLED; /// Return the instance's error code. StatusCode error_code() const { return code_; } /// Return the instance's error message. grpc::string error_message() const { return error_message_; } /// Return the (binary) error details. // Usually it contains a serialized google.rpc.Status proto. grpc::string error_details() const { return binary_error_details_; } /// Is the status OK? bool ok() const { return code_ == StatusCode::OK; } // Ignores any errors. This method does nothing except potentially suppress // complaints from any tools that are checking that errors are not dropped on // the floor. void IgnoreError() const {} private: StatusCode code_; grpc::string error_message_; grpc::string binary_error_details_; }; } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_STATUS_H grpc-1.30.2/include/grpcpp/impl/codegen/status_code_enum.h000066400000000000000000000135741370425124100235360ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_STATUS_CODE_ENUM_H #define GRPCPP_IMPL_CODEGEN_STATUS_CODE_ENUM_H namespace grpc { enum StatusCode { /// Not an error; returned on success. OK = 0, /// The operation was cancelled (typically by the caller). CANCELLED = 1, /// Unknown error. An example of where this error may be returned is if a /// Status value received from another address space belongs to an error-space /// that is not known in this address space. Also errors raised by APIs that /// do not return enough error information may be converted to this error. UNKNOWN = 2, /// Client specified an invalid argument. Note that this differs from /// FAILED_PRECONDITION. INVALID_ARGUMENT indicates arguments that are /// problematic regardless of the state of the system (e.g., a malformed file /// name). INVALID_ARGUMENT = 3, /// Deadline expired before operation could complete. For operations that /// change the state of the system, this error may be returned even if the /// operation has completed successfully. For example, a successful response /// from a server could have been delayed long enough for the deadline to /// expire. DEADLINE_EXCEEDED = 4, /// Some requested entity (e.g., file or directory) was not found. NOT_FOUND = 5, /// Some entity that we attempted to create (e.g., file or directory) already /// exists. ALREADY_EXISTS = 6, /// The caller does not have permission to execute the specified operation. /// PERMISSION_DENIED must not be used for rejections caused by exhausting /// some resource (use RESOURCE_EXHAUSTED instead for those errors). /// PERMISSION_DENIED must not be used if the caller can not be identified /// (use UNAUTHENTICATED instead for those errors). PERMISSION_DENIED = 7, /// The request does not have valid authentication credentials for the /// operation. UNAUTHENTICATED = 16, /// Some resource has been exhausted, perhaps a per-user quota, or perhaps the /// entire file system is out of space. RESOURCE_EXHAUSTED = 8, /// Operation was rejected because the system is not in a state required for /// the operation's execution. For example, directory to be deleted may be /// non-empty, an rmdir operation is applied to a non-directory, etc. /// /// A litmus test that may help a service implementor in deciding /// between FAILED_PRECONDITION, ABORTED, and UNAVAILABLE: /// (a) Use UNAVAILABLE if the client can retry just the failing call. /// (b) Use ABORTED if the client should retry at a higher-level /// (e.g., restarting a read-modify-write sequence). /// (c) Use FAILED_PRECONDITION if the client should not retry until /// the system state has been explicitly fixed. E.g., if an "rmdir" /// fails because the directory is non-empty, FAILED_PRECONDITION /// should be returned since the client should not retry unless /// they have first fixed up the directory by deleting files from it. /// (d) Use FAILED_PRECONDITION if the client performs conditional /// REST Get/Update/Delete on a resource and the resource on the /// server does not match the condition. E.g., conflicting /// read-modify-write on the same resource. FAILED_PRECONDITION = 9, /// The operation was aborted, typically due to a concurrency issue like /// sequencer check failures, transaction aborts, etc. /// /// See litmus test above for deciding between FAILED_PRECONDITION, ABORTED, /// and UNAVAILABLE. ABORTED = 10, /// Operation was attempted past the valid range. E.g., seeking or reading /// past end of file. /// /// Unlike INVALID_ARGUMENT, this error indicates a problem that may be fixed /// if the system state changes. For example, a 32-bit file system will /// generate INVALID_ARGUMENT if asked to read at an offset that is not in the /// range [0,2^32-1], but it will generate OUT_OF_RANGE if asked to read from /// an offset past the current file size. /// /// There is a fair bit of overlap between FAILED_PRECONDITION and /// OUT_OF_RANGE. We recommend using OUT_OF_RANGE (the more specific error) /// when it applies so that callers who are iterating through a space can /// easily look for an OUT_OF_RANGE error to detect when they are done. OUT_OF_RANGE = 11, /// Operation is not implemented or not supported/enabled in this service. UNIMPLEMENTED = 12, /// Internal errors. Means some invariants expected by underlying System has /// been broken. If you see one of these errors, Something is very broken. INTERNAL = 13, /// The service is currently unavailable. This is a most likely a transient /// condition and may be corrected by retrying with a backoff. Note that it is /// not always safe to retry non-idempotent operations. /// /// \warning Although data MIGHT not have been transmitted when this /// status occurs, there is NOT A GUARANTEE that the server has not seen /// anything. So in general it is unsafe to retry on this status code /// if the call is non-idempotent. /// /// See litmus test above for deciding between FAILED_PRECONDITION, ABORTED, /// and UNAVAILABLE. UNAVAILABLE = 14, /// Unrecoverable data loss or corruption. DATA_LOSS = 15, /// Force users to include a default branch: DO_NOT_USE = -1 }; } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_STATUS_CODE_ENUM_H grpc-1.30.2/include/grpcpp/impl/codegen/string_ref.h000066400000000000000000000107001370425124100223230ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_STRING_REF_H #define GRPCPP_IMPL_CODEGEN_STRING_REF_H #include #include #include #include #include #include namespace grpc { /// This class is a non owning reference to a string. /// /// It should be a strict subset of the upcoming std::string_ref. /// /// \see http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3442.html /// /// The constexpr is dropped or replaced with const for legacy compiler /// compatibility. class string_ref { public: /// types typedef const char* const_iterator; typedef std::reverse_iterator const_reverse_iterator; /// constants const static size_t npos; /// construct/copy. string_ref() : data_(nullptr), length_(0) {} string_ref(const string_ref& other) : data_(other.data_), length_(other.length_) {} string_ref& operator=(const string_ref& rhs) { data_ = rhs.data_; length_ = rhs.length_; return *this; } string_ref(const char* s) : data_(s), length_(strlen(s)) {} string_ref(const char* s, size_t l) : data_(s), length_(l) {} string_ref(const grpc::string& s) : data_(s.data()), length_(s.length()) {} /// iterators const_iterator begin() const { return data_; } const_iterator end() const { return data_ + length_; } const_iterator cbegin() const { return data_; } const_iterator cend() const { return data_ + length_; } const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); } const_reverse_iterator rend() const { return const_reverse_iterator(begin()); } const_reverse_iterator crbegin() const { return const_reverse_iterator(end()); } const_reverse_iterator crend() const { return const_reverse_iterator(begin()); } /// capacity size_t size() const { return length_; } size_t length() const { return length_; } size_t max_size() const { return length_; } bool empty() const { return length_ == 0; } /// element access const char* data() const { return data_; } /// string operations int compare(string_ref x) const { size_t min_size = length_ < x.length_ ? length_ : x.length_; int r = memcmp(data_, x.data_, min_size); if (r < 0) return -1; if (r > 0) return 1; if (length_ < x.length_) return -1; if (length_ > x.length_) return 1; return 0; } bool starts_with(string_ref x) const { return length_ >= x.length_ && (memcmp(data_, x.data_, x.length_) == 0); } bool ends_with(string_ref x) const { return length_ >= x.length_ && (memcmp(data_ + (length_ - x.length_), x.data_, x.length_) == 0); } size_t find(string_ref s) const { auto it = std::search(cbegin(), cend(), s.cbegin(), s.cend()); return it == cend() ? npos : std::distance(cbegin(), it); } size_t find(char c) const { auto it = std::find(cbegin(), cend(), c); return it == cend() ? npos : std::distance(cbegin(), it); } string_ref substr(size_t pos, size_t n = npos) const { if (pos > length_) pos = length_; if (n > (length_ - pos)) n = length_ - pos; return string_ref(data_ + pos, n); } private: const char* data_; size_t length_; }; /// Comparison operators inline bool operator==(string_ref x, string_ref y) { return x.compare(y) == 0; } inline bool operator!=(string_ref x, string_ref y) { return x.compare(y) != 0; } inline bool operator<(string_ref x, string_ref y) { return x.compare(y) < 0; } inline bool operator<=(string_ref x, string_ref y) { return x.compare(y) <= 0; } inline bool operator>(string_ref x, string_ref y) { return x.compare(y) > 0; } inline bool operator>=(string_ref x, string_ref y) { return x.compare(y) >= 0; } inline std::ostream& operator<<(std::ostream& out, const string_ref& string) { return out << grpc::string(string.begin(), string.end()); } } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_STRING_REF_H grpc-1.30.2/include/grpcpp/impl/codegen/stub_options.h000066400000000000000000000015111370425124100227110ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_STUB_OPTIONS_H #define GRPCPP_IMPL_CODEGEN_STUB_OPTIONS_H namespace grpc { /// Useful interface for generated stubs class StubOptions {}; } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_STUB_OPTIONS_H grpc-1.30.2/include/grpcpp/impl/codegen/sync.h000066400000000000000000000077031370425124100211460ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_SYNC_H #define GRPCPP_IMPL_CODEGEN_SYNC_H #include #ifdef GPR_HAS_PTHREAD_H #include #endif #include #include #include #include // The core library is not accessible in C++ codegen headers, and vice versa. // Thus, we need to have duplicate headers with similar functionality. // Make sure any change to this file is also reflected in // src/core/lib/gprpp/sync.h too. // // Whenever possible, prefer "src/core/lib/gprpp/sync.h" over this file, // since in core we do not rely on g_core_codegen_interface and hence do not // pay the costs of virtual function calls. namespace grpc { namespace internal { class Mutex { public: Mutex() { g_core_codegen_interface->gpr_mu_init(&mu_); } ~Mutex() { g_core_codegen_interface->gpr_mu_destroy(&mu_); } Mutex(const Mutex&) = delete; Mutex& operator=(const Mutex&) = delete; gpr_mu* get() { return &mu_; } const gpr_mu* get() const { return &mu_; } private: union { gpr_mu mu_; std::mutex do_not_use_sth_; #ifdef GPR_HAS_PTHREAD_H pthread_mutex_t do_not_use_pth_; #endif }; }; // MutexLock is a std:: class MutexLock { public: explicit MutexLock(Mutex* mu) : mu_(mu->get()) { g_core_codegen_interface->gpr_mu_lock(mu_); } explicit MutexLock(gpr_mu* mu) : mu_(mu) { g_core_codegen_interface->gpr_mu_lock(mu_); } ~MutexLock() { g_core_codegen_interface->gpr_mu_unlock(mu_); } MutexLock(const MutexLock&) = delete; MutexLock& operator=(const MutexLock&) = delete; private: gpr_mu* const mu_; }; class ReleasableMutexLock { public: explicit ReleasableMutexLock(Mutex* mu) : mu_(mu->get()) { g_core_codegen_interface->gpr_mu_lock(mu_); } explicit ReleasableMutexLock(gpr_mu* mu) : mu_(mu) { g_core_codegen_interface->gpr_mu_lock(mu_); } ~ReleasableMutexLock() { if (!released_) g_core_codegen_interface->gpr_mu_unlock(mu_); } ReleasableMutexLock(const ReleasableMutexLock&) = delete; ReleasableMutexLock& operator=(const ReleasableMutexLock&) = delete; void Lock() { GPR_DEBUG_ASSERT(released_); g_core_codegen_interface->gpr_mu_lock(mu_); released_ = false; } void Unlock() { GPR_DEBUG_ASSERT(!released_); released_ = true; g_core_codegen_interface->gpr_mu_unlock(mu_); } private: gpr_mu* const mu_; bool released_ = false; }; class CondVar { public: CondVar() { g_core_codegen_interface->gpr_cv_init(&cv_); } ~CondVar() { g_core_codegen_interface->gpr_cv_destroy(&cv_); } CondVar(const CondVar&) = delete; CondVar& operator=(const CondVar&) = delete; void Signal() { g_core_codegen_interface->gpr_cv_signal(&cv_); } void Broadcast() { g_core_codegen_interface->gpr_cv_broadcast(&cv_); } int Wait(Mutex* mu) { return Wait(mu, g_core_codegen_interface->gpr_inf_future(GPR_CLOCK_REALTIME)); } int Wait(Mutex* mu, const gpr_timespec& deadline) { return g_core_codegen_interface->gpr_cv_wait(&cv_, mu->get(), deadline); } template void WaitUntil(Mutex* mu, Predicate pred) { while (!pred()) { Wait(mu, g_core_codegen_interface->gpr_inf_future(GPR_CLOCK_REALTIME)); } } private: gpr_cv cv_; }; } // namespace internal } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_SYNC_H grpc-1.30.2/include/grpcpp/impl/codegen/sync_stream.h000066400000000000000000000055041370425124100225160ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_SYNC_STREAM_H #define GRPCPP_IMPL_CODEGEN_SYNC_STREAM_H #include namespace grpc { namespace internal { typedef ::grpc_impl::internal::ClientStreamingInterface ClientStreamingInterface; typedef ::grpc_impl::internal::ServerStreamingInterface ServerStreamingInterface; template using ReaderInterface = ::grpc_impl::internal::ReaderInterface; template using WriterInterface = ::grpc_impl::internal::WriterInterface; template using ClientReaderFactory = ::grpc_impl::internal::ClientReaderFactory; template using ClientWriterFactory = ::grpc_impl::internal::ClientWriterFactory; template using ClientReaderWriterFactory = ::grpc_impl::internal::ClientReaderWriterFactory; } // namespace internal template using ClientReaderInterface = ::grpc_impl::ClientReaderInterface; template using ClientReader = ::grpc_impl::ClientReader; template using ClientWriterInterface = ::grpc_impl::ClientWriterInterface; template using ClientWriter = ::grpc_impl::ClientWriter; template using ClientReaderWriterInterface = ::grpc_impl::ClientReaderWriterInterface; template using ClientReaderWriter = ::grpc_impl::ClientReaderWriter; template using ServerReaderInterface = ::grpc_impl::ServerReaderInterface; template using ServerReader = ::grpc_impl::ServerReader; template using ServerWriterInterface = ::grpc_impl::ServerWriterInterface; template using ServerWriter = ::grpc_impl::ServerWriter; template using ServerReaderWriterInterface = ::grpc_impl::ServerReaderWriterInterface; template using ServerReaderWriter = ::grpc_impl::ServerReaderWriter; template using ServerUnaryStreamer = ::grpc_impl::ServerUnaryStreamer; template using ServerSplitStreamer = ::grpc_impl::ServerSplitStreamer; } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_SYNC_STREAM_H grpc-1.30.2/include/grpcpp/impl/codegen/sync_stream_impl.h000066400000000000000000001077241370425124100235460ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. */ #ifndef GRPCPP_IMPL_CODEGEN_SYNC_STREAM_IMPL_H #define GRPCPP_IMPL_CODEGEN_SYNC_STREAM_IMPL_H #include #include #include #include #include #include #include #include namespace grpc_impl { namespace internal { /// Common interface for all synchronous client side streaming. class ClientStreamingInterface { public: virtual ~ClientStreamingInterface() {} /// Block waiting until the stream finishes and a final status of the call is /// available. /// /// It is appropriate to call this method exactly once when both: /// * the calling code (client-side) has no more message to send /// (this can be declared implicitly by calling this method, or /// explicitly through an earlier call to WritesDone method of the /// class in use, e.g. \a ClientWriterInterface::WritesDone or /// \a ClientReaderWriterInterface::WritesDone). /// * there are no more messages to be received from the server (which can /// be known implicitly, or explicitly from an earlier call to \a /// ReaderInterface::Read that returned "false"). /// /// This function will return either: /// - when all incoming messages have been read and the server has /// returned status. /// - when the server has returned a non-OK status. /// - OR when the call failed for some reason and the library generated a /// status. /// /// Return values: /// - \a Status contains the status code, message and details for the call /// - the \a ClientContext associated with this call is updated with /// possible trailing metadata sent from the server. virtual ::grpc::Status Finish() = 0; }; /// Common interface for all synchronous server side streaming. class ServerStreamingInterface { public: virtual ~ServerStreamingInterface() {} /// Block to send initial metadata to client. /// This call is optional, but if it is used, it cannot be used concurrently /// with or after the \a Finish method. /// /// The initial metadata that will be sent to the client will be /// taken from the \a ServerContext associated with the call. virtual void SendInitialMetadata() = 0; }; /// An interface that yields a sequence of messages of type \a R. template class ReaderInterface { public: virtual ~ReaderInterface() {} /// Get an upper bound on the next message size available for reading on this /// stream. virtual bool NextMessageSize(uint32_t* sz) = 0; /// Block to read a message and parse to \a msg. Returns \a true on success. /// This is thread-safe with respect to \a Write or \WritesDone methods on /// the same stream. It should not be called concurrently with another \a /// Read on the same stream as the order of delivery will not be defined. /// /// \param[out] msg The read message. /// /// \return \a false when there will be no more incoming messages, either /// because the other side has called \a WritesDone() or the stream has failed /// (or been cancelled). virtual bool Read(R* msg) = 0; }; /// An interface that can be fed a sequence of messages of type \a W. template class WriterInterface { public: virtual ~WriterInterface() {} /// Block to write \a msg to the stream with WriteOptions \a options. /// This is thread-safe with respect to \a ReaderInterface::Read /// /// \param msg The message to be written to the stream. /// \param options The WriteOptions affecting the write operation. /// /// \return \a true on success, \a false when the stream has been closed. virtual bool Write(const W& msg, ::grpc::WriteOptions options) = 0; /// Block to write \a msg to the stream with default write options. /// This is thread-safe with respect to \a ReaderInterface::Read /// /// \param msg The message to be written to the stream. /// /// \return \a true on success, \a false when the stream has been closed. inline bool Write(const W& msg) { return Write(msg, ::grpc::WriteOptions()); } /// Write \a msg and coalesce it with the writing of trailing metadata, using /// WriteOptions \a options. /// /// For client, WriteLast is equivalent of performing Write and WritesDone in /// a single step. \a msg and trailing metadata are coalesced and sent on wire /// by calling this function. For server, WriteLast buffers the \a msg. /// The writing of \a msg is held until the service handler returns, /// where \a msg and trailing metadata are coalesced and sent on wire. /// Note that WriteLast can only buffer \a msg up to the flow control window /// size. If \a msg size is larger than the window size, it will be sent on /// wire without buffering. /// /// \param[in] msg The message to be written to the stream. /// \param[in] options The WriteOptions to be used to write this message. void WriteLast(const W& msg, ::grpc::WriteOptions options) { Write(msg, options.set_last_message()); } }; } // namespace internal /// Client-side interface for streaming reads of message of type \a R. template class ClientReaderInterface : public internal::ClientStreamingInterface, public internal::ReaderInterface { public: /// Block to wait for initial metadata from server. The received metadata /// can only be accessed after this call returns. Should only be called before /// the first read. Calling this method is optional, and if it is not called /// the metadata will be available in ClientContext after the first read. virtual void WaitForInitialMetadata() = 0; }; namespace internal { template class ClientReaderFactory { public: template static ClientReader* Create(::grpc::ChannelInterface* channel, const ::grpc::internal::RpcMethod& method, ::grpc_impl::ClientContext* context, const W& request) { return new ClientReader(channel, method, context, request); } }; } // namespace internal /// Synchronous (blocking) client-side API for doing server-streaming RPCs, /// where the stream of messages coming from the server has messages /// of type \a R. template class ClientReader final : public ClientReaderInterface { public: /// See the \a ClientStreamingInterface.WaitForInitialMetadata method for /// semantics. /// // Side effect: /// Once complete, the initial metadata read from /// the server will be accessible through the \a ClientContext used to /// construct this object. void WaitForInitialMetadata() override { GPR_CODEGEN_ASSERT(!context_->initial_metadata_received_); ::grpc::internal::CallOpSet<::grpc::internal::CallOpRecvInitialMetadata> ops; ops.RecvInitialMetadata(context_); call_.PerformOps(&ops); cq_.Pluck(&ops); /// status ignored } bool NextMessageSize(uint32_t* sz) override { int result = call_.max_receive_message_size(); *sz = (result > 0) ? result : UINT32_MAX; return true; } /// See the \a ReaderInterface.Read method for semantics. /// Side effect: /// This also receives initial metadata from the server, if not /// already received (if initial metadata is received, it can be then /// accessed through the \a ClientContext associated with this call). bool Read(R* msg) override { ::grpc::internal::CallOpSet<::grpc::internal::CallOpRecvInitialMetadata, ::grpc::internal::CallOpRecvMessage> ops; if (!context_->initial_metadata_received_) { ops.RecvInitialMetadata(context_); } ops.RecvMessage(msg); call_.PerformOps(&ops); return cq_.Pluck(&ops) && ops.got_message; } /// See the \a ClientStreamingInterface.Finish method for semantics. /// /// Side effect: /// The \a ClientContext associated with this call is updated with /// possible metadata received from the server. ::grpc::Status Finish() override { ::grpc::internal::CallOpSet<::grpc::internal::CallOpClientRecvStatus> ops; ::grpc::Status status; ops.ClientRecvStatus(context_, &status); call_.PerformOps(&ops); GPR_CODEGEN_ASSERT(cq_.Pluck(&ops)); return status; } private: friend class internal::ClientReaderFactory; ::grpc_impl::ClientContext* context_; ::grpc_impl::CompletionQueue cq_; ::grpc::internal::Call call_; /// Block to create a stream and write the initial metadata and \a request /// out. Note that \a context will be used to fill in custom initial /// metadata used to send to the server when starting the call. template ClientReader(::grpc::ChannelInterface* channel, const ::grpc::internal::RpcMethod& method, ::grpc_impl::ClientContext* context, const W& request) : context_(context), cq_(grpc_completion_queue_attributes{ GRPC_CQ_CURRENT_VERSION, GRPC_CQ_PLUCK, GRPC_CQ_DEFAULT_POLLING, nullptr}), // Pluckable cq call_(channel->CreateCall(method, context, &cq_)) { ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpSendMessage, ::grpc::internal::CallOpClientSendClose> ops; ops.SendInitialMetadata(&context->send_initial_metadata_, context->initial_metadata_flags()); // TODO(ctiller): don't assert GPR_CODEGEN_ASSERT(ops.SendMessagePtr(&request).ok()); ops.ClientSendClose(); call_.PerformOps(&ops); cq_.Pluck(&ops); } }; /// Client-side interface for streaming writes of message type \a W. template class ClientWriterInterface : public internal::ClientStreamingInterface, public internal::WriterInterface { public: /// Half close writing from the client. (signal that the stream of messages /// coming from the client is complete). /// Blocks until currently-pending writes are completed. /// Thread safe with respect to \a ReaderInterface::Read operations only /// /// \return Whether the writes were successful. virtual bool WritesDone() = 0; }; namespace internal { template class ClientWriterFactory { public: template static ClientWriter* Create(::grpc::ChannelInterface* channel, const ::grpc::internal::RpcMethod& method, ::grpc_impl::ClientContext* context, R* response) { return new ClientWriter(channel, method, context, response); } }; } // namespace internal /// Synchronous (blocking) client-side API for doing client-streaming RPCs, /// where the outgoing message stream coming from the client has messages of /// type \a W. template class ClientWriter : public ClientWriterInterface { public: /// See the \a ClientStreamingInterface.WaitForInitialMetadata method for /// semantics. /// // Side effect: /// Once complete, the initial metadata read from the server will be /// accessible through the \a ClientContext used to construct this object. void WaitForInitialMetadata() { GPR_CODEGEN_ASSERT(!context_->initial_metadata_received_); ::grpc::internal::CallOpSet<::grpc::internal::CallOpRecvInitialMetadata> ops; ops.RecvInitialMetadata(context_); call_.PerformOps(&ops); cq_.Pluck(&ops); // status ignored } /// See the WriterInterface.Write(const W& msg, WriteOptions options) method /// for semantics. /// /// Side effect: /// Also sends initial metadata if not already sent (using the /// \a ClientContext associated with this call). using internal::WriterInterface::Write; bool Write(const W& msg, ::grpc::WriteOptions options) override { ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpSendMessage, ::grpc::internal::CallOpClientSendClose> ops; if (options.is_last_message()) { options.set_buffer_hint(); ops.ClientSendClose(); } if (context_->initial_metadata_corked_) { ops.SendInitialMetadata(&context_->send_initial_metadata_, context_->initial_metadata_flags()); context_->set_initial_metadata_corked(false); } if (!ops.SendMessagePtr(&msg, options).ok()) { return false; } call_.PerformOps(&ops); return cq_.Pluck(&ops); } bool WritesDone() override { ::grpc::internal::CallOpSet<::grpc::internal::CallOpClientSendClose> ops; ops.ClientSendClose(); call_.PerformOps(&ops); return cq_.Pluck(&ops); } /// See the ClientStreamingInterface.Finish method for semantics. /// Side effects: /// - Also receives initial metadata if not already received. /// - Attempts to fill in the \a response parameter passed /// to the constructor of this instance with the response /// message from the server. ::grpc::Status Finish() override { ::grpc::Status status; if (!context_->initial_metadata_received_) { finish_ops_.RecvInitialMetadata(context_); } finish_ops_.ClientRecvStatus(context_, &status); call_.PerformOps(&finish_ops_); GPR_CODEGEN_ASSERT(cq_.Pluck(&finish_ops_)); return status; } private: friend class internal::ClientWriterFactory; /// Block to create a stream (i.e. send request headers and other initial /// metadata to the server). Note that \a context will be used to fill /// in custom initial metadata. \a response will be filled in with the /// single expected response message from the server upon a successful /// call to the \a Finish method of this instance. template ClientWriter(::grpc::ChannelInterface* channel, const ::grpc::internal::RpcMethod& method, ::grpc_impl::ClientContext* context, R* response) : context_(context), cq_(grpc_completion_queue_attributes{ GRPC_CQ_CURRENT_VERSION, GRPC_CQ_PLUCK, GRPC_CQ_DEFAULT_POLLING, nullptr}), // Pluckable cq call_(channel->CreateCall(method, context, &cq_)) { finish_ops_.RecvMessage(response); finish_ops_.AllowNoMessage(); if (!context_->initial_metadata_corked_) { ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata> ops; ops.SendInitialMetadata(&context->send_initial_metadata_, context->initial_metadata_flags()); call_.PerformOps(&ops); cq_.Pluck(&ops); } } ::grpc_impl::ClientContext* context_; ::grpc::internal::CallOpSet<::grpc::internal::CallOpRecvInitialMetadata, ::grpc::internal::CallOpGenericRecvMessage, ::grpc::internal::CallOpClientRecvStatus> finish_ops_; ::grpc_impl::CompletionQueue cq_; ::grpc::internal::Call call_; }; /// Client-side interface for bi-directional streaming with /// client-to-server stream messages of type \a W and /// server-to-client stream messages of type \a R. template class ClientReaderWriterInterface : public internal::ClientStreamingInterface, public internal::WriterInterface, public internal::ReaderInterface { public: /// Block to wait for initial metadata from server. The received metadata /// can only be accessed after this call returns. Should only be called before /// the first read. Calling this method is optional, and if it is not called /// the metadata will be available in ClientContext after the first read. virtual void WaitForInitialMetadata() = 0; /// Half close writing from the client. (signal that the stream of messages /// coming from the client is complete). /// Blocks until currently-pending writes are completed. /// Thread-safe with respect to \a ReaderInterface::Read /// /// \return Whether the writes were successful. virtual bool WritesDone() = 0; }; namespace internal { template class ClientReaderWriterFactory { public: static ClientReaderWriter* Create( ::grpc::ChannelInterface* channel, const ::grpc::internal::RpcMethod& method, ::grpc_impl::ClientContext* context) { return new ClientReaderWriter(channel, method, context); } }; } // namespace internal /// Synchronous (blocking) client-side API for bi-directional streaming RPCs, /// where the outgoing message stream coming from the client has messages of /// type \a W, and the incoming messages stream coming from the server has /// messages of type \a R. template class ClientReaderWriter final : public ClientReaderWriterInterface { public: /// Block waiting to read initial metadata from the server. /// This call is optional, but if it is used, it cannot be used concurrently /// with or after the \a Finish method. /// /// Once complete, the initial metadata read from the server will be /// accessible through the \a ClientContext used to construct this object. void WaitForInitialMetadata() override { GPR_CODEGEN_ASSERT(!context_->initial_metadata_received_); ::grpc::internal::CallOpSet<::grpc::internal::CallOpRecvInitialMetadata> ops; ops.RecvInitialMetadata(context_); call_.PerformOps(&ops); cq_.Pluck(&ops); // status ignored } bool NextMessageSize(uint32_t* sz) override { int result = call_.max_receive_message_size(); *sz = (result > 0) ? result : UINT32_MAX; return true; } /// See the \a ReaderInterface.Read method for semantics. /// Side effect: /// Also receives initial metadata if not already received (updates the \a /// ClientContext associated with this call in that case). bool Read(R* msg) override { ::grpc::internal::CallOpSet<::grpc::internal::CallOpRecvInitialMetadata, ::grpc::internal::CallOpRecvMessage> ops; if (!context_->initial_metadata_received_) { ops.RecvInitialMetadata(context_); } ops.RecvMessage(msg); call_.PerformOps(&ops); return cq_.Pluck(&ops) && ops.got_message; } /// See the \a WriterInterface.Write method for semantics. /// /// Side effect: /// Also sends initial metadata if not already sent (using the /// \a ClientContext associated with this call to fill in values). using internal::WriterInterface::Write; bool Write(const W& msg, ::grpc::WriteOptions options) override { ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpSendMessage, ::grpc::internal::CallOpClientSendClose> ops; if (options.is_last_message()) { options.set_buffer_hint(); ops.ClientSendClose(); } if (context_->initial_metadata_corked_) { ops.SendInitialMetadata(&context_->send_initial_metadata_, context_->initial_metadata_flags()); context_->set_initial_metadata_corked(false); } if (!ops.SendMessagePtr(&msg, options).ok()) { return false; } call_.PerformOps(&ops); return cq_.Pluck(&ops); } bool WritesDone() override { ::grpc::internal::CallOpSet<::grpc::internal::CallOpClientSendClose> ops; ops.ClientSendClose(); call_.PerformOps(&ops); return cq_.Pluck(&ops); } /// See the ClientStreamingInterface.Finish method for semantics. /// /// Side effect: /// - the \a ClientContext associated with this call is updated with /// possible trailing metadata sent from the server. ::grpc::Status Finish() override { ::grpc::internal::CallOpSet<::grpc::internal::CallOpRecvInitialMetadata, ::grpc::internal::CallOpClientRecvStatus> ops; if (!context_->initial_metadata_received_) { ops.RecvInitialMetadata(context_); } ::grpc::Status status; ops.ClientRecvStatus(context_, &status); call_.PerformOps(&ops); GPR_CODEGEN_ASSERT(cq_.Pluck(&ops)); return status; } private: friend class internal::ClientReaderWriterFactory; ::grpc_impl::ClientContext* context_; ::grpc_impl::CompletionQueue cq_; ::grpc::internal::Call call_; /// Block to create a stream and write the initial metadata and \a request /// out. Note that \a context will be used to fill in custom initial metadata /// used to send to the server when starting the call. ClientReaderWriter(::grpc::ChannelInterface* channel, const ::grpc::internal::RpcMethod& method, ::grpc_impl::ClientContext* context) : context_(context), cq_(grpc_completion_queue_attributes{ GRPC_CQ_CURRENT_VERSION, GRPC_CQ_PLUCK, GRPC_CQ_DEFAULT_POLLING, nullptr}), // Pluckable cq call_(channel->CreateCall(method, context, &cq_)) { if (!context_->initial_metadata_corked_) { ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata> ops; ops.SendInitialMetadata(&context->send_initial_metadata_, context->initial_metadata_flags()); call_.PerformOps(&ops); cq_.Pluck(&ops); } } }; /// Server-side interface for streaming reads of message of type \a R. template class ServerReaderInterface : public internal::ServerStreamingInterface, public internal::ReaderInterface {}; /// Synchronous (blocking) server-side API for doing client-streaming RPCs, /// where the incoming message stream coming from the client has messages of /// type \a R. template class ServerReader final : public ServerReaderInterface { public: /// See the \a ServerStreamingInterface.SendInitialMetadata method /// for semantics. Note that initial metadata will be affected by the /// \a ServerContext associated with this call. void SendInitialMetadata() override { GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_); ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata> ops; ops.SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { ops.set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; call_->PerformOps(&ops); call_->cq()->Pluck(&ops); } bool NextMessageSize(uint32_t* sz) override { int result = call_->max_receive_message_size(); *sz = (result > 0) ? result : UINT32_MAX; return true; } bool Read(R* msg) override { ::grpc::internal::CallOpSet<::grpc::internal::CallOpRecvMessage> ops; ops.RecvMessage(msg); call_->PerformOps(&ops); return call_->cq()->Pluck(&ops) && ops.got_message; } private: ::grpc::internal::Call* const call_; ServerContext* const ctx_; template friend class ::grpc_impl::internal::ClientStreamingHandler; ServerReader(::grpc::internal::Call* call, ::grpc_impl::ServerContext* ctx) : call_(call), ctx_(ctx) {} }; /// Server-side interface for streaming writes of message of type \a W. template class ServerWriterInterface : public internal::ServerStreamingInterface, public internal::WriterInterface {}; /// Synchronous (blocking) server-side API for doing for doing a /// server-streaming RPCs, where the outgoing message stream coming from the /// server has messages of type \a W. template class ServerWriter final : public ServerWriterInterface { public: /// See the \a ServerStreamingInterface.SendInitialMetadata method /// for semantics. /// Note that initial metadata will be affected by the /// \a ServerContext associated with this call. void SendInitialMetadata() override { GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_); ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata> ops; ops.SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { ops.set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; call_->PerformOps(&ops); call_->cq()->Pluck(&ops); } /// See the \a WriterInterface.Write method for semantics. /// /// Side effect: /// Also sends initial metadata if not already sent (using the /// \a ClientContext associated with this call to fill in values). using internal::WriterInterface::Write; bool Write(const W& msg, ::grpc::WriteOptions options) override { if (options.is_last_message()) { options.set_buffer_hint(); } if (!ctx_->pending_ops_.SendMessagePtr(&msg, options).ok()) { return false; } if (!ctx_->sent_initial_metadata_) { ctx_->pending_ops_.SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { ctx_->pending_ops_.set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; } call_->PerformOps(&ctx_->pending_ops_); // if this is the last message we defer the pluck until AFTER we start // the trailing md op. This prevents hangs. See // https://github.com/grpc/grpc/issues/11546 if (options.is_last_message()) { ctx_->has_pending_ops_ = true; return true; } ctx_->has_pending_ops_ = false; return call_->cq()->Pluck(&ctx_->pending_ops_); } private: ::grpc::internal::Call* const call_; ::grpc_impl::ServerContext* const ctx_; template friend class ::grpc_impl::internal::ServerStreamingHandler; ServerWriter(::grpc::internal::Call* call, ::grpc_impl::ServerContext* ctx) : call_(call), ctx_(ctx) {} }; /// Server-side interface for bi-directional streaming. template class ServerReaderWriterInterface : public internal::ServerStreamingInterface, public internal::WriterInterface, public internal::ReaderInterface {}; /// Actual implementation of bi-directional streaming namespace internal { template class ServerReaderWriterBody final { public: ServerReaderWriterBody(grpc::internal::Call* call, ::grpc_impl::ServerContext* ctx) : call_(call), ctx_(ctx) {} void SendInitialMetadata() { GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_); grpc::internal::CallOpSet ops; ops.SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { ops.set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; call_->PerformOps(&ops); call_->cq()->Pluck(&ops); } bool NextMessageSize(uint32_t* sz) { int result = call_->max_receive_message_size(); *sz = (result > 0) ? result : UINT32_MAX; return true; } bool Read(R* msg) { ::grpc::internal::CallOpSet<::grpc::internal::CallOpRecvMessage> ops; ops.RecvMessage(msg); call_->PerformOps(&ops); return call_->cq()->Pluck(&ops) && ops.got_message; } bool Write(const W& msg, ::grpc::WriteOptions options) { if (options.is_last_message()) { options.set_buffer_hint(); } if (!ctx_->pending_ops_.SendMessagePtr(&msg, options).ok()) { return false; } if (!ctx_->sent_initial_metadata_) { ctx_->pending_ops_.SendInitialMetadata(&ctx_->initial_metadata_, ctx_->initial_metadata_flags()); if (ctx_->compression_level_set()) { ctx_->pending_ops_.set_compression_level(ctx_->compression_level()); } ctx_->sent_initial_metadata_ = true; } call_->PerformOps(&ctx_->pending_ops_); // if this is the last message we defer the pluck until AFTER we start // the trailing md op. This prevents hangs. See // https://github.com/grpc/grpc/issues/11546 if (options.is_last_message()) { ctx_->has_pending_ops_ = true; return true; } ctx_->has_pending_ops_ = false; return call_->cq()->Pluck(&ctx_->pending_ops_); } private: grpc::internal::Call* const call_; ::grpc_impl::ServerContext* const ctx_; }; } // namespace internal /// Synchronous (blocking) server-side API for a bidirectional /// streaming call, where the incoming message stream coming from the client has /// messages of type \a R, and the outgoing message streaming coming from /// the server has messages of type \a W. template class ServerReaderWriter final : public ServerReaderWriterInterface { public: /// See the \a ServerStreamingInterface.SendInitialMetadata method /// for semantics. Note that initial metadata will be affected by the /// \a ServerContext associated with this call. void SendInitialMetadata() override { body_.SendInitialMetadata(); } bool NextMessageSize(uint32_t* sz) override { return body_.NextMessageSize(sz); } bool Read(R* msg) override { return body_.Read(msg); } /// See the \a WriterInterface.Write(const W& msg, WriteOptions options) /// method for semantics. /// Side effect: /// Also sends initial metadata if not already sent (using the \a /// ServerContext associated with this call). using internal::WriterInterface::Write; bool Write(const W& msg, ::grpc::WriteOptions options) override { return body_.Write(msg, options); } private: internal::ServerReaderWriterBody body_; friend class ::grpc_impl::internal::TemplatedBidiStreamingHandler< ServerReaderWriter, false>; ServerReaderWriter(::grpc::internal::Call* call, ::grpc_impl::ServerContext* ctx) : body_(call, ctx) {} }; /// A class to represent a flow-controlled unary call. This is something /// of a hybrid between conventional unary and streaming. This is invoked /// through a unary call on the client side, but the server responds to it /// as though it were a single-ping-pong streaming call. The server can use /// the \a NextMessageSize method to determine an upper-bound on the size of /// the message. A key difference relative to streaming: ServerUnaryStreamer /// must have exactly 1 Read and exactly 1 Write, in that order, to function /// correctly. Otherwise, the RPC is in error. template class ServerUnaryStreamer final : public ServerReaderWriterInterface { public: /// Block to send initial metadata to client. /// Implicit input parameter: /// - the \a ServerContext associated with this call will be used for /// sending initial metadata. void SendInitialMetadata() override { body_.SendInitialMetadata(); } /// Get an upper bound on the request message size from the client. bool NextMessageSize(uint32_t* sz) override { return body_.NextMessageSize(sz); } /// Read a message of type \a R into \a msg. Completion will be notified by \a /// tag on the associated completion queue. /// This is thread-safe with respect to \a Write or \a WritesDone methods. It /// should not be called concurrently with other streaming APIs /// on the same stream. It is not meaningful to call it concurrently /// with another \a ReaderInterface::Read on the same stream since reads on /// the same stream are delivered in order. /// /// \param[out] msg Where to eventually store the read message. /// \param[in] tag The tag identifying the operation. bool Read(RequestType* request) override { if (read_done_) { return false; } read_done_ = true; return body_.Read(request); } /// Block to write \a msg to the stream with WriteOptions \a options. /// This is thread-safe with respect to \a ReaderInterface::Read /// /// \param msg The message to be written to the stream. /// \param options The WriteOptions affecting the write operation. /// /// \return \a true on success, \a false when the stream has been closed. using internal::WriterInterface::Write; bool Write(const ResponseType& response, ::grpc::WriteOptions options) override { if (write_done_ || !read_done_) { return false; } write_done_ = true; return body_.Write(response, options); } private: internal::ServerReaderWriterBody body_; bool read_done_; bool write_done_; friend class ::grpc_impl::internal::TemplatedBidiStreamingHandler< ServerUnaryStreamer, true>; ServerUnaryStreamer(::grpc::internal::Call* call, ::grpc_impl::ServerContext* ctx) : body_(call, ctx), read_done_(false), write_done_(false) {} }; /// A class to represent a flow-controlled server-side streaming call. /// This is something of a hybrid between server-side and bidi streaming. /// This is invoked through a server-side streaming call on the client side, /// but the server responds to it as though it were a bidi streaming call that /// must first have exactly 1 Read and then any number of Writes. template class ServerSplitStreamer final : public ServerReaderWriterInterface { public: /// Block to send initial metadata to client. /// Implicit input parameter: /// - the \a ServerContext associated with this call will be used for /// sending initial metadata. void SendInitialMetadata() override { body_.SendInitialMetadata(); } /// Get an upper bound on the request message size from the client. bool NextMessageSize(uint32_t* sz) override { return body_.NextMessageSize(sz); } /// Read a message of type \a R into \a msg. Completion will be notified by \a /// tag on the associated completion queue. /// This is thread-safe with respect to \a Write or \a WritesDone methods. It /// should not be called concurrently with other streaming APIs /// on the same stream. It is not meaningful to call it concurrently /// with another \a ReaderInterface::Read on the same stream since reads on /// the same stream are delivered in order. /// /// \param[out] msg Where to eventually store the read message. /// \param[in] tag The tag identifying the operation. bool Read(RequestType* request) override { if (read_done_) { return false; } read_done_ = true; return body_.Read(request); } /// Block to write \a msg to the stream with WriteOptions \a options. /// This is thread-safe with respect to \a ReaderInterface::Read /// /// \param msg The message to be written to the stream. /// \param options The WriteOptions affecting the write operation. /// /// \return \a true on success, \a false when the stream has been closed. using internal::WriterInterface::Write; bool Write(const ResponseType& response, ::grpc::WriteOptions options) override { return read_done_ && body_.Write(response, options); } private: internal::ServerReaderWriterBody body_; bool read_done_; friend class ::grpc_impl::internal::TemplatedBidiStreamingHandler< ServerSplitStreamer, false>; ServerSplitStreamer(::grpc::internal::Call* call, ::grpc_impl::ServerContext* ctx) : body_(call, ctx), read_done_(false) {} }; } // namespace grpc_impl #endif // GRPCPP_IMPL_CODEGEN_SYNC_STREAM_IMPL_H grpc-1.30.2/include/grpcpp/impl/codegen/time.h000066400000000000000000000051251370425124100211240ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_CODEGEN_TIME_H #define GRPCPP_IMPL_CODEGEN_TIME_H #include #include #include namespace grpc { /** If you are trying to use CompletionQueue::AsyncNext with a time class that isn't either gpr_timespec or std::chrono::system_clock::time_point, you will most likely be looking at this comment as your compiler will have fired an error below. In order to fix this issue, you have two potential solutions: 1. Use gpr_timespec or std::chrono::system_clock::time_point instead 2. Specialize the TimePoint class with whichever time class that you want to use here. See below for two examples of how to do this. */ template class TimePoint { public: // If you see the error with methods below, you may need either // i) using the existing types having a conversion class such as // gpr_timespec and std::chrono::system_clock::time_point or // ii) writing a new TimePoint to address your case. TimePoint(const T& /*time*/) = delete; gpr_timespec raw_time() = delete; }; template <> class TimePoint { public: TimePoint(const gpr_timespec& time) : time_(time) {} gpr_timespec raw_time() { return time_; } private: gpr_timespec time_; }; } // namespace grpc namespace grpc { // from and to should be absolute time. void Timepoint2Timespec(const std::chrono::system_clock::time_point& from, gpr_timespec* to); void TimepointHR2Timespec( const std::chrono::high_resolution_clock::time_point& from, gpr_timespec* to); std::chrono::system_clock::time_point Timespec2Timepoint(gpr_timespec t); template <> class TimePoint { public: TimePoint(const std::chrono::system_clock::time_point& time) { Timepoint2Timespec(time, &time_); } gpr_timespec raw_time() const { return time_; } private: gpr_timespec time_; }; } // namespace grpc #endif // GRPCPP_IMPL_CODEGEN_TIME_H grpc-1.30.2/include/grpcpp/impl/grpc_library.h000066400000000000000000000033371370425124100212440ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_GRPC_LIBRARY_H #define GRPCPP_IMPL_GRPC_LIBRARY_H #include #include #include #include #include namespace grpc { namespace internal { class GrpcLibrary final : public GrpcLibraryInterface { public: void init() override { grpc_init(); } void shutdown() override { grpc_shutdown(); } }; /// Instantiating this class ensures the proper initialization of gRPC. class GrpcLibraryInitializer final { public: GrpcLibraryInitializer() { if (grpc::g_glip == nullptr) { static auto* const g_gli = new GrpcLibrary(); grpc::g_glip = g_gli; } if (grpc::g_core_codegen_interface == nullptr) { static auto* const g_core_codegen = new CoreCodegen(); grpc::g_core_codegen_interface = g_core_codegen; } } /// A no-op method to force the linker to reference this class, which will /// take care of initializing and shutting down the gRPC runtime. int summon() { return 0; } }; } // namespace internal } // namespace grpc #endif // GRPCPP_IMPL_GRPC_LIBRARY_H grpc-1.30.2/include/grpcpp/impl/method_handler_impl.h000066400000000000000000000014241370425124100225560ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_METHOD_HANDLER_IMPL_H #define GRPCPP_IMPL_METHOD_HANDLER_IMPL_H #include #endif // GRPCPP_IMPL_METHOD_HANDLER_IMPL_H grpc-1.30.2/include/grpcpp/impl/rpc_method.h000066400000000000000000000013601370425124100207030ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_RPC_METHOD_H #define GRPCPP_IMPL_RPC_METHOD_H #include #endif // GRPCPP_IMPL_RPC_METHOD_H grpc-1.30.2/include/grpcpp/impl/rpc_service_method.h000066400000000000000000000014201370425124100224200ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_RPC_SERVICE_METHOD_H #define GRPCPP_IMPL_RPC_SERVICE_METHOD_H #include #endif // GRPCPP_IMPL_RPC_SERVICE_METHOD_H grpc-1.30.2/include/grpcpp/impl/serialization_traits.h000066400000000000000000000014301370425124100230200ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_SERIALIZATION_TRAITS_H #define GRPCPP_IMPL_SERIALIZATION_TRAITS_H #include #endif // GRPCPP_IMPL_SERIALIZATION_TRAITS_H grpc-1.30.2/include/grpcpp/impl/server_builder_option.h000066400000000000000000000016001370425124100231600ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_SERVER_BUILDER_OPTION_H #define GRPCPP_IMPL_SERVER_BUILDER_OPTION_H #include namespace grpc { typedef ::grpc_impl::ServerBuilderOption ServerBuilderOption; } // namespace grpc #endif // GRPCPP_IMPL_SERVER_BUILDER_OPTION_H grpc-1.30.2/include/grpcpp/impl/server_builder_option_impl.h000066400000000000000000000025511370425124100242070ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_SERVER_BUILDER_OPTION_IMPL_H #define GRPCPP_IMPL_SERVER_BUILDER_OPTION_IMPL_H #include #include #include #include namespace grpc_impl { /// Interface to pass an option to a \a ServerBuilder. class ServerBuilderOption { public: virtual ~ServerBuilderOption() {} /// Alter the \a ChannelArguments used to create the gRPC server. virtual void UpdateArguments(grpc::ChannelArguments* args) = 0; /// Alter the ServerBuilderPlugin map that will be added into ServerBuilder. virtual void UpdatePlugins( std::vector>* plugins) = 0; }; } // namespace grpc_impl #endif // GRPCPP_IMPL_SERVER_BUILDER_OPTION_IMPL_H grpc-1.30.2/include/grpcpp/impl/server_builder_plugin.h000066400000000000000000000044321370425124100231540ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_SERVER_BUILDER_PLUGIN_H #define GRPCPP_IMPL_SERVER_BUILDER_PLUGIN_H #include #include #include namespace grpc_impl { class ServerBuilder; class ServerInitializer; } // namespace grpc_impl namespace grpc { /// This interface is meant for internal usage only. Implementations of this /// interface should add themselves to a \a ServerBuilder instance through the /// \a InternalAddPluginFactory method. class ServerBuilderPlugin { public: virtual ~ServerBuilderPlugin() {} virtual grpc::string name() = 0; /// UpdateServerBuilder will be called at an early stage in /// ServerBuilder::BuildAndStart(), right after the ServerBuilderOptions have /// done their updates. virtual void UpdateServerBuilder(grpc_impl::ServerBuilder* /*builder*/) {} /// InitServer will be called in ServerBuilder::BuildAndStart(), after the /// Server instance is created. virtual void InitServer(grpc_impl::ServerInitializer* si) = 0; /// Finish will be called at the end of ServerBuilder::BuildAndStart(). virtual void Finish(grpc_impl::ServerInitializer* si) = 0; /// ChangeArguments is an interface that can be used in /// ServerBuilderOption::UpdatePlugins virtual void ChangeArguments(const grpc::string& name, void* value) = 0; /// UpdateChannelArguments will be called in ServerBuilder::BuildAndStart(), /// before the Server instance is created. virtual void UpdateChannelArguments(ChannelArguments* /*args*/) {} virtual bool has_sync_methods() const { return false; } virtual bool has_async_methods() const { return false; } }; } // namespace grpc #endif // GRPCPP_IMPL_SERVER_BUILDER_PLUGIN_H grpc-1.30.2/include/grpcpp/impl/server_initializer.h000066400000000000000000000015601370425124100224720ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_SERVER_INITIALIZER_H #define GRPCPP_IMPL_SERVER_INITIALIZER_H #include namespace grpc { typedef ::grpc_impl::ServerInitializer ServerInitializer; } // namespace grpc #endif // GRPCPP_IMPL_SERVER_INITIALIZER_H grpc-1.30.2/include/grpcpp/impl/server_initializer_impl.h000066400000000000000000000026401370425124100235130ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_SERVER_INITIALIZER_IMPL_H #define GRPCPP_IMPL_SERVER_INITIALIZER_IMPL_H #include #include #include namespace grpc { class Service; } // namespace grpc namespace grpc_impl { class Server; class ServerInitializer { public: ServerInitializer(grpc::Server* server) : server_(server) {} bool RegisterService(std::shared_ptr service) { if (!server_->RegisterService(nullptr, service.get())) { return false; } default_services_.push_back(service); return true; } const std::vector* GetServiceList() { return &server_->services_; } private: grpc::Server* server_; std::vector > default_services_; }; } // namespace grpc_impl #endif // GRPCPP_IMPL_SERVER_INITIALIZER_IMPL_H grpc-1.30.2/include/grpcpp/impl/service_type.h000066400000000000000000000013701370425124100212610ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_IMPL_SERVICE_TYPE_H #define GRPCPP_IMPL_SERVICE_TYPE_H #include #endif // GRPCPP_IMPL_SERVICE_TYPE_H grpc-1.30.2/include/grpcpp/opencensus.h000066400000000000000000000032121370425124100177760ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #ifndef GRPCPP_OPENCENSUS_H #define GRPCPP_OPENCENSUS_H #include "opencensus/trace/span.h" namespace grpc_impl { class ServerContext; } namespace grpc { // These symbols in this file will not be included in the binary unless // grpc_opencensus_plugin build target was added as a dependency. At the moment // it is only setup to be built with Bazel. // Registers the OpenCensus plugin with gRPC, so that it will be used for future // RPCs. This must be called before any views are created. void RegisterOpenCensusPlugin(); // RPC stats definitions, defined by // https://github.com/census-instrumentation/opencensus-specs/blob/master/stats/gRPC.md // Registers the cumulative gRPC views so that they will be exported by any // registered stats exporter. For on-task stats, construct a View using the // ViewDescriptors below. void RegisterOpenCensusViewsForExport(); // Returns the tracing Span for the current RPC. ::opencensus::trace::Span GetSpanFromServerContext( ::grpc_impl::ServerContext* context); } // namespace grpc #endif // GRPCPP_OPENCENSUS_H grpc-1.30.2/include/grpcpp/resource_quota.h000066400000000000000000000015031370425124100206550ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_RESOURCE_QUOTA_H #define GRPCPP_RESOURCE_QUOTA_H #include namespace grpc { typedef ::grpc_impl::ResourceQuota ResourceQuota; } // namespace grpc #endif // GRPCPP_RESOURCE_QUOTA_H grpc-1.30.2/include/grpcpp/resource_quota_impl.h000066400000000000000000000046021370425124100217010ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPCPP_RESOURCE_QUOTA_IMPL_H #define GRPCPP_RESOURCE_QUOTA_IMPL_H struct grpc_resource_quota; #include #include namespace grpc_impl { /// ResourceQuota represents a bound on memory and thread usage by the gRPC /// library. A ResourceQuota can be attached to a server (via \a ServerBuilder), /// or a client channel (via \a ChannelArguments). /// gRPC will attempt to keep memory and threads used by all attached entities /// below the ResourceQuota bound. class ResourceQuota final : private ::grpc::GrpcLibraryCodegen { public: /// \param name - a unique name for this ResourceQuota. explicit ResourceQuota(const grpc::string& name); ResourceQuota(); ~ResourceQuota(); /// Resize this \a ResourceQuota to a new size. If \a new_size is smaller /// than the current size of the pool, memory usage will be monotonically /// decreased until it falls under \a new_size. /// No time bound is given for this to occur however. ResourceQuota& Resize(size_t new_size); /// Set the max number of threads that can be allocated from this /// ResourceQuota object. /// /// If the new_max_threads value is smaller than the current value, no new /// threads are allocated until the number of active threads fall below /// new_max_threads. There is no time bound on when this may happen i.e none /// of the current threads are forcefully destroyed and all threads run their /// normal course. ResourceQuota& SetMaxThreads(int new_max_threads); grpc_resource_quota* c_resource_quota() const { return impl_; } private: ResourceQuota(const ResourceQuota& rhs); ResourceQuota& operator=(const ResourceQuota& rhs); grpc_resource_quota* const impl_; }; } // namespace grpc_impl #endif // GRPCPP_RESOURCE_QUOTA_IMPL_H grpc-1.30.2/include/grpcpp/security/000077500000000000000000000000001370425124100173145ustar00rootroot00000000000000grpc-1.30.2/include/grpcpp/security/alts_context.h000066400000000000000000000037201370425124100221760ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_SECURITY_ALTS_CONTEXT_H #define GRPCPP_SECURITY_ALTS_CONTEXT_H #include #include #include struct grpc_gcp_AltsContext; namespace grpc { namespace experimental { // AltsContext is a wrapper class for grpc_gcp_AltsContext. class AltsContext { public: struct RpcProtocolVersions { struct Version { int major_version; int minor_version; }; Version max_rpc_version; Version min_rpc_version; }; explicit AltsContext(const grpc_gcp_AltsContext* ctx); AltsContext& operator=(const AltsContext&) = default; AltsContext(const AltsContext&) = default; grpc::string application_protocol() const; grpc::string record_protocol() const; grpc::string peer_service_account() const; grpc::string local_service_account() const; grpc_security_level security_level() const; RpcProtocolVersions peer_rpc_versions() const; private: // TODO(ZhenLian): Also plumb field peer_attributes when it is in use grpc::string application_protocol_; grpc::string record_protocol_; grpc::string peer_service_account_; grpc::string local_service_account_; grpc_security_level security_level_ = GRPC_SECURITY_NONE; RpcProtocolVersions peer_rpc_versions_ = {{0, 0}, {0, 0}}; }; } // namespace experimental } // namespace grpc #endif // GRPCPP_SECURITY_ALTS_CONTEXT_H grpc-1.30.2/include/grpcpp/security/alts_util.h000066400000000000000000000033161370425124100214700ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_SECURITY_ALTS_UTIL_H #define GRPCPP_SECURITY_ALTS_UTIL_H #include #include #include #include #include struct grpc_gcp_AltsContext; namespace grpc { namespace experimental { // GetAltsContextFromAuthContext helps to get the AltsContext from AuthContext. // If ALTS is not the transport security protocol used to establish the // connection, this function will return nullptr. std::unique_ptr GetAltsContextFromAuthContext( const std::shared_ptr& auth_context); // This utility function performs ALTS client authorization check on server // side, i.e., checks if the client identity matches one of the expected service // accounts. It returns OK if client is authorized and an error otherwise. grpc::Status AltsClientAuthzCheck( const std::shared_ptr& auth_context, const std::vector& expected_service_accounts); } // namespace experimental } // namespace grpc #endif // GRPCPP_SECURITY_ALTS_UTIL_H grpc-1.30.2/include/grpcpp/security/auth_context.h000066400000000000000000000014151370425124100221730ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_SECURITY_AUTH_CONTEXT_H #define GRPCPP_SECURITY_AUTH_CONTEXT_H #include #endif // GRPCPP_SECURITY_AUTH_CONTEXT_H grpc-1.30.2/include/grpcpp/security/auth_metadata_processor.h000066400000000000000000000016341370425124100243710ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_SECURITY_AUTH_METADATA_PROCESSOR_H #define GRPCPP_SECURITY_AUTH_METADATA_PROCESSOR_H #include namespace grpc { typedef ::grpc_impl::AuthMetadataProcessor AuthMetadataProcessor; } // namespace grpc #endif // GRPCPP_SECURITY_AUTH_METADATA_PROCESSOR_H grpc-1.30.2/include/grpcpp/security/auth_metadata_processor_impl.h000066400000000000000000000045531370425124100254150ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_SECURITY_AUTH_METADATA_PROCESSOR_IMPL_H #define GRPCPP_SECURITY_AUTH_METADATA_PROCESSOR_IMPL_H #include #include #include #include namespace grpc_impl { /// Interface allowing custom server-side authorization based on credentials /// encoded in metadata. Objects of this type can be passed to /// \a ServerCredentials::SetAuthMetadataProcessor(). class AuthMetadataProcessor { public: typedef std::multimap InputMetadata; typedef std::multimap OutputMetadata; virtual ~AuthMetadataProcessor() {} /// If this method returns true, the \a Process function will be scheduled in /// a different thread from the one processing the call. virtual bool IsBlocking() const { return true; } /// context is read/write: it contains the properties of the channel peer and /// it is the job of the Process method to augment it with properties derived /// from the passed-in auth_metadata. /// consumed_auth_metadata needs to be filled with metadata that has been /// consumed by the processor and will be removed from the call. /// response_metadata is the metadata that will be sent as part of the /// response. /// If the return value is not Status::OK, the rpc call will be aborted with /// the error code and error message sent back to the client. virtual grpc::Status Process(const InputMetadata& auth_metadata, grpc::AuthContext* context, OutputMetadata* consumed_auth_metadata, OutputMetadata* response_metadata) = 0; }; } // namespace grpc_impl #endif // GRPCPP_SECURITY_AUTH_METADATA_PROCESSOR_IMPL_H grpc-1.30.2/include/grpcpp/security/credentials.h000066400000000000000000000121351370425124100217640ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_SECURITY_CREDENTIALS_H #define GRPCPP_SECURITY_CREDENTIALS_H #include namespace grpc { typedef ::grpc_impl::ChannelCredentials ChannelCredentials; typedef ::grpc_impl::CallCredentials CallCredentials; typedef ::grpc_impl::SslCredentialsOptions SslCredentialsOptions; typedef ::grpc_impl::SecureCallCredentials SecureCallCredentials; typedef ::grpc_impl::SecureChannelCredentials SecureChannelCredentials; typedef ::grpc_impl::MetadataCredentialsPlugin MetadataCredentialsPlugin; static inline std::shared_ptr GoogleDefaultCredentials() { return ::grpc_impl::GoogleDefaultCredentials(); } static inline std::shared_ptr SslCredentials( const SslCredentialsOptions& options) { return ::grpc_impl::SslCredentials(options); } static inline std::shared_ptr GoogleComputeEngineCredentials() { return ::grpc_impl::GoogleComputeEngineCredentials(); } /// Constant for maximum auth token lifetime. constexpr long kMaxAuthTokenLifetimeSecs = ::grpc_impl::kMaxAuthTokenLifetimeSecs; static inline std::shared_ptr ServiceAccountJWTAccessCredentials( const grpc::string& json_key, long token_lifetime_seconds = grpc::kMaxAuthTokenLifetimeSecs) { return ::grpc_impl::ServiceAccountJWTAccessCredentials( json_key, token_lifetime_seconds); } static inline std::shared_ptr GoogleRefreshTokenCredentials(const grpc::string& json_refresh_token) { return ::grpc_impl::GoogleRefreshTokenCredentials(json_refresh_token); } static inline std::shared_ptr AccessTokenCredentials(const grpc::string& access_token) { return ::grpc_impl::AccessTokenCredentials(access_token); } static inline std::shared_ptr GoogleIAMCredentials( const grpc::string& authorization_token, const grpc::string& authority_selector) { return ::grpc_impl::GoogleIAMCredentials(authorization_token, authority_selector); } static inline std::shared_ptr CompositeChannelCredentials( const std::shared_ptr& channel_creds, const std::shared_ptr& call_creds) { return ::grpc_impl::CompositeChannelCredentials(channel_creds, call_creds); } static inline std::shared_ptr CompositeCallCredentials(const std::shared_ptr& creds1, const std::shared_ptr& creds2) { return ::grpc_impl::CompositeCallCredentials(creds1, creds2); } static inline std::shared_ptr InsecureChannelCredentials() { return ::grpc_impl::InsecureChannelCredentials(); } typedef ::grpc_impl::MetadataCredentialsPlugin MetadataCredentialsPlugin; static inline std::shared_ptr MetadataCredentialsFromPlugin( std::unique_ptr plugin) { return ::grpc_impl::MetadataCredentialsFromPlugin(std::move(plugin)); } namespace experimental { typedef ::grpc_impl::experimental::StsCredentialsOptions StsCredentialsOptions; static inline grpc::Status StsCredentialsOptionsFromJson( const grpc::string& json_string, StsCredentialsOptions* options) { return ::grpc_impl::experimental::StsCredentialsOptionsFromJson(json_string, options); } static inline grpc::Status StsCredentialsOptionsFromEnv( StsCredentialsOptions* options) { return grpc_impl::experimental::StsCredentialsOptionsFromEnv(options); } static inline std::shared_ptr StsCredentials( const StsCredentialsOptions& options) { return grpc_impl::experimental::StsCredentials(options); } typedef ::grpc_impl::experimental::AltsCredentialsOptions AltsCredentialsOptions; static inline std::shared_ptr AltsCredentials( const AltsCredentialsOptions& options) { return ::grpc_impl::experimental::AltsCredentials(options); } static inline std::shared_ptr LocalCredentials( grpc_local_connect_type type) { return ::grpc_impl::experimental::LocalCredentials(type); } static inline std::shared_ptr TlsCredentials( const ::grpc_impl::experimental::TlsCredentialsOptions& options) { return ::grpc_impl::experimental::TlsCredentials(options); } } // namespace experimental } // namespace grpc #endif // GRPCPP_SECURITY_CREDENTIALS_H grpc-1.30.2/include/grpcpp/security/credentials_impl.h000066400000000000000000000325301370425124100230060ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_SECURITY_CREDENTIALS_IMPL_H #define GRPCPP_SECURITY_CREDENTIALS_IMPL_H #include #include #include #include #include #include #include #include #include #include #include #include struct grpc_call; namespace grpc_impl { class ChannelCredentials; class CallCredentials; class SecureCallCredentials; class SecureChannelCredentials; std::shared_ptr CreateCustomChannelImpl( const grpc::string& target, const std::shared_ptr& creds, const ChannelArguments& args); namespace experimental { std::shared_ptr CreateCustomChannelWithInterceptors( const grpc::string& target, const std::shared_ptr& creds, const ChannelArguments& args, std::vector< std::unique_ptr> interceptor_creators); } /// A channel credentials object encapsulates all the state needed by a client /// to authenticate with a server for a given channel. /// It can make various assertions, e.g., about the client’s identity, role /// for all the calls on that channel. /// /// \see https://grpc.io/docs/guides/auth.html class ChannelCredentials : private grpc::GrpcLibraryCodegen { public: ChannelCredentials(); ~ChannelCredentials(); protected: friend std::shared_ptr CompositeChannelCredentials( const std::shared_ptr& channel_creds, const std::shared_ptr& call_creds); virtual SecureChannelCredentials* AsSecureCredentials() = 0; private: friend std::shared_ptr CreateCustomChannelImpl( const grpc::string& target, const std::shared_ptr& creds, const ChannelArguments& args); friend std::shared_ptr grpc_impl::experimental::CreateCustomChannelWithInterceptors( const grpc::string& target, const std::shared_ptr& creds, const ChannelArguments& args, std::vector> interceptor_creators); virtual std::shared_ptr CreateChannelImpl( const grpc::string& target, const ChannelArguments& args) = 0; // This function should have been a pure virtual function, but it is // implemented as a virtual function so that it does not break API. virtual std::shared_ptr CreateChannelWithInterceptors( const grpc::string& /*target*/, const ChannelArguments& /*args*/, std::vector> /*interceptor_creators*/) { return nullptr; } }; /// A call credentials object encapsulates the state needed by a client to /// authenticate with a server for a given call on a channel. /// /// \see https://grpc.io/docs/guides/auth.html class CallCredentials : private grpc::GrpcLibraryCodegen { public: CallCredentials(); ~CallCredentials(); /// Apply this instance's credentials to \a call. virtual bool ApplyToCall(grpc_call* call) = 0; virtual grpc::string DebugString() { return "CallCredentials did not provide a debug string"; } protected: friend std::shared_ptr CompositeChannelCredentials( const std::shared_ptr& channel_creds, const std::shared_ptr& call_creds); friend std::shared_ptr CompositeCallCredentials( const std::shared_ptr& creds1, const std::shared_ptr& creds2); virtual SecureCallCredentials* AsSecureCredentials() = 0; }; /// Options used to build SslCredentials. struct SslCredentialsOptions { /// The buffer containing the PEM encoding of the server root certificates. If /// this parameter is empty, the default roots will be used. The default /// roots can be overridden using the \a GRPC_DEFAULT_SSL_ROOTS_FILE_PATH /// environment variable pointing to a file on the file system containing the /// roots. grpc::string pem_root_certs; /// The buffer containing the PEM encoding of the client's private key. This /// parameter can be empty if the client does not have a private key. grpc::string pem_private_key; /// The buffer containing the PEM encoding of the client's certificate chain. /// This parameter can be empty if the client does not have a certificate /// chain. grpc::string pem_cert_chain; }; // Factories for building different types of Credentials The functions may // return empty shared_ptr when credentials cannot be created. If a // Credentials pointer is returned, it can still be invalid when used to create // a channel. A lame channel will be created then and all rpcs will fail on it. /// Builds credentials with reasonable defaults. /// /// \warning Only use these credentials when connecting to a Google endpoint. /// Using these credentials to connect to any other service may result in this /// service being able to impersonate your client for requests to Google /// services. std::shared_ptr GoogleDefaultCredentials(); /// Builds SSL Credentials given SSL specific options std::shared_ptr SslCredentials( const SslCredentialsOptions& options); /// Builds credentials for use when running in GCE /// /// \warning Only use these credentials when connecting to a Google endpoint. /// Using these credentials to connect to any other service may result in this /// service being able to impersonate your client for requests to Google /// services. std::shared_ptr GoogleComputeEngineCredentials(); constexpr long kMaxAuthTokenLifetimeSecs = 3600; /// Builds Service Account JWT Access credentials. /// json_key is the JSON key string containing the client's private key. /// token_lifetime_seconds is the lifetime in seconds of each Json Web Token /// (JWT) created with this credentials. It should not exceed /// \a kMaxAuthTokenLifetimeSecs or will be cropped to this value. std::shared_ptr ServiceAccountJWTAccessCredentials( const grpc::string& json_key, long token_lifetime_seconds = grpc_impl::kMaxAuthTokenLifetimeSecs); /// Builds refresh token credentials. /// json_refresh_token is the JSON string containing the refresh token along /// with a client_id and client_secret. /// /// \warning Only use these credentials when connecting to a Google endpoint. /// Using these credentials to connect to any other service may result in this /// service being able to impersonate your client for requests to Google /// services. std::shared_ptr GoogleRefreshTokenCredentials( const grpc::string& json_refresh_token); /// Builds access token credentials. /// access_token is an oauth2 access token that was fetched using an out of band /// mechanism. /// /// \warning Only use these credentials when connecting to a Google endpoint. /// Using these credentials to connect to any other service may result in this /// service being able to impersonate your client for requests to Google /// services. std::shared_ptr AccessTokenCredentials( const grpc::string& access_token); /// Builds IAM credentials. /// /// \warning Only use these credentials when connecting to a Google endpoint. /// Using these credentials to connect to any other service may result in this /// service being able to impersonate your client for requests to Google /// services. std::shared_ptr GoogleIAMCredentials( const grpc::string& authorization_token, const grpc::string& authority_selector); /// Combines a channel credentials and a call credentials into a composite /// channel credentials. std::shared_ptr CompositeChannelCredentials( const std::shared_ptr& channel_creds, const std::shared_ptr& call_creds); /// Combines two call credentials objects into a composite call credentials. std::shared_ptr CompositeCallCredentials( const std::shared_ptr& creds1, const std::shared_ptr& creds2); /// Credentials for an unencrypted, unauthenticated channel std::shared_ptr InsecureChannelCredentials(); /// User defined metadata credentials. class MetadataCredentialsPlugin { public: virtual ~MetadataCredentialsPlugin() {} /// If this method returns true, the Process function will be scheduled in /// a different thread from the one processing the call. virtual bool IsBlocking() const { return true; } /// Type of credentials this plugin is implementing. virtual const char* GetType() const { return ""; } /// Gets the auth metatada produced by this plugin. /// The fully qualified method name is: /// service_url + "/" + method_name. /// The channel_auth_context contains (among other things), the identity of /// the server. virtual grpc::Status GetMetadata( grpc::string_ref service_url, grpc::string_ref method_name, const grpc::AuthContext& channel_auth_context, std::multimap* metadata) = 0; virtual grpc::string DebugString() { return "MetadataCredentialsPlugin did not provide a debug string"; } }; std::shared_ptr MetadataCredentialsFromPlugin( std::unique_ptr plugin); namespace experimental { /// Options for creating STS Oauth Token Exchange credentials following the IETF /// draft https://tools.ietf.org/html/draft-ietf-oauth-token-exchange-16. /// Optional fields may be set to empty string. It is the responsibility of the /// caller to ensure that the subject and actor tokens are refreshed on disk at /// the specified paths. struct StsCredentialsOptions { grpc::string token_exchange_service_uri; // Required. grpc::string resource; // Optional. grpc::string audience; // Optional. grpc::string scope; // Optional. grpc::string requested_token_type; // Optional. grpc::string subject_token_path; // Required. grpc::string subject_token_type; // Required. grpc::string actor_token_path; // Optional. grpc::string actor_token_type; // Optional. }; /// Creates STS Options from a JSON string. The JSON schema is as follows: /// { /// "title": "STS Credentials Config", /// "type": "object", /// "required": ["token_exchange_service_uri", "subject_token_path", /// "subject_token_type"], /// "properties": { /// "token_exchange_service_uri": { /// "type": "string" /// }, /// "resource": { /// "type": "string" /// }, /// "audience": { /// "type": "string" /// }, /// "scope": { /// "type": "string" /// }, /// "requested_token_type": { /// "type": "string" /// }, /// "subject_token_path": { /// "type": "string" /// }, /// "subject_token_type": { /// "type": "string" /// }, /// "actor_token_path" : { /// "type": "string" /// }, /// "actor_token_type": { /// "type": "string" /// } /// } /// } grpc::Status StsCredentialsOptionsFromJson(const grpc::string& json_string, StsCredentialsOptions* options); /// Creates STS credentials options from the $STS_CREDENTIALS environment /// variable. This environment variable points to the path of a JSON file /// comforming to the schema described above. grpc::Status StsCredentialsOptionsFromEnv(StsCredentialsOptions* options); std::shared_ptr StsCredentials( const StsCredentialsOptions& options); std::shared_ptr MetadataCredentialsFromPlugin( std::unique_ptr plugin, grpc_security_level min_security_level); /// Options used to build AltsCredentials. struct AltsCredentialsOptions { /// service accounts of target endpoint that will be acceptable /// by the client. If service accounts are provided and none of them matches /// that of the server, authentication will fail. std::vector target_service_accounts; }; /// Builds ALTS Credentials given ALTS specific options std::shared_ptr AltsCredentials( const AltsCredentialsOptions& options); /// Builds Local Credentials. std::shared_ptr LocalCredentials( grpc_local_connect_type type); /// Builds TLS Credentials given TLS options. std::shared_ptr TlsCredentials( const TlsCredentialsOptions& options); } // namespace experimental } // namespace grpc_impl #endif // GRPCPP_SECURITY_CREDENTIALS_IMPL_H grpc-1.30.2/include/grpcpp/security/cronet_credentials.h000066400000000000000000000017461370425124100233440ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_SECURITY_CRONET_CREDENTIALS_H #define GRPCPP_SECURITY_CRONET_CREDENTIALS_H #include namespace grpc { static inline std::shared_ptr CronetChannelCredentials(void* engine) { return ::grpc_impl::CronetChannelCredentials(engine); } } // namespace grpc #endif // GRPCPP_SECURITY_CRONET_CREDENTIALS_H grpc-1.30.2/include/grpcpp/security/cronet_credentials_impl.h000066400000000000000000000017171370425124100243630ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_SECURITY_CRONET_CREDENTIALS_IMPL_H #define GRPCPP_SECURITY_CRONET_CREDENTIALS_IMPL_H #include namespace grpc_impl { class ChannelCredentials; /// Credentials for a channel using Cronet. std::shared_ptr CronetChannelCredentials(void* engine); } // namespace grpc_impl #endif // GRPCPP_SECURITY_CRONET_CREDENTIALS_IMPL_H grpc-1.30.2/include/grpcpp/security/server_credentials.h000066400000000000000000000056711370425124100233610ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_SECURITY_SERVER_CREDENTIALS_H #define GRPCPP_SECURITY_SERVER_CREDENTIALS_H #include namespace grpc_impl { class Server; } // namespace grpc_impl namespace grpc { typedef ::grpc_impl::ServerCredentials ServerCredentials; /// Options to create ServerCredentials with SSL struct SslServerCredentialsOptions { /// \warning Deprecated SslServerCredentialsOptions() : force_client_auth(false), client_certificate_request(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE) {} SslServerCredentialsOptions( grpc_ssl_client_certificate_request_type request_type) : force_client_auth(false), client_certificate_request(request_type) {} struct PemKeyCertPair { grpc::string private_key; grpc::string cert_chain; }; grpc::string pem_root_certs; std::vector pem_key_cert_pairs; /// \warning Deprecated bool force_client_auth; /// If both \a force_client_auth and \a client_certificate_request /// fields are set, \a force_client_auth takes effect, i.e. /// \a REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY /// will be enforced. grpc_ssl_client_certificate_request_type client_certificate_request; }; static inline std::shared_ptr SslServerCredentials( const SslServerCredentialsOptions& options) { return ::grpc_impl::SslServerCredentials(options); } static inline std::shared_ptr InsecureServerCredentials() { return ::grpc_impl::InsecureServerCredentials(); } namespace experimental { typedef ::grpc_impl::experimental::AltsServerCredentialsOptions AltsServerCredentialsOptions; static inline std::shared_ptr AltsServerCredentials( const AltsServerCredentialsOptions& options) { return ::grpc_impl::experimental::AltsServerCredentials(options); } static inline std::shared_ptr LocalServerCredentials( grpc_local_connect_type type) { return ::grpc_impl::experimental::LocalServerCredentials(type); } /// Builds TLS ServerCredentials given TLS options. static inline std::shared_ptr TlsServerCredentials( const ::grpc_impl::experimental::TlsCredentialsOptions& options) { return ::grpc_impl::experimental::TlsServerCredentials(options); } } // namespace experimental } // namespace grpc #endif // GRPCPP_SECURITY_SERVER_CREDENTIALS_H grpc-1.30.2/include/grpcpp/security/server_credentials_impl.h000066400000000000000000000054301370425124100243730ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_SECURITY_SERVER_CREDENTIALS_IMPL_H #define GRPCPP_SECURITY_SERVER_CREDENTIALS_IMPL_H #include #include #include #include #include #include struct grpc_server; namespace grpc { struct SslServerCredentialsOptions; } // namespace grpc namespace grpc_impl { class Server; /// Wrapper around \a grpc_server_credentials, a way to authenticate a server. class ServerCredentials { public: virtual ~ServerCredentials(); /// This method is not thread-safe and has to be called before the server is /// started. The last call to this function wins. virtual void SetAuthMetadataProcessor( const std::shared_ptr& processor) = 0; private: friend class ::grpc_impl::Server; /// Tries to bind \a server to the given \a addr (eg, localhost:1234, /// 192.168.1.1:31416, [::1]:27182, etc.) /// /// \return bound port number on success, 0 on failure. // TODO(dgq): the "port" part seems to be a misnomer. virtual int AddPortToServer(const grpc::string& addr, grpc_server* server) = 0; }; /// Builds SSL ServerCredentials given SSL specific options std::shared_ptr SslServerCredentials( const grpc::SslServerCredentialsOptions& options); /// Builds insecure server credentials. std::shared_ptr InsecureServerCredentials(); namespace experimental { /// Options to create ServerCredentials with ALTS struct AltsServerCredentialsOptions { /// Add fields if needed. }; /// Builds ALTS ServerCredentials given ALTS specific options std::shared_ptr AltsServerCredentials( const AltsServerCredentialsOptions& options); /// Builds Local ServerCredentials. std::shared_ptr LocalServerCredentials( grpc_local_connect_type type); /// Builds TLS ServerCredentials given TLS options. std::shared_ptr TlsServerCredentials( const TlsCredentialsOptions& options); } // namespace experimental } // namespace grpc_impl #endif // GRPCPP_SECURITY_SERVER_CREDENTIALS_IMPL_H grpc-1.30.2/include/grpcpp/security/tls_credentials_options.h000066400000000000000000000331071370425124100244230ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_SECURITY_TLS_CREDENTIALS_OPTIONS_H #define GRPCPP_SECURITY_TLS_CREDENTIALS_OPTIONS_H #include #include #include #include #include #include typedef struct grpc_tls_credential_reload_arg grpc_tls_credential_reload_arg; typedef struct grpc_tls_credential_reload_config grpc_tls_credential_reload_config; typedef struct grpc_tls_server_authorization_check_arg grpc_tls_server_authorization_check_arg; typedef struct grpc_tls_server_authorization_check_config grpc_tls_server_authorization_check_config; typedef struct grpc_tls_credentials_options grpc_tls_credentials_options; namespace grpc_impl { namespace experimental { /** TLS key materials config, wrapper for grpc_tls_key_materials_config. It is * used for experimental purposes for now and subject to change. **/ class TlsKeyMaterialsConfig { public: struct PemKeyCertPair { grpc::string private_key; grpc::string cert_chain; }; /** Getters for member fields. **/ const grpc::string pem_root_certs() const { return pem_root_certs_; } const std::vector& pem_key_cert_pair_list() const { return pem_key_cert_pair_list_; } int version() const { return version_; } /** Setter for key materials that will be called by the user. Ownership of the * arguments will not be transferred. **/ void set_pem_root_certs(const grpc::string& pem_root_certs); void add_pem_key_cert_pair(const PemKeyCertPair& pem_key_cert_pair); void set_key_materials( const grpc::string& pem_root_certs, const std::vector& pem_key_cert_pair_list); void set_version(int version) { version_ = version; }; private: int version_ = 0; std::vector pem_key_cert_pair_list_; grpc::string pem_root_certs_; }; /** TLS credential reload arguments, wraps grpc_tls_credential_reload_arg. It is * used for experimental purposes for now and it is subject to change. * * The credential reload arg contains all the info necessary to schedule/cancel * a credential reload request. The callback function must be called after * finishing the schedule operation. See the description of the * grpc_tls_credential_reload_arg struct in grpc_security.h for more details. * **/ class TlsCredentialReloadArg { public: /** TlsCredentialReloadArg does not take ownership of the C arg that is passed * to the constructor. One must remember to free any memory allocated to the * C arg after using the setter functions below. **/ TlsCredentialReloadArg(grpc_tls_credential_reload_arg* arg); ~TlsCredentialReloadArg(); /** Getters for member fields. **/ void* cb_user_data() const; bool is_pem_key_cert_pair_list_empty() const; grpc_ssl_certificate_config_reload_status status() const; grpc::string error_details() const; /** Setters for member fields. Ownership of the arguments will not be * transferred. **/ void set_cb_user_data(void* cb_user_data); void set_pem_root_certs(const grpc::string& pem_root_certs); void add_pem_key_cert_pair( const TlsKeyMaterialsConfig::PemKeyCertPair& pem_key_cert_pair); void set_key_materials(const grpc::string& pem_root_certs, std::vector pem_key_cert_pair_list); void set_key_materials_config( const std::shared_ptr& key_materials_config); void set_status(grpc_ssl_certificate_config_reload_status status); void set_error_details(const grpc::string& error_details); /** Calls the C arg's callback function. **/ void OnCredentialReloadDoneCallback(); private: grpc_tls_credential_reload_arg* c_arg_; }; /** An interface that the application derives and uses to instantiate a * TlsCredentialReloadConfig instance. Refer to the definition of the * grpc_tls_credential_reload_config in grpc_tls_credentials_options.h for more * details on the expectations of the member functions of the interface. **/ struct TlsCredentialReloadInterface { virtual ~TlsCredentialReloadInterface() = default; /** A callback that invokes the credential reload. **/ virtual int Schedule(TlsCredentialReloadArg* arg) = 0; /** A callback that cancels a credential reload request. **/ virtual void Cancel(TlsCredentialReloadArg* /* arg */) {} }; /** TLS credential reloag config, wraps grpc_tls_credential_reload_config. It is * used for experimental purposes for now and it is subject to change. **/ class TlsCredentialReloadConfig { public: TlsCredentialReloadConfig(std::shared_ptr credential_reload_interface); ~TlsCredentialReloadConfig(); int Schedule(TlsCredentialReloadArg* arg) const { if (credential_reload_interface_ == nullptr) { gpr_log(GPR_ERROR, "credential reload interface is nullptr"); if (arg != nullptr) { arg->set_status(GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_FAIL); arg->set_error_details( "the interface of the credential reload config is nullptr"); } return 1; } return credential_reload_interface_->Schedule(arg); } void Cancel(TlsCredentialReloadArg* arg) const { if (credential_reload_interface_ == nullptr) { gpr_log(GPR_ERROR, "credential reload interface is nullptr"); if (arg != nullptr) { arg->set_status(GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_FAIL); arg->set_error_details( "the interface of the credential reload config is nullptr"); } return; } credential_reload_interface_->Cancel(arg); } /** Returns a C struct for the credential reload config. **/ grpc_tls_credential_reload_config* c_config() const { return c_config_; } private: grpc_tls_credential_reload_config* c_config_; std::shared_ptr credential_reload_interface_; }; /** TLS server authorization check arguments, wraps * grpc_tls_server_authorization_check_arg. It is used for experimental * purposes for now and it is subject to change. * * The server authorization check arg contains all the info necessary to * schedule/cancel a server authorization check request. The callback function * must be called after finishing the schedule operation. See the description * of the grpc_tls_server_authorization_check_arg struct in grpc_security.h for * more details. **/ class TlsServerAuthorizationCheckArg { public: /** TlsServerAuthorizationCheckArg does not take ownership of the C arg passed * to the constructor. One must remember to free any memory allocated to the * C arg after using the setter functions below. **/ TlsServerAuthorizationCheckArg(grpc_tls_server_authorization_check_arg* arg); ~TlsServerAuthorizationCheckArg(); /** Getters for member fields. **/ void* cb_user_data() const; int success() const; grpc::string target_name() const; grpc::string peer_cert() const; grpc::string peer_cert_full_chain() const; grpc_status_code status() const; grpc::string error_details() const; /** Setters for member fields. **/ void set_cb_user_data(void* cb_user_data); void set_success(int success); void set_target_name(const grpc::string& target_name); void set_peer_cert(const grpc::string& peer_cert); void set_peer_cert_full_chain(const grpc::string& peer_cert_full_chain); void set_status(grpc_status_code status); void set_error_details(const grpc::string& error_details); /** Calls the C arg's callback function. **/ void OnServerAuthorizationCheckDoneCallback(); private: grpc_tls_server_authorization_check_arg* c_arg_; }; /** An interface that the application derives and uses to instantiate a * TlsServerAuthorizationCheckConfig instance. Refer to the definition of the * grpc_tls_server_authorization_check_config in grpc_tls_credentials_options.h * for more details on the expectations of the member functions of the * interface. * **/ struct TlsServerAuthorizationCheckInterface { virtual ~TlsServerAuthorizationCheckInterface() = default; /** A callback that invokes the server authorization check. **/ virtual int Schedule(TlsServerAuthorizationCheckArg* arg) = 0; /** A callback that cancels a server authorization check request. **/ virtual void Cancel(TlsServerAuthorizationCheckArg* /* arg */) {} }; /** TLS server authorization check config, wraps * grps_tls_server_authorization_check_config. It is used for experimental * purposes for now and it is subject to change. **/ class TlsServerAuthorizationCheckConfig { public: TlsServerAuthorizationCheckConfig( std::shared_ptr server_authorization_check_interface); ~TlsServerAuthorizationCheckConfig(); int Schedule(TlsServerAuthorizationCheckArg* arg) const { if (server_authorization_check_interface_ == nullptr) { gpr_log(GPR_ERROR, "server authorization check interface is nullptr"); if (arg != nullptr) { arg->set_status(GRPC_STATUS_NOT_FOUND); arg->set_error_details( "the interface of the server authorization check config is " "nullptr"); } return 1; } return server_authorization_check_interface_->Schedule(arg); } void Cancel(TlsServerAuthorizationCheckArg* arg) const { if (server_authorization_check_interface_ == nullptr) { gpr_log(GPR_ERROR, "server authorization check interface is nullptr"); if (arg != nullptr) { arg->set_status(GRPC_STATUS_NOT_FOUND); arg->set_error_details( "the interface of the server authorization check config is " "nullptr"); } return; } server_authorization_check_interface_->Cancel(arg); } /** Returns C struct for the server authorization check config. **/ grpc_tls_server_authorization_check_config* c_config() const { return c_config_; } private: grpc_tls_server_authorization_check_config* c_config_; std::shared_ptr server_authorization_check_interface_; }; /** TLS credentials options, wrapper for grpc_tls_credentials_options. It is * used for experimental purposes for now and it is subject to change. See the * description of the grpc_tls_credentials_options struct in grpc_security.h for * more details. **/ class TlsCredentialsOptions { public: // Constructor for client. explicit TlsCredentialsOptions( grpc_tls_server_verification_option server_verification_option, std::shared_ptr key_materials_config, std::shared_ptr credential_reload_config, std::shared_ptr server_authorization_check_config); // Constructor for server. explicit TlsCredentialsOptions( grpc_ssl_client_certificate_request_type cert_request_type, std::shared_ptr key_materials_config, std::shared_ptr credential_reload_config); // This constructor will be deprecated. TlsCredentialsOptions( grpc_ssl_client_certificate_request_type cert_request_type, grpc_tls_server_verification_option server_verification_option, std::shared_ptr key_materials_config, std::shared_ptr credential_reload_config, std::shared_ptr server_authorization_check_config); ~TlsCredentialsOptions(); /** Getters for member fields. **/ grpc_ssl_client_certificate_request_type cert_request_type() const { return cert_request_type_; } grpc_tls_server_verification_option server_verification_option() const { return server_verification_option_; } std::shared_ptr key_materials_config() const { return key_materials_config_; } std::shared_ptr credential_reload_config() const { return credential_reload_config_; } std::shared_ptr server_authorization_check_config() const { return server_authorization_check_config_; } grpc_tls_credentials_options* c_credentials_options() const { return c_credentials_options_; } private: /** The cert_request_type_ flag is only relevant when the * TlsCredentialsOptions are used to instantiate server credentials; the flag * goes unused when creating channel credentials, and the user can set it to * GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE. **/ grpc_ssl_client_certificate_request_type cert_request_type_; /** The server_verification_option_ flag is only relevant when the * TlsCredentialsOptions are used to instantiate client credentials; **/ grpc_tls_server_verification_option server_verification_option_; std::shared_ptr key_materials_config_; std::shared_ptr credential_reload_config_; std::shared_ptr server_authorization_check_config_; grpc_tls_credentials_options* c_credentials_options_; }; } // namespace experimental } // namespace grpc_impl #endif // GRPCPP_SECURITY_TLS_CREDENTIALS_OPTIONS_H grpc-1.30.2/include/grpcpp/server.h000066400000000000000000000014261370425124100171270ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_SERVER_H #define GRPCPP_SERVER_H #include namespace grpc { typedef ::grpc_impl::Server Server; } // namespace grpc #endif // GRPCPP_SERVER_H grpc-1.30.2/include/grpcpp/server_builder.h000066400000000000000000000015041370425124100206320ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_SERVER_BUILDER_H #define GRPCPP_SERVER_BUILDER_H #include namespace grpc { typedef ::grpc_impl::ServerBuilder ServerBuilder; } // namespace grpc #endif // GRPCPP_SERVER_BUILDER_H grpc-1.30.2/include/grpcpp/server_builder_impl.h000066400000000000000000000353631370425124100216650ustar00rootroot00000000000000/* * * Copyright 2015-2016 gRPC 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 * * 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. * */ #ifndef GRPCPP_SERVER_BUILDER_IMPL_H #define GRPCPP_SERVER_BUILDER_IMPL_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include struct grpc_resource_quota; namespace grpc_impl { class CompletionQueue; class ResourceQuota; class Server; class ServerCompletionQueue; class ServerCredentials; } // namespace grpc_impl namespace grpc { class AsyncGenericService; class Service; namespace testing { class ServerBuilderPluginTest; } // namespace testing namespace internal { class ExternalConnectionAcceptorImpl; } // namespace internal #ifndef GRPC_CALLBACK_API_NONEXPERIMENTAL namespace experimental { #endif class CallbackGenericService; #ifndef GRPC_CALLBACK_API_NONEXPERIMENTAL } // namespace experimental #endif namespace experimental { // EXPERIMENTAL API: // Interface for a grpc server to build transports with connections created out // of band. // See ServerBuilder's AddExternalConnectionAcceptor API. class ExternalConnectionAcceptor { public: struct NewConnectionParameters { int listener_fd = -1; int fd = -1; ByteBuffer read_buffer; // data intended for the grpc server }; virtual ~ExternalConnectionAcceptor() {} // If called before grpc::Server is started or after it is shut down, the new // connection will be closed. virtual void HandleNewConnection(NewConnectionParameters* p) = 0; }; } // namespace experimental } // namespace grpc namespace grpc_impl { /// A builder class for the creation and startup of \a grpc::Server instances. class ServerBuilder { public: ServerBuilder(); virtual ~ServerBuilder(); ////////////////////////////////////////////////////////////////////////////// // Primary API's /// Return a running server which is ready for processing calls. /// Before calling, one typically needs to ensure that: /// 1. a service is registered - so that the server knows what to serve /// (via RegisterService, or RegisterAsyncGenericService) /// 2. a listening port has been added - so the server knows where to receive /// traffic (via AddListeningPort) /// 3. [for async api only] completion queues have been added via /// AddCompletionQueue /// /// Will return a nullptr on errors. virtual std::unique_ptr BuildAndStart(); /// Register a service. This call does not take ownership of the service. /// The service must exist for the lifetime of the \a Server instance returned /// by \a BuildAndStart(). /// Matches requests with any :authority ServerBuilder& RegisterService(grpc::Service* service); /// Enlists an endpoint \a addr (port with an optional IP address) to /// bind the \a grpc::Server object to be created to. /// /// It can be invoked multiple times. /// /// \param addr_uri The address to try to bind to the server in URI form. If /// the scheme name is omitted, "dns:///" is assumed. To bind to any address, /// please use IPv6 any, i.e., [::]:, which also accepts IPv4 /// connections. Valid values include dns:///localhost:1234, / /// 192.168.1.1:31416, dns:///[::1]:27182, etc.). /// \param creds The credentials associated with the server. /// \param selected_port[out] If not `nullptr`, gets populated with the port /// number bound to the \a grpc::Server for the corresponding endpoint after /// it is successfully bound by BuildAndStart(), 0 otherwise. AddListeningPort /// does not modify this pointer. ServerBuilder& AddListeningPort( const grpc::string& addr_uri, std::shared_ptr creds, int* selected_port = nullptr); /// Add a completion queue for handling asynchronous services. /// /// Best performance is typically obtained by using one thread per polling /// completion queue. /// /// Caller is required to shutdown the server prior to shutting down the /// returned completion queue. Caller is also required to drain the /// completion queue after shutting it down. A typical usage scenario: /// /// // While building the server: /// ServerBuilder builder; /// ... /// cq_ = builder.AddCompletionQueue(); /// server_ = builder.BuildAndStart(); /// /// // While shutting down the server; /// server_->Shutdown(); /// cq_->Shutdown(); // Always *after* the associated server's Shutdown()! /// // Drain the cq_ that was created /// void* ignored_tag; /// bool ignored_ok; /// while (cq_->Next(&ignored_tag, &ignored_ok)) { } /// /// \param is_frequently_polled This is an optional parameter to inform gRPC /// library about whether this completion queue would be frequently polled /// (i.e. by calling \a Next() or \a AsyncNext()). The default value is /// 'true' and is the recommended setting. Setting this to 'false' (i.e. /// not polling the completion queue frequently) will have a significantly /// negative performance impact and hence should not be used in production /// use cases. std::unique_ptr AddCompletionQueue( bool is_frequently_polled = true); ////////////////////////////////////////////////////////////////////////////// // Less commonly used RegisterService variants /// Register a service. This call does not take ownership of the service. /// The service must exist for the lifetime of the \a Server instance /// returned by \a BuildAndStart(). Only matches requests with :authority \a /// host ServerBuilder& RegisterService(const grpc::string& host, grpc::Service* service); /// Register a generic service. /// Matches requests with any :authority /// This is mostly useful for writing generic gRPC Proxies where the exact /// serialization format is unknown ServerBuilder& RegisterAsyncGenericService( grpc::AsyncGenericService* service); ////////////////////////////////////////////////////////////////////////////// // Fine control knobs /// Set max receive message size in bytes. /// The default is GRPC_DEFAULT_MAX_RECV_MESSAGE_LENGTH. ServerBuilder& SetMaxReceiveMessageSize(int max_receive_message_size) { max_receive_message_size_ = max_receive_message_size; return *this; } /// Set max send message size in bytes. /// The default is GRPC_DEFAULT_MAX_SEND_MESSAGE_LENGTH. ServerBuilder& SetMaxSendMessageSize(int max_send_message_size) { max_send_message_size_ = max_send_message_size; return *this; } /// \deprecated For backward compatibility. ServerBuilder& SetMaxMessageSize(int max_message_size) { return SetMaxReceiveMessageSize(max_message_size); } /// Set the support status for compression algorithms. All algorithms are /// enabled by default. /// /// Incoming calls compressed with an unsupported algorithm will fail with /// \a GRPC_STATUS_UNIMPLEMENTED. ServerBuilder& SetCompressionAlgorithmSupportStatus( grpc_compression_algorithm algorithm, bool enabled); /// The default compression level to use for all channel calls in the /// absence of a call-specific level. ServerBuilder& SetDefaultCompressionLevel(grpc_compression_level level); /// The default compression algorithm to use for all channel calls in the /// absence of a call-specific level. Note that it overrides any compression /// level set by \a SetDefaultCompressionLevel. ServerBuilder& SetDefaultCompressionAlgorithm( grpc_compression_algorithm algorithm); /// Set the attached buffer pool for this server ServerBuilder& SetResourceQuota( const grpc_impl::ResourceQuota& resource_quota); ServerBuilder& SetOption(std::unique_ptr option); /// Options for synchronous servers. enum SyncServerOption { NUM_CQS, ///< Number of completion queues. MIN_POLLERS, ///< Minimum number of polling threads. MAX_POLLERS, ///< Maximum number of polling threads. CQ_TIMEOUT_MSEC ///< Completion queue timeout in milliseconds. }; /// Only useful if this is a Synchronous server. ServerBuilder& SetSyncServerOption(SyncServerOption option, int value); /// Add a channel argument (an escape hatch to tuning core library parameters /// directly) template ServerBuilder& AddChannelArgument(const grpc::string& arg, const T& value) { return SetOption(grpc::MakeChannelArgumentOption(arg, value)); } /// For internal use only: Register a ServerBuilderPlugin factory function. static void InternalAddPluginFactory( std::unique_ptr (*CreatePlugin)()); /// Enable a server workaround. Do not use unless you know what the workaround /// does. For explanation and detailed descriptions of workarounds, see /// doc/workarounds.md. ServerBuilder& EnableWorkaround(grpc_workaround_list id); /// NOTE: class experimental_type is not part of the public API of this class. /// TODO(yashykt): Integrate into public API when this is no longer /// experimental. class experimental_type { public: explicit experimental_type(grpc_impl::ServerBuilder* builder) : builder_(builder) {} void SetInterceptorCreators( std::vector> interceptor_creators) { builder_->interceptor_creators_ = std::move(interceptor_creators); } #ifndef GRPC_CALLBACK_API_NONEXPERIMENTAL /// Register a generic service that uses the callback API. /// Matches requests with any :authority /// This is mostly useful for writing generic gRPC Proxies where the exact /// serialization format is unknown ServerBuilder& RegisterCallbackGenericService( grpc::experimental::CallbackGenericService* service); #endif enum class ExternalConnectionType { FROM_FD = 0 // in the form of a file descriptor }; /// Register an acceptor to handle the externally accepted connection in /// grpc server. The returned acceptor can be used to pass the connection /// to grpc server, where a channel will be created with the provided /// server credentials. std::unique_ptr AddExternalConnectionAcceptor(ExternalConnectionType type, std::shared_ptr creds); private: ServerBuilder* builder_; }; #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL /// Register a generic service that uses the callback API. /// Matches requests with any :authority /// This is mostly useful for writing generic gRPC Proxies where the exact /// serialization format is unknown ServerBuilder& RegisterCallbackGenericService( grpc::CallbackGenericService* service); #endif /// NOTE: The function experimental() is not stable public API. It is a view /// to the experimental components of this class. It may be changed or removed /// at any time. experimental_type experimental() { return experimental_type(this); } protected: /// Experimental, to be deprecated struct Port { grpc::string addr; std::shared_ptr creds; int* selected_port; }; /// Experimental, to be deprecated typedef std::unique_ptr HostString; struct NamedService { explicit NamedService(grpc::Service* s) : service(s) {} NamedService(const grpc::string& h, grpc::Service* s) : host(new grpc::string(h)), service(s) {} HostString host; grpc::Service* service; }; /// Experimental, to be deprecated std::vector ports() { return ports_; } /// Experimental, to be deprecated std::vector services() { std::vector service_refs; for (auto& ptr : services_) { service_refs.push_back(ptr.get()); } return service_refs; } /// Experimental, to be deprecated std::vector options() { std::vector option_refs; for (auto& ptr : options_) { option_refs.push_back(ptr.get()); } return option_refs; } private: friend class ::grpc::testing::ServerBuilderPluginTest; struct SyncServerSettings { SyncServerSettings() : num_cqs(1), min_pollers(1), max_pollers(2), cq_timeout_msec(10000) {} /// Number of server completion queues to create to listen to incoming RPCs. int num_cqs; /// Minimum number of threads per completion queue that should be listening /// to incoming RPCs. int min_pollers; /// Maximum number of threads per completion queue that can be listening to /// incoming RPCs. int max_pollers; /// The timeout for server completion queue's AsyncNext call. int cq_timeout_msec; }; int max_receive_message_size_; int max_send_message_size_; std::vector> options_; std::vector> services_; std::vector ports_; SyncServerSettings sync_server_settings_; /// List of completion queues added via \a AddCompletionQueue method. std::vector cqs_; std::shared_ptr creds_; std::vector> plugins_; grpc_resource_quota* resource_quota_; grpc::AsyncGenericService* generic_service_{nullptr}; #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL grpc::CallbackGenericService* callback_generic_service_{nullptr}; #else grpc::experimental::CallbackGenericService* callback_generic_service_{ nullptr}; #endif struct { bool is_set; grpc_compression_level level; } maybe_default_compression_level_; struct { bool is_set; grpc_compression_algorithm algorithm; } maybe_default_compression_algorithm_; uint32_t enabled_compression_algorithms_bitset_; std::vector< std::unique_ptr> interceptor_creators_; std::vector> acceptors_; }; } // namespace grpc_impl #endif // GRPCPP_SERVER_BUILDER_IMPL_H grpc-1.30.2/include/grpcpp/server_context.h000066400000000000000000000013611370425124100206710ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_SERVER_CONTEXT_H #define GRPCPP_SERVER_CONTEXT_H #include #endif // GRPCPP_SERVER_CONTEXT_H grpc-1.30.2/include/grpcpp/server_impl.h000066400000000000000000000350721370425124100201540ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_SERVER_IMPL_H #define GRPCPP_SERVER_IMPL_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include struct grpc_server; namespace grpc { class AsyncGenericService; namespace internal { class ExternalConnectionAcceptorImpl; } // namespace internal } // namespace grpc namespace grpc_impl { class HealthCheckServiceInterface; class ServerContext; class ServerInitializer; /// Represents a gRPC server. /// /// Use a \a grpc::ServerBuilder to create, configure, and start /// \a Server instances. class Server : public grpc::ServerInterface, private grpc::GrpcLibraryCodegen { public: ~Server(); /// Block until the server shuts down. /// /// \warning The server must be either shutting down or some other thread must /// call \a Shutdown for this function to ever return. void Wait() override; /// Global callbacks are a set of hooks that are called when server /// events occur. \a SetGlobalCallbacks method is used to register /// the hooks with gRPC. Note that /// the \a GlobalCallbacks instance will be shared among all /// \a Server instances in an application and can be set exactly /// once per application. class GlobalCallbacks { public: virtual ~GlobalCallbacks() {} /// Called before server is created. virtual void UpdateArguments(ChannelArguments* /*args*/) {} /// Called before application callback for each synchronous server request virtual void PreSynchronousRequest(grpc_impl::ServerContext* context) = 0; /// Called after application callback for each synchronous server request virtual void PostSynchronousRequest(grpc_impl::ServerContext* context) = 0; /// Called before server is started. virtual void PreServerStart(Server* /*server*/) {} /// Called after a server port is added. virtual void AddPort(Server* /*server*/, const grpc::string& /*addr*/, grpc::ServerCredentials* /*creds*/, int /*port*/) {} }; /// Set the global callback object. Can only be called once per application. /// Does not take ownership of callbacks, and expects the pointed to object /// to be alive until all server objects in the process have been destroyed. /// The same \a GlobalCallbacks object will be used throughout the /// application and is shared among all \a Server objects. static void SetGlobalCallbacks(GlobalCallbacks* callbacks); /// Returns a \em raw pointer to the underlying \a grpc_server instance. /// EXPERIMENTAL: for internal/test use only grpc_server* c_server(); /// Returns the health check service. grpc::HealthCheckServiceInterface* GetHealthCheckService() const { return health_check_service_.get(); } /// Establish a channel for in-process communication std::shared_ptr InProcessChannel(const ChannelArguments& args); /// NOTE: class experimental_type is not part of the public API of this class. /// TODO(yashykt): Integrate into public API when this is no longer /// experimental. class experimental_type { public: explicit experimental_type(Server* server) : server_(server) {} /// Establish a channel for in-process communication with client /// interceptors std::shared_ptr InProcessChannelWithInterceptors( const ChannelArguments& args, std::vector> interceptor_creators); private: Server* server_; }; /// NOTE: The function experimental() is not stable public API. It is a view /// to the experimental components of this class. It may be changed or removed /// at any time. experimental_type experimental() { return experimental_type(this); } protected: /// Register a service. This call does not take ownership of the service. /// The service must exist for the lifetime of the Server instance. bool RegisterService(const grpc::string* host, grpc::Service* service) override; /// Try binding the server to the given \a addr endpoint /// (port, and optionally including IP address to bind to). /// /// It can be invoked multiple times. Should be used before /// starting the server. /// /// \param addr The address to try to bind to the server (eg, localhost:1234, /// 192.168.1.1:31416, [::1]:27182, etc.). /// \param creds The credentials associated with the server. /// /// \return bound port number on success, 0 on failure. /// /// \warning It is an error to call this method on an already started server. int AddListeningPort(const grpc::string& addr, grpc::ServerCredentials* creds) override; /// NOTE: This is *NOT* a public API. The server constructors are supposed to /// be used by \a ServerBuilder class only. The constructor will be made /// 'private' very soon. /// /// Server constructors. To be used by \a ServerBuilder only. /// /// \param args The channel args /// /// \param sync_server_cqs The completion queues to use if the server is a /// synchronous server (or a hybrid server). The server polls for new RPCs on /// these queues /// /// \param min_pollers The minimum number of polling threads per server /// completion queue (in param sync_server_cqs) to use for listening to /// incoming requests (used only in case of sync server) /// /// \param max_pollers The maximum number of polling threads per server /// completion queue (in param sync_server_cqs) to use for listening to /// incoming requests (used only in case of sync server) /// /// \param sync_cq_timeout_msec The timeout to use when calling AsyncNext() on /// server completion queues passed via sync_server_cqs param. Server(ChannelArguments* args, std::shared_ptr>> sync_server_cqs, int min_pollers, int max_pollers, int sync_cq_timeout_msec, std::vector< std::shared_ptr> acceptors, grpc_resource_quota* server_rq = nullptr, std::vector> interceptor_creators = std::vector>()); /// Start the server. /// /// \param cqs Completion queues for handling asynchronous services. The /// caller is required to keep all completion queues live until the server is /// destroyed. /// \param num_cqs How many completion queues does \a cqs hold. void Start(ServerCompletionQueue** cqs, size_t num_cqs) override; grpc_server* server() override { return server_; } protected: /// NOTE: This method is not part of the public API for this class. void set_health_check_service( std::unique_ptr service) { health_check_service_ = std::move(service); } /// NOTE: This method is not part of the public API for this class. bool health_check_service_disabled() const { return health_check_service_disabled_; } private: std::vector< std::unique_ptr>* interceptor_creators() override { return &interceptor_creators_; } friend class grpc::AsyncGenericService; friend class grpc_impl::ServerBuilder; friend class grpc_impl::ServerInitializer; class SyncRequest; class CallbackRequestBase; template class CallbackRequest; class UnimplementedAsyncRequest; class UnimplementedAsyncResponse; /// SyncRequestThreadManager is an implementation of ThreadManager. This class /// is responsible for polling for incoming RPCs and calling the RPC handlers. /// This is only used in case of a Sync server (i.e a server exposing a sync /// interface) class SyncRequestThreadManager; /// Register a generic service. This call does not take ownership of the /// service. The service must exist for the lifetime of the Server instance. void RegisterAsyncGenericService(grpc::AsyncGenericService* service) override; #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL /// Register a callback-based generic service. This call does not take /// ownership of theservice. The service must exist for the lifetime of the /// Server instance. void RegisterCallbackGenericService( grpc::CallbackGenericService* service) override; #else /// NOTE: class experimental_registration_type is not part of the public API /// of this class /// TODO(vjpai): Move these contents to the public API of Server when /// they are no longer experimental class experimental_registration_type final : public experimental_registration_interface { public: explicit experimental_registration_type(Server* server) : server_(server) {} void RegisterCallbackGenericService( grpc::experimental::CallbackGenericService* service) override { server_->RegisterCallbackGenericService(service); } private: Server* server_; }; /// TODO(vjpai): Mark this override when experimental type above is deleted void RegisterCallbackGenericService( grpc::experimental::CallbackGenericService* service); /// NOTE: The function experimental_registration() is not stable public API. /// It is a view to the experimental components of this class. It may be /// changed or removed at any time. experimental_registration_interface* experimental_registration() override { return &experimental_registration_; } #endif void PerformOpsOnCall(grpc::internal::CallOpSetInterface* ops, grpc::internal::Call* call) override; void ShutdownInternal(gpr_timespec deadline) override; int max_receive_message_size() const override { return max_receive_message_size_; } CompletionQueue* CallbackCQ() override; grpc_impl::ServerInitializer* initializer(); // Functions to manage the server shutdown ref count. Things that increase // the ref count are the running state of the server (take a ref at start and // drop it at shutdown) and each running callback RPC. void Ref(); void UnrefWithPossibleNotify() /* LOCKS_EXCLUDED(mu_) */; void UnrefAndWaitLocked() /* EXCLUSIVE_LOCKS_REQUIRED(mu_) */; std::vector> acceptors_; // A vector of interceptor factory objects. // This should be destroyed after health_check_service_ and this requirement // is satisfied by declaring interceptor_creators_ before // health_check_service_. (C++ mandates that member objects be destroyed in // the reverse order of initialization.) std::vector< std::unique_ptr> interceptor_creators_; int max_receive_message_size_; /// The following completion queues are ONLY used in case of Sync API /// i.e. if the server has any services with sync methods. The server uses /// these completion queues to poll for new RPCs std::shared_ptr>> sync_server_cqs_; /// List of \a ThreadManager instances (one for each cq in /// the \a sync_server_cqs) std::vector> sync_req_mgrs_; #ifndef GRPC_CALLBACK_API_NONEXPERIMENTAL // For registering experimental callback generic service; remove when that // method longer experimental experimental_registration_type experimental_registration_{this}; #endif // Server status grpc::internal::Mutex mu_; bool started_; bool shutdown_; bool shutdown_notified_; // Was notify called on the shutdown_cv_ grpc::internal::CondVar shutdown_done_cv_; bool shutdown_done_ = false; std::atomic_int shutdown_refs_outstanding_{1}; grpc::internal::CondVar shutdown_cv_; std::shared_ptr global_callbacks_; std::vector services_; bool has_async_generic_service_ = false; bool has_callback_generic_service_ = false; bool has_callback_methods_ = false; // Pointer to the wrapped grpc_server. grpc_server* server_; std::unique_ptr server_initializer_; std::unique_ptr health_check_service_; bool health_check_service_disabled_; // When appropriate, use a default callback generic service to handle // unimplemented methods #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL std::unique_ptr unimplemented_service_; #else std::unique_ptr unimplemented_service_; #endif // A special handler for resource exhausted in sync case std::unique_ptr resource_exhausted_handler_; // Handler for callback generic service, if any std::unique_ptr generic_handler_; // callback_cq_ references the callbackable completion queue associated // with this server (if any). It is set on the first call to CallbackCQ(). // It is _not owned_ by the server; ownership belongs with its internal // shutdown callback tag (invoked when the CQ is fully shutdown). CompletionQueue* callback_cq_ /* GUARDED_BY(mu_) */ = nullptr; // List of CQs passed in by user that must be Shutdown only after Server is // Shutdown. Even though this is only used with NDEBUG, instantiate it in all // cases since otherwise the size will be inconsistent. std::vector cq_list_; }; } // namespace grpc_impl #endif // GRPCPP_SERVER_IMPL_H grpc-1.30.2/include/grpcpp/server_posix.h000066400000000000000000000017251370425124100203530ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPCPP_SERVER_POSIX_H #define GRPCPP_SERVER_POSIX_H #include namespace grpc { #ifdef GPR_SUPPORT_CHANNELS_FROM_FD static inline void AddInsecureChannelFromFd(Server* server, int fd) { ::grpc_impl::AddInsecureChannelFromFd(server, fd); } #endif // GPR_SUPPORT_CHANNELS_FROM_FD } // namespace grpc #endif // GRPCPP_SERVER_POSIX_H grpc-1.30.2/include/grpcpp/server_posix_impl.h000066400000000000000000000022441370425124100213710ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPCPP_SERVER_POSIX_IMPL_H #define GRPCPP_SERVER_POSIX_IMPL_H #include #include #include namespace grpc_impl { #ifdef GPR_SUPPORT_CHANNELS_FROM_FD /// Add a new client to a \a Server communicating over the given /// file descriptor. /// /// \param server The server to add the client to. /// \param fd The file descriptor representing a socket. void AddInsecureChannelFromFd(grpc::Server* server, int fd); #endif // GPR_SUPPORT_CHANNELS_FROM_FD } // namespace grpc_impl #endif // GRPCPP_SERVER_POSIX_IMPL_H grpc-1.30.2/include/grpcpp/support/000077500000000000000000000000001370425124100171615ustar00rootroot00000000000000grpc-1.30.2/include/grpcpp/support/async_stream.h000066400000000000000000000014011370425124100220160ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_ASYNC_STREAM_H #define GRPCPP_SUPPORT_ASYNC_STREAM_H #include #endif // GRPCPP_SUPPORT_ASYNC_STREAM_H grpc-1.30.2/include/grpcpp/support/async_stream_impl.h000066400000000000000000000014251370425124100230450ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_ASYNC_STREAM_IMPL_H #define GRPCPP_SUPPORT_ASYNC_STREAM_IMPL_H #include #endif // GRPCPP_SUPPORT_ASYNC_STREAM_IMPL_H grpc-1.30.2/include/grpcpp/support/async_unary_call.h000066400000000000000000000014211370425124100226560ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_ASYNC_UNARY_CALL_H #define GRPCPP_SUPPORT_ASYNC_UNARY_CALL_H #include #endif // GRPCPP_SUPPORT_ASYNC_UNARY_CALL_H grpc-1.30.2/include/grpcpp/support/async_unary_call_impl.h000066400000000000000000000014451370425124100237050ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_ASYNC_UNARY_CALL_IMPL_H #define GRPCPP_SUPPORT_ASYNC_UNARY_CALL_IMPL_H #include #endif // GRPCPP_SUPPORT_ASYNC_UNARY_CALL_IMPL_H grpc-1.30.2/include/grpcpp/support/byte_buffer.h000066400000000000000000000017461370425124100216360ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_BYTE_BUFFER_H #define GRPCPP_SUPPORT_BYTE_BUFFER_H #include #include #include #include #include #include #include #include #endif // GRPCPP_SUPPORT_BYTE_BUFFER_H grpc-1.30.2/include/grpcpp/support/channel_arguments.h000066400000000000000000000017351370425124100230350ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_CHANNEL_ARGUMENTS_H #define GRPCPP_SUPPORT_CHANNEL_ARGUMENTS_H #include namespace grpc_impl { class SecureChannelCredentials; class ResourceQuota; } // namespace grpc_impl namespace grpc { typedef ::grpc_impl::ChannelArguments ChannelArguments; } // namespace grpc #endif // GRPCPP_SUPPORT_CHANNEL_ARGUMENTS_H grpc-1.30.2/include/grpcpp/support/channel_arguments_impl.h000066400000000000000000000123371370425124100240560ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_CHANNEL_ARGUMENTS_IMPL_H #define GRPCPP_SUPPORT_CHANNEL_ARGUMENTS_IMPL_H #include #include #include #include #include #include namespace grpc { namespace testing { class ChannelArgumentsTest; } // namespace testing } // namespace grpc namespace grpc_impl { class SecureChannelCredentials; /// Options for channel creation. The user can use generic setters to pass /// key value pairs down to C channel creation code. For gRPC related options, /// concrete setters are provided. class ChannelArguments { public: ChannelArguments(); ~ChannelArguments(); ChannelArguments(const ChannelArguments& other); ChannelArguments& operator=(ChannelArguments other) { Swap(other); return *this; } void Swap(ChannelArguments& other); /// Dump arguments in this instance to \a channel_args. Does not take /// ownership of \a channel_args. /// /// Note that the underlying arguments are shared. Changes made to either \a /// channel_args or this instance would be reflected on both. void SetChannelArgs(grpc_channel_args* channel_args) const; // gRPC specific channel argument setters /// Set target name override for SSL host name checking. This option should /// be used with caution in production. void SetSslTargetNameOverride(const grpc::string& name); // TODO(yangg) add flow control options /// Set the compression algorithm for the channel. void SetCompressionAlgorithm(grpc_compression_algorithm algorithm); /// Set the grpclb fallback timeout (in ms) for the channel. If this amount /// of time has passed but we have not gotten any non-empty \a serverlist from /// the balancer, we will fall back to use the backend address(es) returned by /// the resolver. void SetGrpclbFallbackTimeout(int fallback_timeout); /// For client channel's, the socket mutator operates on /// "channel" sockets. For server's, the socket mutator operates /// only on "listen" sockets. /// TODO(apolcyn): allow socket mutators to also operate /// on server "channel" sockets, and adjust the socket mutator /// object to be more speficic about which type of socket /// it should operate on. void SetSocketMutator(grpc_socket_mutator* mutator); /// Set the string to prepend to the user agent. void SetUserAgentPrefix(const grpc::string& user_agent_prefix); /// Set the buffer pool to be attached to the constructed channel. void SetResourceQuota(const grpc::ResourceQuota& resource_quota); /// Set the max receive and send message sizes. void SetMaxReceiveMessageSize(int size); void SetMaxSendMessageSize(int size); /// Set LB policy name. /// Note that if the name resolver returns only balancer addresses, the /// grpclb LB policy will be used, regardless of what is specified here. void SetLoadBalancingPolicyName(const grpc::string& lb_policy_name); /// Set service config in JSON form. /// Primarily meant for use in unit tests. void SetServiceConfigJSON(const grpc::string& service_config_json); // Generic channel argument setters. Only for advanced use cases. /// Set an integer argument \a value under \a key. void SetInt(const grpc::string& key, int value); // Generic channel argument setter. Only for advanced use cases. /// Set a pointer argument \a value under \a key. Owership is not transferred. void SetPointer(const grpc::string& key, void* value); void SetPointerWithVtable(const grpc::string& key, void* value, const grpc_arg_pointer_vtable* vtable); /// Set a textual argument \a value under \a key. void SetString(const grpc::string& key, const grpc::string& value); /// Return (by value) a C \a grpc_channel_args structure which points to /// arguments owned by this \a ChannelArguments instance grpc_channel_args c_channel_args() const { grpc_channel_args out; out.num_args = args_.size(); out.args = args_.empty() ? NULL : const_cast(&args_[0]); return out; } private: friend class grpc_impl::SecureChannelCredentials; friend class grpc::testing::ChannelArgumentsTest; /// Default pointer argument operations. struct PointerVtableMembers { static void* Copy(void* in) { return in; } static void Destroy(void* /*in*/) {} static int Compare(void* a, void* b) { if (a < b) return -1; if (a > b) return 1; return 0; } }; // Returns empty string when it is not set. grpc::string GetSslTargetNameOverride() const; std::vector args_; std::list strings_; }; } // namespace grpc_impl #endif // GRPCPP_SUPPORT_CHANNEL_ARGUMENTS_IMPL_H grpc-1.30.2/include/grpcpp/support/client_callback.h000066400000000000000000000014151370425124100224250ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_CLIENT_CALLBACK_H #define GRPCPP_SUPPORT_CLIENT_CALLBACK_H #include #endif // GRPCPP_SUPPORT_CLIENT_CALLBACK_H grpc-1.30.2/include/grpcpp/support/client_callback_impl.h000066400000000000000000000014411370425124100234450ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_CLIENT_CALLBACK_IMPL_H #define GRPCPP_SUPPORT_CLIENT_CALLBACK_IMPL_H #include #endif // GRPCPP_SUPPORT_CLIENT_CALLBACK_IMPL_H grpc-1.30.2/include/grpcpp/support/client_interceptor.h000066400000000000000000000014311370425124100232250ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_CLIENT_INTERCEPTOR_H #define GRPCPP_SUPPORT_CLIENT_INTERCEPTOR_H #include #endif // GRPCPP_SUPPORT_CLIENT_INTERCEPTOR_H grpc-1.30.2/include/grpcpp/support/config.h000066400000000000000000000013511370425124100205770ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_CONFIG_H #define GRPCPP_SUPPORT_CONFIG_H #include #endif // GRPCPP_SUPPORT_CONFIG_H grpc-1.30.2/include/grpcpp/support/error_details.h000066400000000000000000000023641370425124100221750ustar00rootroot00000000000000/* * * Copyright 2017 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_ERROR_DETAILS_H #define GRPCPP_SUPPORT_ERROR_DETAILS_H #include namespace google { namespace rpc { class Status; } // namespace rpc } // namespace google namespace grpc { static inline Status ExtractErrorDetails(const Status& from, ::google::rpc::Status* to) { return ::grpc_impl::ExtractErrorDetails(from, to); } static inline Status SetErrorDetails(const ::google::rpc::Status& from, Status* to) { return ::grpc_impl::SetErrorDetails(from, to); } } // namespace grpc #endif // GRPCPP_SUPPORT_ERROR_DETAILS_H grpc-1.30.2/include/grpcpp/support/error_details_impl.h000066400000000000000000000030541370425124100232130ustar00rootroot00000000000000/* * * Copyright 2017 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_ERROR_DETAILS_IMPL_H #define GRPCPP_SUPPORT_ERROR_DETAILS_IMPL_H #include namespace google { namespace rpc { class Status; } // namespace rpc } // namespace google namespace grpc_impl { /// Map a \a grpc::Status to a \a google::rpc::Status. /// The given \a to object will be cleared. /// On success, returns status with OK. /// Returns status with \a INVALID_ARGUMENT, if failed to deserialize. /// Returns status with \a FAILED_PRECONDITION, if \a to is nullptr. grpc::Status ExtractErrorDetails(const grpc::Status& from, ::google::rpc::Status* to); /// Map \a google::rpc::Status to a \a grpc::Status. /// Returns OK on success. /// Returns status with \a FAILED_PRECONDITION if \a to is nullptr. grpc::Status SetErrorDetails(const ::google::rpc::Status& from, grpc::Status* to); } // namespace grpc_impl #endif // GRPCPP_SUPPORT_ERROR_DETAILS_IMPL_H grpc-1.30.2/include/grpcpp/support/interceptor.h000066400000000000000000000013751370425124100216760ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_INTERCEPTOR_H #define GRPCPP_SUPPORT_INTERCEPTOR_H #include #endif // GRPCPP_SUPPORT_INTERCEPTOR_H grpc-1.30.2/include/grpcpp/support/message_allocator.h000066400000000000000000000014251370425124100230200ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_MESSAGE_ALLOCATOR_H #define GRPCPP_SUPPORT_MESSAGE_ALLOCATOR_H #include #endif // GRPCPP_SUPPORT_MESSAGE_ALLOCATOR_H grpc-1.30.2/include/grpcpp/support/method_handler.h000066400000000000000000000014111370425124100223040ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_METHOD_HANDLER_H #define GRPCPP_SUPPORT_METHOD_HANDLER_H #include #endif // GRPCPP_SUPPORT_METHOD_HANDLER_H grpc-1.30.2/include/grpcpp/support/proto_buffer_reader.h000066400000000000000000000014351370425124100233530ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_PROTO_BUFFER_READER_H #define GRPCPP_SUPPORT_PROTO_BUFFER_READER_H #include #endif // GRPCPP_SUPPORT_PROTO_BUFFER_READER_H grpc-1.30.2/include/grpcpp/support/proto_buffer_writer.h000066400000000000000000000014351370425124100234250ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_PROTO_BUFFER_WRITER_H #define GRPCPP_SUPPORT_PROTO_BUFFER_WRITER_H #include #endif // GRPCPP_SUPPORT_PROTO_BUFFER_WRITER_H grpc-1.30.2/include/grpcpp/support/server_callback.h000066400000000000000000000014151370425124100224550ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_SERVER_CALLBACK_H #define GRPCPP_SUPPORT_SERVER_CALLBACK_H #include #endif // GRPCPP_SUPPORT_SERVER_CALLBACK_H grpc-1.30.2/include/grpcpp/support/server_callback_impl.h000066400000000000000000000014411370425124100234750ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_SERVER_CALLBACK_IMPL_H #define GRPCPP_SUPPORT_SERVER_CALLBACK_IMPL_H #include #endif // GRPCPP_SUPPORT_SERVER_CALLBACK_IMPL_H grpc-1.30.2/include/grpcpp/support/server_interceptor.h000066400000000000000000000014311370425124100232550ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_SERVER_INTERCEPTOR_H #define GRPCPP_SUPPORT_SERVER_INTERCEPTOR_H #include #endif // GRPCPP_SUPPORT_SERVER_INTERCEPTOR_H grpc-1.30.2/include/grpcpp/support/slice.h000066400000000000000000000014401370425124100204300ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_SLICE_H #define GRPCPP_SUPPORT_SLICE_H #include #include #include #endif // GRPCPP_SUPPORT_SLICE_H grpc-1.30.2/include/grpcpp/support/status.h000066400000000000000000000013511370425124100206550ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_STATUS_H #define GRPCPP_SUPPORT_STATUS_H #include #endif // GRPCPP_SUPPORT_STATUS_H grpc-1.30.2/include/grpcpp/support/status_code_enum.h000066400000000000000000000014211370425124100226710ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_STATUS_CODE_ENUM_H #define GRPCPP_SUPPORT_STATUS_CODE_ENUM_H #include #endif // GRPCPP_SUPPORT_STATUS_CODE_ENUM_H grpc-1.30.2/include/grpcpp/support/string_ref.h000066400000000000000000000013711370425124100214760ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_STRING_REF_H #define GRPCPP_SUPPORT_STRING_REF_H #include #endif // GRPCPP_SUPPORT_STRING_REF_H grpc-1.30.2/include/grpcpp/support/stub_options.h000066400000000000000000000014011370425124100220560ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_STUB_OPTIONS_H #define GRPCPP_SUPPORT_STUB_OPTIONS_H #include #endif // GRPCPP_SUPPORT_STUB_OPTIONS_H grpc-1.30.2/include/grpcpp/support/sync_stream.h000066400000000000000000000013751370425124100216670ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_SYNC_STREAM_H #define GRPCPP_SUPPORT_SYNC_STREAM_H #include #endif // GRPCPP_SUPPORT_SYNC_STREAM_H grpc-1.30.2/include/grpcpp/support/sync_stream_impl.h000066400000000000000000000014211370425124100227000ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_SYNC_STREAM_IMPL_H #define GRPCPP_SUPPORT_SYNC_STREAM_IMPL_H #include #endif // GRPCPP_SUPPORT_SYNC_STREAM_IMPL_H grpc-1.30.2/include/grpcpp/support/time.h000066400000000000000000000013411370425124100202670ustar00rootroot00000000000000/* * * Copyright 2015 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_TIME_H #define GRPCPP_SUPPORT_TIME_H #include #endif // GRPCPP_SUPPORT_TIME_H grpc-1.30.2/include/grpcpp/support/validate_service_config.h000066400000000000000000000022451370425124100241730ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_SUPPORT_VALIDATE_SERVICE_CONFIG_H #define GRPCPP_SUPPORT_VALIDATE_SERVICE_CONFIG_H #include namespace grpc { namespace experimental { /// Validates \a service_config_json. If valid, returns an empty string. /// Otherwise, returns the validation error. /// TODO(yashykt): Promote it to out of experimental once it is proved useful /// and gRFC is accepted. grpc::string ValidateServiceConfigJSON(const grpc::string& service_config_json); } // namespace experimental } // namespace grpc #endif // GRPCPP_SUPPORT_VALIDATE_SERVICE_CONFIG_H grpc-1.30.2/include/grpcpp/test/000077500000000000000000000000001370425124100164245ustar00rootroot00000000000000grpc-1.30.2/include/grpcpp/test/channel_test_peer.h000066400000000000000000000023071370425124100222610ustar00rootroot00000000000000/* * * Copyright 2020 gRPC 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 * * 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. * */ #ifndef GRPCPP_TEST_CHANNEL_TEST_PEER_H #define GRPCPP_TEST_CHANNEL_TEST_PEER_H #include namespace grpc { namespace testing { /// A test-only class to access private members of Channel. class ChannelTestPeer { public: explicit ChannelTestPeer(Channel* channel) : channel_(channel) {} /// Provide the gRPC Core channel grpc_channel* channel() const { return channel_->c_channel_; } int registered_calls() const; int registration_attempts() const; private: Channel* channel_; // not owned }; } // namespace testing } // namespace grpc #endif // GRPCPP_TEST_CHANNEL_TEST_PEER_H grpc-1.30.2/include/grpcpp/test/default_reactor_test_peer.h000066400000000000000000000042301370425124100240110ustar00rootroot00000000000000/* * * Copyright 2019 gRPC 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 * * 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. * */ #ifndef GRPCPP_TEST_DEFAULT_REACTOR_TEST_PEER_H #define GRPCPP_TEST_DEFAULT_REACTOR_TEST_PEER_H #include #include namespace grpc { namespace testing { /// A test-only class to monitor the behavior of the ServerContext's /// DefaultReactor. It is intended for allow unit-testing of a callback API /// service via direct invocation of the service methods rather than through /// RPCs. It is only applicable for unary RPC methods that use the /// DefaultReactor rather than any user-defined reactor. If it is used, it must /// be created before the RPC is invoked so that it can bind the reactor into a /// test mode rather than letting it follow the normal paths. class DefaultReactorTestPeer { public: explicit DefaultReactorTestPeer(experimental::CallbackServerContext* ctx) : DefaultReactorTestPeer(ctx, [](::grpc::Status) {}) {} DefaultReactorTestPeer(experimental::CallbackServerContext* ctx, std::function finish_func) : ctx_(ctx) { ctx->SetupTestDefaultReactor(std::move(finish_func)); } ::grpc::experimental::ServerUnaryReactor* reactor() const { return reinterpret_cast( &ctx_->default_reactor_); } bool test_status_set() const { return ctx_->test_status_set(); } Status test_status() const { return ctx_->test_status(); } private: experimental::CallbackServerContext* const ctx_; // not owned }; } // namespace testing } // namespace grpc #endif // GRPCPP_TEST_DEFAULT_REACTOR_TEST_PEER_H grpc-1.30.2/include/grpcpp/test/mock_stream.h000066400000000000000000000076071370425124100211130ustar00rootroot00000000000000/* * * Copyright 2017 gRPC 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 * * 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. * */ #ifndef GRPCPP_TEST_MOCK_STREAM_H #define GRPCPP_TEST_MOCK_STREAM_H #include #include #include #include #include #include namespace grpc { namespace testing { template class MockClientReader : public ::grpc_impl::ClientReaderInterface { public: MockClientReader() = default; /// ClientStreamingInterface MOCK_METHOD0_T(Finish, Status()); /// ReaderInterface MOCK_METHOD1_T(NextMessageSize, bool(uint32_t*)); MOCK_METHOD1_T(Read, bool(R*)); /// ClientReaderInterface MOCK_METHOD0_T(WaitForInitialMetadata, void()); }; template class MockClientWriter : public ::grpc_impl::ClientWriterInterface { public: MockClientWriter() = default; /// ClientStreamingInterface MOCK_METHOD0_T(Finish, Status()); /// WriterInterface MOCK_METHOD2_T(Write, bool(const W&, const WriteOptions)); /// ClientWriterInterface MOCK_METHOD0_T(WritesDone, bool()); }; template class MockClientReaderWriter : public ::grpc_impl::ClientReaderWriterInterface { public: MockClientReaderWriter() = default; /// ClientStreamingInterface MOCK_METHOD0_T(Finish, Status()); /// ReaderInterface MOCK_METHOD1_T(NextMessageSize, bool(uint32_t*)); MOCK_METHOD1_T(Read, bool(R*)); /// WriterInterface MOCK_METHOD2_T(Write, bool(const W&, const WriteOptions)); /// ClientReaderWriterInterface MOCK_METHOD0_T(WaitForInitialMetadata, void()); MOCK_METHOD0_T(WritesDone, bool()); }; /// TODO: We do not support mocking an async RPC for now. template class MockClientAsyncResponseReader : public ::grpc_impl::ClientAsyncResponseReaderInterface { public: MockClientAsyncResponseReader() = default; MOCK_METHOD1_T(ReadInitialMetadata, void(void*)); MOCK_METHOD3_T(Finish, void(R*, Status*, void*)); }; template class MockClientAsyncReader : public ClientAsyncReaderInterface { public: MockClientAsyncReader() = default; /// ClientAsyncStreamingInterface MOCK_METHOD1_T(ReadInitialMetadata, void(void*)); MOCK_METHOD2_T(Finish, void(Status*, void*)); /// AsyncReaderInterface MOCK_METHOD2_T(Read, void(R*, void*)); }; template class MockClientAsyncWriter : public ::grpc_impl::ClientAsyncWriterInterface { public: MockClientAsyncWriter() = default; /// ClientAsyncStreamingInterface MOCK_METHOD1_T(ReadInitialMetadata, void(void*)); MOCK_METHOD2_T(Finish, void(Status*, void*)); /// AsyncWriterInterface MOCK_METHOD2_T(Write, void(const W&, void*)); /// ClientAsyncWriterInterface MOCK_METHOD1_T(WritesDone, void(void*)); }; template class MockClientAsyncReaderWriter : public ClientAsyncReaderWriterInterface { public: MockClientAsyncReaderWriter() = default; /// ClientAsyncStreamingInterface MOCK_METHOD1_T(ReadInitialMetadata, void(void*)); MOCK_METHOD2_T(Finish, void(Status*, void*)); /// AsyncWriterInterface MOCK_METHOD2_T(Write, void(const W&, void*)); /// AsyncReaderInterface MOCK_METHOD2_T(Read, void(R*, void*)); /// ClientAsyncReaderWriterInterface MOCK_METHOD1_T(WritesDone, void(void*)); }; } // namespace testing } // namespace grpc #endif // GRPCPP_TEST_MOCK_STREAM_H grpc-1.30.2/include/grpcpp/test/server_context_test_spouse.h000066400000000000000000000040351370425124100243060ustar00rootroot00000000000000/* * * Copyright 2016 gRPC 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 * * 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. * */ #ifndef GRPCPP_TEST_SERVER_CONTEXT_TEST_SPOUSE_H #define GRPCPP_TEST_SERVER_CONTEXT_TEST_SPOUSE_H #include #include namespace grpc { namespace testing { /// A test-only class to access private members and methods of ServerContext. class ServerContextTestSpouse { public: explicit ServerContextTestSpouse(ServerContext* ctx) : ctx_(ctx) {} /// Inject client metadata to the ServerContext for the test. The test spouse /// must be alive when \a ServerContext::client_metadata is called. void AddClientMetadata(const grpc::string& key, const grpc::string& value) { client_metadata_storage_.insert( std::pair(key, value)); ctx_->client_metadata_.map()->clear(); for (const auto& item : client_metadata_storage_) { ctx_->client_metadata_.map()->insert( std::pair( item.first.c_str(), grpc::string_ref(item.second.data(), item.second.size()))); } } std::multimap GetInitialMetadata() const { return ctx_->initial_metadata_; } std::multimap GetTrailingMetadata() const { return ctx_->trailing_metadata_; } private: ServerContext* ctx_; // not owned std::multimap client_metadata_storage_; }; } // namespace testing } // namespace grpc #endif // GRPCPP_TEST_SERVER_CONTEXT_TEST_SPOUSE_H grpc-1.30.2/package.xml000066400000000000000000005162531370425124100146600ustar00rootroot00000000000000 grpc pecl.php.net A high performance, open source, general RPC framework that puts mobile and HTTP/2 first. Remote Procedure Calls (RPCs) provide a useful abstraction for building distributed applications and services. The libraries in this repository provide a concrete implementation of the gRPC protocol, layered over HTTP/2. These libraries enable communication between clients and servers using any combination of the supported languages. Stanley Cheung stanleycheung grpc-packages@google.com yes 2019-09-24 1.30.2 1.30.2 stable stable Apache 2.0 - gRPC Core 1.30.2 update 5.5.0 1.4.0 grpc 0.5.0 0.5.0 alpha alpha 2015-06-16 BSD First alpha release 0.5.1 0.5.1 alpha alpha 2015-07-09 BSD Update to wrap gRPC C Core version 0.10.0 0.6.0 0.6.0 beta beta 2015-09-24 BSD - support per message compression disable - expose per-call host override option - expose connectivity API - expose channel target and call peer - add user-agent - update to wrap gRPC C core library beta version 0.11.0 0.6.1 0.6.0 beta beta 2015-10-21 BSD - fixed undefined constant fatal error when run with apache/nginx #2275 0.7.0 0.7.0 beta beta 2016-01-13 BSD - Breaking change to Credentials class (removed) #3765 - Replaced by ChannelCredentials and CallCredentials class #3765 - New plugin based metadata auth API #4394 - Explicit ChannelCredentials::createInsecure() call 0.8.0 0.8.0 beta beta 2016-02-24 BSD - Simplify gRPC PHP installation #4517 - Wrap gRPC core library version 0.13 0.8.1 0.8.1 beta beta 2016-03-01 BSD - Increase unit test code coverage #5225 0.14.0 0.14.0 beta beta 2016-04-19 BSD - wrap grpc C core version 0.14.0 - destroy grpc_byte_buffer after startBatch #6096 0.15.0 0.15.0 beta beta 2016-05-18 BSD - Updated functions with TSRM macros for ZTS support #6607 - Load default roots.pem via grpc_set_ssl_roots_override_callback #6848 1.0.0RC1 1.0.0RC1 stable stable 2016-07-13 BSD - GA release - Fix shutdown hang problem #4017 1.0.0RC2 1.0.0RC2 stable stable 2016-07-21 BSD - PHP7 Support #7464 1.0.0RC3 1.0.0RC3 stable stable 2016-07-28 BSD - PHP7 Support continued, reduce code duplication #7543 1.0.0RC4 1.0.0RC4 stable stable 2016-08-09 BSD - Fixed Ubuntu compile error #7571, #7642 1.0.0 1.0.0 stable stable 2016-08-18 BSD - gRPC 1.0.0 release 1.0.1RC1 1.0.1RC1 beta beta 2016-10-06 BSD - Reject metadata keys which are not legal #7881 1.0.1 1.0.1 stable stable 2016-10-27 BSD - Reject metadata keys which are not legal #7881 1.1.0RC1 1.1.0RC1 beta beta 2017-01-13 BSD - PHP Proto3 adoption #8179 - Various bug fixes 1.1.0 1.1.0 stable stable 2017-01-31 BSD - PHP Proto3 adoption #8179 - Various bug fixes 1.2.0RC1 1.2.0RC1 beta beta 2017-03-01 BSD - Added arg info macros #9751 - Updated codegen to be consistent with protobuf #9492 1.2.0 1.2.0 stable stable 2017-03-20 BSD - Added arg info macros #9751 - Updated codegen to be consistent with protobuf #9492 grpc-1.30.2/requirements.bazel.txt000066400000000000000000000004321370425124100171060ustar00rootroot00000000000000# GRPC Python setup requirements coverage>=4.0 cython>=0.29.8 enum34>=1.0.4 protobuf>=3.5.0.post1 six>=1.10 wheel>=0.29 futures>=2.2.0 google-auth>=1.17.2 oauth2client==4.1.0 requests>=2.14.2 urllib3>=1.23 chardet==3.0.4 certifi==2017.4.17 idna==2.7 googleapis-common-protos==1.5.5 grpc-1.30.2/requirements.txt000066400000000000000000000001701370425124100160110ustar00rootroot00000000000000# GRPC Python setup requirements coverage>=4.0 cython>=0.29.8 enum34>=1.0.4 protobuf>=3.5.0.post1 six>=1.10 wheel>=0.29 grpc-1.30.2/setup.cfg000066400000000000000000000010651370425124100143520ustar00rootroot00000000000000# Setup settings for GRPC Python [coverage:run] plugins = Cython.Coverage [build] build_base=python_build [build_ext] inplace=1 [build_package_protos] exclude=.*protoc_plugin/protoc_plugin_test\.proto$ # Style settings [yapf] based_on_style = google [metadata] license_files = LICENSE [pytype] inputs = src/python/grpcio/grpc/experimental src/python/grpcio_tests/tests_aio # NOTE(lidiz) # import-error: C extension triggers import-error. # module-attr: pytype cannot understand the namespace packages by Google. disable = "import-error,module-attr" grpc-1.30.2/setup.py000066400000000000000000000404321370425124100142440ustar00rootroot00000000000000# Copyright 2015 gRPC 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 # # 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. """A setup module for the GRPC Python package.""" from distutils import cygwinccompiler from distutils import extension as _extension from distutils import util import os import os.path import pkg_resources import platform import re import shlex import shutil import sys import sysconfig import setuptools from setuptools.command import egg_info import subprocess from subprocess import PIPE # Redirect the manifest template from MANIFEST.in to PYTHON-MANIFEST.in. egg_info.manifest_maker.template = 'PYTHON-MANIFEST.in' PY3 = sys.version_info.major == 3 PYTHON_STEM = os.path.join('src', 'python', 'grpcio') CORE_INCLUDE = ( 'include', '.', ) ABSL_INCLUDE = (os.path.join('third_party', 'abseil-cpp'),) ADDRESS_SORTING_INCLUDE = (os.path.join('third_party', 'address_sorting', 'include'),) CARES_INCLUDE = ( os.path.join('third_party', 'cares'), os.path.join('third_party', 'cares', 'cares'), ) if 'darwin' in sys.platform: CARES_INCLUDE += (os.path.join('third_party', 'cares', 'config_darwin'),) if 'freebsd' in sys.platform: CARES_INCLUDE += (os.path.join('third_party', 'cares', 'config_freebsd'),) if 'linux' in sys.platform: CARES_INCLUDE += (os.path.join('third_party', 'cares', 'config_linux'),) if 'openbsd' in sys.platform: CARES_INCLUDE += (os.path.join('third_party', 'cares', 'config_openbsd'),) SSL_INCLUDE = (os.path.join('third_party', 'boringssl-with-bazel', 'src', 'include'),) UPB_INCLUDE = (os.path.join('third_party', 'upb'),) UPB_GRPC_GENERATED_INCLUDE = (os.path.join('src', 'core', 'ext', 'upb-generated'),) ZLIB_INCLUDE = (os.path.join('third_party', 'zlib'),) README = os.path.join(PYTHON_STEM, 'README.rst') # Ensure we're in the proper directory whether or not we're being used by pip. os.chdir(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, os.path.abspath(PYTHON_STEM)) # Break import-style to ensure we can actually find our in-repo dependencies. import _parallel_compile_patch import _spawn_patch import commands import grpc_core_dependencies import grpc_version _parallel_compile_patch.monkeypatch_compile_maybe() _spawn_patch.monkeypatch_spawn() LICENSE = 'Apache License 2.0' CLASSIFIERS = [ 'Development Status :: 5 - Production/Stable', 'Programming Language :: Python', 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'License :: OSI Approved :: Apache Software License', ] # Environment variable to determine whether or not the Cython extension should # *use* Cython or use the generated C files. Note that this requires the C files # to have been generated by building first *with* Cython support. Even if this # is set to false, if the script detects that the generated `.c` file isn't # present, then it will still attempt to use Cython. BUILD_WITH_CYTHON = os.environ.get('GRPC_PYTHON_BUILD_WITH_CYTHON', False) # Export this variable to use the system installation of openssl. You need to # have the header files installed (in /usr/include/openssl) and during # runtime, the shared library must be installed BUILD_WITH_SYSTEM_OPENSSL = os.environ.get('GRPC_PYTHON_BUILD_SYSTEM_OPENSSL', False) # Export this variable to use the system installation of zlib. You need to # have the header files installed (in /usr/include/) and during # runtime, the shared library must be installed BUILD_WITH_SYSTEM_ZLIB = os.environ.get('GRPC_PYTHON_BUILD_SYSTEM_ZLIB', False) # Export this variable to use the system installation of cares. You need to # have the header files installed (in /usr/include/) and during # runtime, the shared library must be installed BUILD_WITH_SYSTEM_CARES = os.environ.get('GRPC_PYTHON_BUILD_SYSTEM_CARES', False) # For local development use only: This skips building gRPC Core and its # dependencies, including protobuf and boringssl. This allows "incremental" # compilation by first building gRPC Core using make, then building only the # Python/Cython layers here. # # Note that this requires libboringssl.a in the libs/{dbg,opt}/ directory, which # may require configuring make to not use the system openssl implementation: # # make HAS_SYSTEM_OPENSSL_ALPN=0 # # TODO(ericgribkoff) Respect the BUILD_WITH_SYSTEM_* flags alongside this option USE_PREBUILT_GRPC_CORE = os.environ.get('GRPC_PYTHON_USE_PREBUILT_GRPC_CORE', False) # If this environmental variable is set, GRPC will not try to be compatible with # libc versions old than the one it was compiled against. DISABLE_LIBC_COMPATIBILITY = os.environ.get( 'GRPC_PYTHON_DISABLE_LIBC_COMPATIBILITY', False) # Environment variable to determine whether or not to enable coverage analysis # in Cython modules. ENABLE_CYTHON_TRACING = os.environ.get('GRPC_PYTHON_ENABLE_CYTHON_TRACING', False) # Environment variable specifying whether or not there's interest in setting up # documentation building. ENABLE_DOCUMENTATION_BUILD = os.environ.get( 'GRPC_PYTHON_ENABLE_DOCUMENTATION_BUILD', False) def check_linker_need_libatomic(): """Test if linker on system needs libatomic.""" code_test = (b'#include \n' + b'int main() { return std::atomic{}; }') cc_test = subprocess.Popen(['cc', '-x', 'c++', '-std=c++11', '-'], stdin=PIPE, stdout=PIPE, stderr=PIPE) cc_test.communicate(input=code_test) return cc_test.returncode != 0 # There are some situations (like on Windows) where CC, CFLAGS, and LDFLAGS are # entirely ignored/dropped/forgotten by distutils and its Cygwin/MinGW support. # We use these environment variables to thus get around that without locking # ourselves in w.r.t. the multitude of operating systems this ought to build on. # We can also use these variables as a way to inject environment-specific # compiler/linker flags. We assume GCC-like compilers and/or MinGW as a # reasonable default. EXTRA_ENV_COMPILE_ARGS = os.environ.get('GRPC_PYTHON_CFLAGS', None) EXTRA_ENV_LINK_ARGS = os.environ.get('GRPC_PYTHON_LDFLAGS', None) if EXTRA_ENV_COMPILE_ARGS is None: EXTRA_ENV_COMPILE_ARGS = ' -std=c++11' if 'win32' in sys.platform: if sys.version_info < (3, 5): EXTRA_ENV_COMPILE_ARGS += ' -D_hypot=hypot' # We use define flags here and don't directly add to DEFINE_MACROS below to # ensure that the expert user/builder has a way of turning it off (via the # envvars) without adding yet more GRPC-specific envvars. # See https://sourceforge.net/p/mingw-w64/bugs/363/ if '32' in platform.architecture()[0]: EXTRA_ENV_COMPILE_ARGS += ' -D_ftime=_ftime32 -D_timeb=__timeb32 -D_ftime_s=_ftime32_s' else: EXTRA_ENV_COMPILE_ARGS += ' -D_ftime=_ftime64 -D_timeb=__timeb64' else: # We need to statically link the C++ Runtime, only the C runtime is # available dynamically EXTRA_ENV_COMPILE_ARGS += ' /MT' elif "linux" in sys.platform: EXTRA_ENV_COMPILE_ARGS += ' -std=gnu99 -fvisibility=hidden -fno-wrapv -fno-exceptions' elif "darwin" in sys.platform: EXTRA_ENV_COMPILE_ARGS += ' -stdlib=libc++ -fvisibility=hidden -fno-wrapv -fno-exceptions' if EXTRA_ENV_LINK_ARGS is None: EXTRA_ENV_LINK_ARGS = '' if "linux" in sys.platform or "darwin" in sys.platform: EXTRA_ENV_LINK_ARGS += ' -lpthread' if check_linker_need_libatomic(): EXTRA_ENV_LINK_ARGS += ' -latomic' elif "win32" in sys.platform and sys.version_info < (3, 5): msvcr = cygwinccompiler.get_msvcr()[0] EXTRA_ENV_LINK_ARGS += ( ' -static-libgcc -static-libstdc++ -mcrtdll={msvcr}' ' -static -lshlwapi'.format(msvcr=msvcr)) if "linux" in sys.platform: EXTRA_ENV_LINK_ARGS += ' -Wl,-wrap,memcpy -static-libgcc' EXTRA_COMPILE_ARGS = shlex.split(EXTRA_ENV_COMPILE_ARGS) EXTRA_LINK_ARGS = shlex.split(EXTRA_ENV_LINK_ARGS) CYTHON_EXTENSION_PACKAGE_NAMES = () CYTHON_EXTENSION_MODULE_NAMES = ('grpc._cython.cygrpc',) CYTHON_HELPER_C_FILES = () CORE_C_FILES = tuple(grpc_core_dependencies.CORE_SOURCE_FILES) if "win32" in sys.platform: CORE_C_FILES = filter(lambda x: 'third_party/cares' not in x, CORE_C_FILES) if BUILD_WITH_SYSTEM_OPENSSL: CORE_C_FILES = filter(lambda x: 'third_party/boringssl' not in x, CORE_C_FILES) CORE_C_FILES = filter(lambda x: 'src/boringssl' not in x, CORE_C_FILES) SSL_INCLUDE = (os.path.join('/usr', 'include', 'openssl'),) if BUILD_WITH_SYSTEM_ZLIB: CORE_C_FILES = filter(lambda x: 'third_party/zlib' not in x, CORE_C_FILES) ZLIB_INCLUDE = (os.path.join('/usr', 'include'),) if BUILD_WITH_SYSTEM_CARES: CORE_C_FILES = filter(lambda x: 'third_party/cares' not in x, CORE_C_FILES) CARES_INCLUDE = (os.path.join('/usr', 'include'),) EXTENSION_INCLUDE_DIRECTORIES = ((PYTHON_STEM,) + CORE_INCLUDE + ABSL_INCLUDE + ADDRESS_SORTING_INCLUDE + CARES_INCLUDE + SSL_INCLUDE + UPB_INCLUDE + UPB_GRPC_GENERATED_INCLUDE + ZLIB_INCLUDE) EXTENSION_LIBRARIES = () if "linux" in sys.platform: EXTENSION_LIBRARIES += ('rt',) if not "win32" in sys.platform: EXTENSION_LIBRARIES += ('m',) if "win32" in sys.platform: EXTENSION_LIBRARIES += ( 'advapi32', 'ws2_32', 'dbghelp', ) if BUILD_WITH_SYSTEM_OPENSSL: EXTENSION_LIBRARIES += ( 'ssl', 'crypto', ) if BUILD_WITH_SYSTEM_ZLIB: EXTENSION_LIBRARIES += ('z',) if BUILD_WITH_SYSTEM_CARES: EXTENSION_LIBRARIES += ('cares',) DEFINE_MACROS = (('OPENSSL_NO_ASM', 1), ('_WIN32_WINNT', 0x600)) if not DISABLE_LIBC_COMPATIBILITY: DEFINE_MACROS += (('GPR_BACKWARDS_COMPATIBILITY_MODE', 1),) if "win32" in sys.platform: # TODO(zyc): Re-enable c-ares on x64 and x86 windows after fixing the # ares_library_init compilation issue DEFINE_MACROS += ( ('WIN32_LEAN_AND_MEAN', 1), ('CARES_STATICLIB', 1), ('GRPC_ARES', 0), ('NTDDI_VERSION', 0x06000000), ('NOMINMAX', 1), ) if '64bit' in platform.architecture()[0]: DEFINE_MACROS += (('MS_WIN64', 1),) elif sys.version_info >= (3, 5): # For some reason, this is needed to get access to inet_pton/inet_ntop # on msvc, but only for 32 bits DEFINE_MACROS += (('NTDDI_VERSION', 0x06000000),) else: DEFINE_MACROS += ( ('HAVE_CONFIG_H', 1), ('GRPC_ENABLE_FORK_SUPPORT', 1), ) LDFLAGS = tuple(EXTRA_LINK_ARGS) CFLAGS = tuple(EXTRA_COMPILE_ARGS) if "linux" in sys.platform or "darwin" in sys.platform: pymodinit_type = 'PyObject*' if PY3 else 'void' pymodinit = 'extern "C" __attribute__((visibility ("default"))) {}'.format( pymodinit_type) DEFINE_MACROS += (('PyMODINIT_FUNC', pymodinit),) DEFINE_MACROS += (('GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK', 1),) # By default, Python3 distutils enforces compatibility of # c plugins (.so files) with the OSX version Python3 was built with. # For Python3.4, this is OSX 10.6, but we need Thread Local Support (__thread) if 'darwin' in sys.platform and PY3: mac_target = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') if mac_target and (pkg_resources.parse_version(mac_target) < pkg_resources.parse_version('10.7.0')): os.environ['MACOSX_DEPLOYMENT_TARGET'] = '10.7' os.environ['_PYTHON_HOST_PLATFORM'] = re.sub( r'macosx-[0-9]+\.[0-9]+-(.+)', r'macosx-10.7-\1', util.get_platform()) def cython_extensions_and_necessity(): cython_module_files = [ os.path.join(PYTHON_STEM, name.replace('.', '/') + '.pyx') for name in CYTHON_EXTENSION_MODULE_NAMES ] config = os.environ.get('CONFIG', 'opt') prefix = 'libs/' + config + '/' if USE_PREBUILT_GRPC_CORE: extra_objects = [ prefix + 'libares.a', prefix + 'libboringssl.a', prefix + 'libgpr.a', prefix + 'libgrpc.a' ] core_c_files = [] else: core_c_files = list(CORE_C_FILES) extra_objects = [] extensions = [ _extension.Extension( name=module_name, sources=[module_file] + list(CYTHON_HELPER_C_FILES) + core_c_files, include_dirs=list(EXTENSION_INCLUDE_DIRECTORIES), libraries=list(EXTENSION_LIBRARIES), define_macros=list(DEFINE_MACROS), extra_objects=extra_objects, extra_compile_args=list(CFLAGS), extra_link_args=list(LDFLAGS), ) for (module_name, module_file ) in zip(list(CYTHON_EXTENSION_MODULE_NAMES), cython_module_files) ] need_cython = BUILD_WITH_CYTHON if not BUILD_WITH_CYTHON: need_cython = need_cython or not commands.check_and_update_cythonization( extensions) # TODO: the strategy for conditional compiling and exposing the aio Cython # dependencies will be revisited by https://github.com/grpc/grpc/issues/19728 return commands.try_cythonize(extensions, linetracing=ENABLE_CYTHON_TRACING, mandatory=BUILD_WITH_CYTHON), need_cython CYTHON_EXTENSION_MODULES, need_cython = cython_extensions_and_necessity() PACKAGE_DIRECTORIES = { '': PYTHON_STEM, } INSTALL_REQUIRES = ( "six>=1.5.2", "futures>=2.2.0; python_version<'3.2'", "enum34>=1.0.4; python_version<'3.4'", ) SETUP_REQUIRES = INSTALL_REQUIRES + ( 'Sphinx~=1.8.1', 'six>=1.10', ) if ENABLE_DOCUMENTATION_BUILD else () try: import Cython except ImportError: if BUILD_WITH_CYTHON: sys.stderr.write( "You requested a Cython build via GRPC_PYTHON_BUILD_WITH_CYTHON, " "but do not have Cython installed. We won't stop you from using " "other commands, but the extension files will fail to build.\n") elif need_cython: sys.stderr.write( 'We could not find Cython. Setup may take 10-20 minutes.\n') SETUP_REQUIRES += ('cython>=0.23',) COMMAND_CLASS = { 'doc': commands.SphinxDocumentation, 'build_project_metadata': commands.BuildProjectMetadata, 'build_py': commands.BuildPy, 'build_ext': commands.BuildExt, 'gather': commands.Gather, } # Ensure that package data is copied over before any commands have been run: credentials_dir = os.path.join(PYTHON_STEM, 'grpc', '_cython', '_credentials') try: os.mkdir(credentials_dir) except OSError: pass shutil.copyfile(os.path.join('etc', 'roots.pem'), os.path.join(credentials_dir, 'roots.pem')) PACKAGE_DATA = { # Binaries that may or may not be present in the final installation, but are # mentioned here for completeness. 'grpc._cython': [ '_credentials/roots.pem', '_windows/grpc_c.32.python', '_windows/grpc_c.64.python', ], } PACKAGES = setuptools.find_packages(PYTHON_STEM) setuptools.setup( name='grpcio', version=grpc_version.VERSION, description='HTTP/2-based RPC framework', author='The gRPC Authors', author_email='grpc-io@googlegroups.com', url='https://grpc.io', license=LICENSE, classifiers=CLASSIFIERS, long_description=open(README).read(), ext_modules=CYTHON_EXTENSION_MODULES, packages=list(PACKAGES), package_dir=PACKAGE_DIRECTORIES, package_data=PACKAGE_DATA, install_requires=INSTALL_REQUIRES, setup_requires=SETUP_REQUIRES, cmdclass=COMMAND_CLASS, ) grpc-1.30.2/src/000077500000000000000000000000001370425124100133165ustar00rootroot00000000000000grpc-1.30.2/src/abseil-cpp/000077500000000000000000000000001370425124100153355ustar00rootroot00000000000000grpc-1.30.2/src/abseil-cpp/gen_build_yaml.py000077500000000000000000000017461370425124100206740ustar00rootroot00000000000000#!/usr/bin/env python2.7 # Copyright 2019 gRPC 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 # # 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. import os import yaml BUILDS_YAML_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'preprocessed_builds.yaml') with open(BUILDS_YAML_PATH) as f: builds = yaml.load(f) for build in builds: build['build'] = 'private' build['build_system'] = [] build['language'] = 'c' build['secure'] = False print(yaml.dump({'libs': builds})) grpc-1.30.2/src/abseil-cpp/preprocessed_builds.yaml000066400000000000000000001320471370425124100222700ustar00rootroot00000000000000- cmake_target: absl::algorithm deps: - absl/base:config headers: - third_party/abseil-cpp/absl/algorithm/algorithm.h name: absl/algorithm:algorithm src: [] - cmake_target: absl::algorithm_container deps: - absl/algorithm:algorithm - absl/base:core_headers - absl/meta:type_traits headers: - third_party/abseil-cpp/absl/algorithm/container.h name: absl/algorithm:container src: [] - cmake_target: absl::atomic_hook deps: - absl/base:config - absl/base:core_headers headers: - third_party/abseil-cpp/absl/base/internal/atomic_hook.h name: absl/base:atomic_hook src: [] - cmake_target: absl::base deps: - absl/base:atomic_hook - absl/base:base_internal - absl/base:config - absl/base:core_headers - absl/base:dynamic_annotations - absl/base:log_severity - absl/base:raw_logging_internal - absl/base:spinlock_wait - absl/meta:type_traits headers: - third_party/abseil-cpp/absl/base/call_once.h - third_party/abseil-cpp/absl/base/casts.h - third_party/abseil-cpp/absl/base/internal/cycleclock.h - third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h - third_party/abseil-cpp/absl/base/internal/per_thread_tls.h - third_party/abseil-cpp/absl/base/internal/spinlock.h - third_party/abseil-cpp/absl/base/internal/sysinfo.h - third_party/abseil-cpp/absl/base/internal/thread_identity.h - third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h - third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h name: absl/base:base src: - third_party/abseil-cpp/absl/base/internal/cycleclock.cc - third_party/abseil-cpp/absl/base/internal/spinlock.cc - third_party/abseil-cpp/absl/base/internal/sysinfo.cc - third_party/abseil-cpp/absl/base/internal/thread_identity.cc - third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc - cmake_target: absl::base_internal deps: - absl/base:config - absl/meta:type_traits headers: - third_party/abseil-cpp/absl/base/internal/hide_ptr.h - third_party/abseil-cpp/absl/base/internal/identity.h - third_party/abseil-cpp/absl/base/internal/inline_variable.h - third_party/abseil-cpp/absl/base/internal/invoke.h - third_party/abseil-cpp/absl/base/internal/scheduling_mode.h name: absl/base:base_internal src: [] - cmake_target: absl::bits deps: - absl/base:config - absl/base:core_headers headers: - third_party/abseil-cpp/absl/base/internal/bits.h name: absl/base:bits src: [] - cmake_target: absl::config deps: [] headers: - third_party/abseil-cpp/absl/base/config.h - third_party/abseil-cpp/absl/base/options.h - third_party/abseil-cpp/absl/base/policy_checks.h name: absl/base:config src: [] - cmake_target: absl::core_headers deps: - absl/base:config headers: - third_party/abseil-cpp/absl/base/attributes.h - third_party/abseil-cpp/absl/base/const_init.h - third_party/abseil-cpp/absl/base/internal/thread_annotations.h - third_party/abseil-cpp/absl/base/macros.h - third_party/abseil-cpp/absl/base/optimization.h - third_party/abseil-cpp/absl/base/port.h - third_party/abseil-cpp/absl/base/thread_annotations.h name: absl/base:core_headers src: [] - cmake_target: absl::dynamic_annotations deps: [] headers: - third_party/abseil-cpp/absl/base/dynamic_annotations.h name: absl/base:dynamic_annotations src: - third_party/abseil-cpp/absl/base/dynamic_annotations.cc - cmake_target: absl::endian deps: - absl/base:config - absl/base:core_headers headers: - third_party/abseil-cpp/absl/base/internal/endian.h - third_party/abseil-cpp/absl/base/internal/unaligned_access.h name: absl/base:endian src: [] - cmake_target: absl::errno_saver deps: - absl/base:config headers: - third_party/abseil-cpp/absl/base/internal/errno_saver.h name: absl/base:errno_saver src: [] - cmake_target: absl::exponential_biased deps: - absl/base:config - absl/base:core_headers headers: - third_party/abseil-cpp/absl/base/internal/exponential_biased.h name: absl/base:exponential_biased src: - third_party/abseil-cpp/absl/base/internal/exponential_biased.cc - cmake_target: absl::log_severity deps: - absl/base:config - absl/base:core_headers headers: - third_party/abseil-cpp/absl/base/log_severity.h name: absl/base:log_severity src: - third_party/abseil-cpp/absl/base/log_severity.cc - cmake_target: absl::malloc_internal deps: - absl/base:base - absl/base:base_internal - absl/base:config - absl/base:core_headers - absl/base:dynamic_annotations - absl/base:raw_logging_internal headers: - third_party/abseil-cpp/absl/base/internal/direct_mmap.h - third_party/abseil-cpp/absl/base/internal/low_level_alloc.h name: absl/base:malloc_internal src: - third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc - cmake_target: absl::periodic_sampler deps: - absl/base:core_headers - absl/base:exponential_biased headers: - third_party/abseil-cpp/absl/base/internal/periodic_sampler.h name: absl/base:periodic_sampler src: - third_party/abseil-cpp/absl/base/internal/periodic_sampler.cc - cmake_target: absl::pretty_function deps: [] headers: - third_party/abseil-cpp/absl/base/internal/pretty_function.h name: absl/base:pretty_function src: [] - cmake_target: absl::raw_logging_internal deps: - absl/base:atomic_hook - absl/base:config - absl/base:core_headers - absl/base:log_severity headers: - third_party/abseil-cpp/absl/base/internal/raw_logging.h name: absl/base:raw_logging_internal src: - third_party/abseil-cpp/absl/base/internal/raw_logging.cc - cmake_target: absl::spinlock_wait deps: - absl/base:base_internal - absl/base:core_headers - absl/base:errno_saver headers: - third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc - third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc - third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc - third_party/abseil-cpp/absl/base/internal/spinlock_wait.h - third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc name: absl/base:spinlock_wait src: - third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc - cmake_target: absl::throw_delegate deps: - absl/base:config - absl/base:raw_logging_internal headers: - third_party/abseil-cpp/absl/base/internal/throw_delegate.h name: absl/base:throw_delegate src: - third_party/abseil-cpp/absl/base/internal/throw_delegate.cc - cmake_target: absl::btree deps: - absl/base:core_headers - absl/base:throw_delegate - absl/container:common - absl/container:compressed_tuple - absl/container:container_memory - absl/container:layout - absl/memory:memory - absl/meta:type_traits - absl/strings:strings - absl/types:compare - absl/utility:utility headers: - third_party/abseil-cpp/absl/container/btree_map.h - third_party/abseil-cpp/absl/container/btree_set.h - third_party/abseil-cpp/absl/container/internal/btree.h - third_party/abseil-cpp/absl/container/internal/btree_container.h name: absl/container:btree src: [] - cmake_target: absl::container_common deps: - absl/meta:type_traits - absl/types:optional headers: - third_party/abseil-cpp/absl/container/internal/common.h name: absl/container:common src: [] - cmake_target: absl::compressed_tuple deps: - absl/utility:utility headers: - third_party/abseil-cpp/absl/container/internal/compressed_tuple.h name: absl/container:compressed_tuple src: [] - cmake_target: absl::container_memory deps: - absl/memory:memory - absl/utility:utility headers: - third_party/abseil-cpp/absl/container/internal/container_memory.h name: absl/container:container_memory src: [] - cmake_target: absl::fixed_array deps: - absl/algorithm:algorithm - absl/base:core_headers - absl/base:dynamic_annotations - absl/base:throw_delegate - absl/container:compressed_tuple - absl/memory:memory headers: - third_party/abseil-cpp/absl/container/fixed_array.h name: absl/container:fixed_array src: [] - cmake_target: absl::flat_hash_map deps: - absl/algorithm:container - absl/container:container_memory - absl/container:hash_function_defaults - absl/container:raw_hash_map - absl/memory:memory headers: - third_party/abseil-cpp/absl/container/flat_hash_map.h name: absl/container:flat_hash_map src: [] - cmake_target: absl::flat_hash_set deps: - absl/algorithm:container - absl/base:core_headers - absl/container:container_memory - absl/container:hash_function_defaults - absl/container:raw_hash_set - absl/memory:memory headers: - third_party/abseil-cpp/absl/container/flat_hash_set.h name: absl/container:flat_hash_set src: [] - cmake_target: absl::hash_function_defaults deps: - absl/base:config - absl/hash:hash - absl/strings:strings headers: - third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h name: absl/container:hash_function_defaults src: [] - cmake_target: absl::hash_policy_traits deps: - absl/meta:type_traits headers: - third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h name: absl/container:hash_policy_traits src: [] - cmake_target: absl::hashtable_debug deps: - absl/container:hashtable_debug_hooks headers: - third_party/abseil-cpp/absl/container/internal/hashtable_debug.h name: absl/container:hashtable_debug src: [] - cmake_target: absl::hashtable_debug_hooks deps: - absl/base:config headers: - third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h name: absl/container:hashtable_debug_hooks src: [] - cmake_target: absl::hashtablez_sampler deps: - absl/base:base - absl/base:core_headers - absl/base:exponential_biased - absl/container:have_sse - absl/debugging:stacktrace - absl/memory:memory - absl/synchronization:synchronization - absl/utility:utility headers: - third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h name: absl/container:hashtablez_sampler src: - third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc - third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc - cmake_target: absl::have_sse deps: [] headers: - third_party/abseil-cpp/absl/container/internal/have_sse.h name: absl/container:have_sse src: [] - cmake_target: absl::inlined_vector deps: - absl/algorithm:algorithm - absl/base:core_headers - absl/base:throw_delegate - absl/container:inlined_vector_internal - absl/memory:memory headers: - third_party/abseil-cpp/absl/container/inlined_vector.h name: absl/container:inlined_vector src: [] - cmake_target: absl::inlined_vector_internal deps: - absl/base:core_headers - absl/container:compressed_tuple - absl/memory:memory - absl/meta:type_traits - absl/types:span headers: - third_party/abseil-cpp/absl/container/internal/inlined_vector.h name: absl/container:inlined_vector_internal src: [] - cmake_target: absl::layout deps: - absl/base:core_headers - absl/meta:type_traits - absl/strings:strings - absl/types:span - absl/utility:utility headers: - third_party/abseil-cpp/absl/container/internal/layout.h name: absl/container:layout src: [] - cmake_target: absl::node_hash_map deps: - absl/algorithm:container - absl/container:container_memory - absl/container:hash_function_defaults - absl/container:node_hash_policy - absl/container:raw_hash_map - absl/memory:memory headers: - third_party/abseil-cpp/absl/container/node_hash_map.h name: absl/container:node_hash_map src: [] - cmake_target: absl::node_hash_policy deps: - absl/base:config headers: - third_party/abseil-cpp/absl/container/internal/node_hash_policy.h name: absl/container:node_hash_policy src: [] - cmake_target: absl::node_hash_set deps: - absl/algorithm:container - absl/container:hash_function_defaults - absl/container:node_hash_policy - absl/container:raw_hash_set - absl/memory:memory headers: - third_party/abseil-cpp/absl/container/node_hash_set.h name: absl/container:node_hash_set src: [] - cmake_target: absl::raw_hash_map deps: - absl/base:throw_delegate - absl/container:container_memory - absl/container:raw_hash_set headers: - third_party/abseil-cpp/absl/container/internal/raw_hash_map.h name: absl/container:raw_hash_map src: [] - cmake_target: absl::raw_hash_set deps: - absl/base:bits - absl/base:config - absl/base:core_headers - absl/base:endian - absl/container:common - absl/container:compressed_tuple - absl/container:container_memory - absl/container:hash_policy_traits - absl/container:hashtable_debug_hooks - absl/container:hashtablez_sampler - absl/container:have_sse - absl/container:layout - absl/memory:memory - absl/meta:type_traits - absl/utility:utility headers: - third_party/abseil-cpp/absl/container/internal/raw_hash_set.h name: absl/container:raw_hash_set src: - third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc - cmake_target: absl::debugging_internal deps: - absl/base:config - absl/base:core_headers - absl/base:dynamic_annotations - absl/base:errno_saver - absl/base:raw_logging_internal headers: - third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h - third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h - third_party/abseil-cpp/absl/debugging/internal/vdso_support.h name: absl/debugging:debugging_internal src: - third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc - third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc - third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc - cmake_target: absl::demangle_internal deps: - absl/base:base - absl/base:config - absl/base:core_headers headers: - third_party/abseil-cpp/absl/debugging/internal/demangle.h name: absl/debugging:demangle_internal src: - third_party/abseil-cpp/absl/debugging/internal/demangle.cc - cmake_target: absl::examine_stack deps: - absl/base:config - absl/base:core_headers - absl/base:raw_logging_internal - absl/debugging:stacktrace - absl/debugging:symbolize headers: - third_party/abseil-cpp/absl/debugging/internal/examine_stack.h name: absl/debugging:examine_stack src: - third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc - cmake_target: absl::failure_signal_handler deps: - absl/base:base - absl/base:config - absl/base:core_headers - absl/base:errno_saver - absl/base:raw_logging_internal - absl/debugging:examine_stack - absl/debugging:stacktrace headers: - third_party/abseil-cpp/absl/debugging/failure_signal_handler.h name: absl/debugging:failure_signal_handler src: - third_party/abseil-cpp/absl/debugging/failure_signal_handler.cc - cmake_target: absl::leak_check deps: - absl/base:config - absl/base:core_headers headers: - third_party/abseil-cpp/absl/debugging/leak_check.h name: absl/debugging:leak_check src: - third_party/abseil-cpp/absl/debugging/leak_check.cc - cmake_target: absl::leak_check_disable deps: - absl/base:config headers: [] name: absl/debugging:leak_check_disable src: - third_party/abseil-cpp/absl/debugging/leak_check_disable.cc - cmake_target: absl::stacktrace deps: - absl/base:config - absl/base:core_headers - absl/debugging:debugging_internal headers: - third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc - third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc - third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h - third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc - third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc - third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc - third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc - third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc - third_party/abseil-cpp/absl/debugging/stacktrace.h name: absl/debugging:stacktrace src: - third_party/abseil-cpp/absl/debugging/stacktrace.cc - cmake_target: absl::symbolize deps: - absl/base:base - absl/base:config - absl/base:core_headers - absl/base:dynamic_annotations - absl/base:malloc_internal - absl/base:raw_logging_internal - absl/debugging:debugging_internal - absl/debugging:demangle_internal headers: - third_party/abseil-cpp/absl/debugging/internal/symbolize.h - third_party/abseil-cpp/absl/debugging/symbolize.h - third_party/abseil-cpp/absl/debugging/symbolize_elf.inc - third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc - third_party/abseil-cpp/absl/debugging/symbolize_win32.inc name: absl/debugging:symbolize src: - third_party/abseil-cpp/absl/debugging/symbolize.cc - cmake_target: absl::flags_config deps: - absl/base:config - absl/base:core_headers - absl/flags:path_util - absl/flags:program_name - absl/strings:strings - absl/synchronization:synchronization headers: - third_party/abseil-cpp/absl/flags/config.h - third_party/abseil-cpp/absl/flags/usage_config.h name: absl/flags:config src: - third_party/abseil-cpp/absl/flags/usage_config.cc - cmake_target: absl::flags deps: - absl/base:base - absl/base:config - absl/base:core_headers - absl/flags:config - absl/flags:flag_internal - absl/flags:handle - absl/flags:marshalling - absl/flags:registry - absl/strings:strings headers: - third_party/abseil-cpp/absl/flags/declare.h - third_party/abseil-cpp/absl/flags/flag.h name: absl/flags:flag src: - third_party/abseil-cpp/absl/flags/flag.cc - cmake_target: absl::flags_internal deps: - absl/base:base - absl/base:config - absl/base:core_headers - absl/flags:config - absl/flags:handle - absl/flags:registry - absl/memory:memory - absl/strings:strings - absl/synchronization:synchronization headers: - third_party/abseil-cpp/absl/flags/internal/flag.h name: absl/flags:flag_internal src: - third_party/abseil-cpp/absl/flags/internal/flag.cc - cmake_target: absl::flags_handle deps: - absl/base:config - absl/base:core_headers - absl/flags:config - absl/flags:marshalling - absl/strings:strings - absl/types:optional headers: - third_party/abseil-cpp/absl/flags/internal/commandlineflag.h name: absl/flags:handle src: [] - cmake_target: absl::flags_marshalling deps: - absl/base:config - absl/base:core_headers - absl/base:log_severity - absl/strings:str_format - absl/strings:strings headers: - third_party/abseil-cpp/absl/flags/marshalling.h name: absl/flags:marshalling src: - third_party/abseil-cpp/absl/flags/marshalling.cc - cmake_target: absl::flags_parse deps: - absl/base:config - absl/base:core_headers - absl/flags:config - absl/flags:flag - absl/flags:flag_internal - absl/flags:handle - absl/flags:program_name - absl/flags:registry - absl/flags:usage - absl/flags:usage_internal - absl/strings:strings - absl/synchronization:synchronization headers: - third_party/abseil-cpp/absl/flags/internal/parse.h - third_party/abseil-cpp/absl/flags/parse.h name: absl/flags:parse src: - third_party/abseil-cpp/absl/flags/parse.cc - cmake_target: absl::flags_path_util deps: - absl/base:config - absl/strings:strings headers: - third_party/abseil-cpp/absl/flags/internal/path_util.h name: absl/flags:path_util src: [] - cmake_target: absl::flags_program_name deps: - absl/base:config - absl/base:core_headers - absl/flags:path_util - absl/strings:strings - absl/synchronization:synchronization headers: - third_party/abseil-cpp/absl/flags/internal/program_name.h name: absl/flags:program_name src: - third_party/abseil-cpp/absl/flags/internal/program_name.cc - cmake_target: absl::flags_registry deps: - absl/base:config - absl/base:core_headers - absl/base:raw_logging_internal - absl/flags:config - absl/flags:handle - absl/strings:strings - absl/synchronization:synchronization headers: - third_party/abseil-cpp/absl/flags/internal/registry.h - third_party/abseil-cpp/absl/flags/internal/type_erased.h name: absl/flags:registry src: - third_party/abseil-cpp/absl/flags/internal/registry.cc - third_party/abseil-cpp/absl/flags/internal/type_erased.cc - cmake_target: absl::flags_usage deps: - absl/base:config - absl/base:core_headers - absl/flags:usage_internal - absl/strings:strings - absl/synchronization:synchronization headers: - third_party/abseil-cpp/absl/flags/usage.h name: absl/flags:usage src: - third_party/abseil-cpp/absl/flags/usage.cc - cmake_target: absl::flags_usage_internal deps: - absl/base:config - absl/base:core_headers - absl/flags:config - absl/flags:flag - absl/flags:flag_internal - absl/flags:handle - absl/flags:path_util - absl/flags:program_name - absl/flags:registry - absl/strings:strings headers: - third_party/abseil-cpp/absl/flags/internal/usage.h name: absl/flags:usage_internal src: - third_party/abseil-cpp/absl/flags/internal/usage.cc - cmake_target: absl::bind_front deps: - absl/base:base_internal - absl/container:compressed_tuple - absl/meta:type_traits - absl/utility:utility headers: - third_party/abseil-cpp/absl/functional/bind_front.h - third_party/abseil-cpp/absl/functional/internal/front_binder.h name: absl/functional:bind_front src: [] - cmake_target: absl::function_ref deps: - absl/base:base_internal - absl/meta:type_traits headers: - third_party/abseil-cpp/absl/functional/function_ref.h - third_party/abseil-cpp/absl/functional/internal/function_ref.h name: absl/functional:function_ref src: [] - cmake_target: absl::city deps: - absl/base:config - absl/base:core_headers - absl/base:endian headers: - third_party/abseil-cpp/absl/hash/internal/city.h name: absl/hash:city src: - third_party/abseil-cpp/absl/hash/internal/city.cc - cmake_target: absl::hash deps: - absl/base:core_headers - absl/base:endian - absl/container:fixed_array - absl/hash:city - absl/meta:type_traits - absl/numeric:int128 - absl/strings:strings - absl/types:optional - absl/types:variant - absl/utility:utility headers: - third_party/abseil-cpp/absl/hash/hash.h - third_party/abseil-cpp/absl/hash/internal/hash.h name: absl/hash:hash src: - third_party/abseil-cpp/absl/hash/internal/hash.cc - cmake_target: absl::memory deps: - absl/base:core_headers - absl/meta:type_traits headers: - third_party/abseil-cpp/absl/memory/memory.h name: absl/memory:memory src: [] - cmake_target: absl::type_traits deps: - absl/base:config headers: - third_party/abseil-cpp/absl/meta/type_traits.h name: absl/meta:type_traits src: [] - cmake_target: absl::int128 deps: - absl/base:config - absl/base:core_headers headers: - third_party/abseil-cpp/absl/numeric/int128.h - third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc - third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc name: absl/numeric:int128 src: - third_party/abseil-cpp/absl/numeric/int128.cc - cmake_target: absl::random_internal_distribution_caller deps: - absl/base:config headers: - third_party/abseil-cpp/absl/random/internal/distribution_caller.h name: absl/random/internal:distribution_caller src: [] - cmake_target: absl::random_internal_distributions deps: - absl/base:base - absl/meta:type_traits - absl/random/internal:distribution_caller - absl/random/internal:traits - absl/random/internal:uniform_helper - absl/strings:strings headers: - third_party/abseil-cpp/absl/random/internal/distributions.h name: absl/random/internal:distributions src: [] - cmake_target: absl::random_internal_fast_uniform_bits deps: - absl/base:config headers: - third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h name: absl/random/internal:fast_uniform_bits src: [] - cmake_target: absl::random_internal_fastmath deps: - absl/base:bits headers: - third_party/abseil-cpp/absl/random/internal/fastmath.h name: absl/random/internal:fastmath src: [] - cmake_target: absl::random_internal_generate_real deps: - absl/base:bits - absl/meta:type_traits - absl/random/internal:fastmath - absl/random/internal:traits headers: - third_party/abseil-cpp/absl/random/internal/generate_real.h name: absl/random/internal:generate_real src: [] - cmake_target: absl::random_internal_iostream_state_saver deps: - absl/meta:type_traits - absl/numeric:int128 headers: - third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h name: absl/random/internal:iostream_state_saver src: [] - cmake_target: absl::random_internal_mocking_bit_gen_base deps: - absl/random:random - absl/strings:strings headers: - third_party/abseil-cpp/absl/random/internal/mocking_bit_gen_base.h name: absl/random/internal:mocking_bit_gen_base src: [] - cmake_target: '' deps: - absl/base:core_headers - absl/base:raw_logging_internal - absl/random/internal:platform - absl/random/internal:randen_engine headers: - third_party/abseil-cpp/absl/random/internal/nanobenchmark.h name: absl/random/internal:nanobenchmark src: - third_party/abseil-cpp/absl/random/internal/nanobenchmark.cc - cmake_target: absl::random_internal_nonsecure_base deps: - absl/base:core_headers - absl/meta:type_traits - absl/random/internal:pool_urbg - absl/random/internal:salted_seed_seq - absl/random/internal:seed_material - absl/strings:strings - absl/types:optional - absl/types:span headers: - third_party/abseil-cpp/absl/random/internal/nonsecure_base.h name: absl/random/internal:nonsecure_base src: [] - cmake_target: absl::random_internal_pcg_engine deps: - absl/base:config - absl/meta:type_traits - absl/numeric:int128 - absl/random/internal:fastmath - absl/random/internal:iostream_state_saver headers: - third_party/abseil-cpp/absl/random/internal/pcg_engine.h name: absl/random/internal:pcg_engine src: [] - cmake_target: absl::random_internal_platform deps: - absl/base:config headers: - third_party/abseil-cpp/absl/random/internal/platform.h - third_party/abseil-cpp/absl/random/internal/randen-keys.inc - third_party/abseil-cpp/absl/random/internal/randen_traits.h name: absl/random/internal:platform src: [] - cmake_target: absl::random_internal_pool_urbg deps: - absl/base:base - absl/base:config - absl/base:core_headers - absl/base:endian - absl/base:raw_logging_internal - absl/random/internal:randen - absl/random/internal:seed_material - absl/random/internal:traits - absl/random:seed_gen_exception - absl/types:span headers: - third_party/abseil-cpp/absl/random/internal/pool_urbg.h name: absl/random/internal:pool_urbg src: - third_party/abseil-cpp/absl/random/internal/pool_urbg.cc - cmake_target: absl::random_internal_randen deps: - absl/base:raw_logging_internal - absl/random/internal:platform - absl/random/internal:randen_hwaes - absl/random/internal:randen_slow headers: - third_party/abseil-cpp/absl/random/internal/randen.h name: absl/random/internal:randen src: - third_party/abseil-cpp/absl/random/internal/randen.cc - cmake_target: absl::random_internal_randen_engine deps: - absl/meta:type_traits - absl/random/internal:iostream_state_saver - absl/random/internal:randen headers: - third_party/abseil-cpp/absl/random/internal/randen_engine.h name: absl/random/internal:randen_engine src: [] - cmake_target: absl::random_internal_randen_hwaes deps: - absl/base:config - absl/random/internal:platform - absl/random/internal:randen_hwaes_impl headers: - third_party/abseil-cpp/absl/random/internal/randen_detect.h - third_party/abseil-cpp/absl/random/internal/randen_hwaes.h name: absl/random/internal:randen_hwaes src: - third_party/abseil-cpp/absl/random/internal/randen_detect.cc - cmake_target: absl::random_internal_randen_hwaes_impl deps: - absl/base:config - absl/base:core_headers - absl/random/internal:platform headers: - third_party/abseil-cpp/absl/random/internal/randen_hwaes.h name: absl/random/internal:randen_hwaes_impl src: - third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc - cmake_target: absl::random_internal_randen_slow deps: - absl/base:config - absl/base:core_headers - absl/random/internal:platform headers: - third_party/abseil-cpp/absl/random/internal/randen_slow.h name: absl/random/internal:randen_slow src: - third_party/abseil-cpp/absl/random/internal/randen_slow.cc - cmake_target: absl::random_internal_salted_seed_seq deps: - absl/container:inlined_vector - absl/meta:type_traits - absl/random/internal:seed_material - absl/types:optional - absl/types:span headers: - third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h name: absl/random/internal:salted_seed_seq src: [] - cmake_target: absl::random_internal_seed_material deps: - absl/base:core_headers - absl/base:raw_logging_internal - absl/random/internal:fast_uniform_bits - absl/strings:strings - absl/types:optional - absl/types:span headers: - third_party/abseil-cpp/absl/random/internal/seed_material.h name: absl/random/internal:seed_material src: - third_party/abseil-cpp/absl/random/internal/seed_material.cc - cmake_target: absl::random_internal_traits deps: - absl/base:config headers: - third_party/abseil-cpp/absl/random/internal/traits.h name: absl/random/internal:traits src: [] - cmake_target: absl::random_internal_uniform_helper deps: - absl/meta:type_traits headers: - third_party/abseil-cpp/absl/random/internal/uniform_helper.h name: absl/random/internal:uniform_helper src: [] - cmake_target: absl::random_internal_wide_multiply deps: - absl/base:bits - absl/base:config - absl/numeric:int128 - absl/random/internal:traits headers: - third_party/abseil-cpp/absl/random/internal/wide_multiply.h name: absl/random/internal:wide_multiply src: [] - cmake_target: absl::random_bit_gen_ref deps: - absl/base:core_headers - absl/meta:type_traits - absl/random/internal:distribution_caller - absl/random/internal:fast_uniform_bits - absl/random/internal:mocking_bit_gen_base headers: - third_party/abseil-cpp/absl/random/bit_gen_ref.h name: absl/random:bit_gen_ref src: [] - cmake_target: absl::random_distributions deps: - absl/base:base_internal - absl/base:config - absl/base:core_headers - absl/meta:type_traits - absl/random/internal:distributions - absl/random/internal:fast_uniform_bits - absl/random/internal:fastmath - absl/random/internal:generate_real - absl/random/internal:iostream_state_saver - absl/random/internal:traits - absl/random/internal:uniform_helper - absl/random/internal:wide_multiply - absl/strings:strings - absl/types:span headers: - third_party/abseil-cpp/absl/random/bernoulli_distribution.h - third_party/abseil-cpp/absl/random/beta_distribution.h - third_party/abseil-cpp/absl/random/discrete_distribution.h - third_party/abseil-cpp/absl/random/distribution_format_traits.h - third_party/abseil-cpp/absl/random/distributions.h - third_party/abseil-cpp/absl/random/exponential_distribution.h - third_party/abseil-cpp/absl/random/gaussian_distribution.h - third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h - third_party/abseil-cpp/absl/random/poisson_distribution.h - third_party/abseil-cpp/absl/random/uniform_int_distribution.h - third_party/abseil-cpp/absl/random/uniform_real_distribution.h - third_party/abseil-cpp/absl/random/zipf_distribution.h name: absl/random:distributions src: - third_party/abseil-cpp/absl/random/discrete_distribution.cc - third_party/abseil-cpp/absl/random/gaussian_distribution.cc - cmake_target: absl::random_random deps: - absl/random/internal:nonsecure_base - absl/random/internal:pcg_engine - absl/random/internal:pool_urbg - absl/random/internal:randen_engine - absl/random:distributions - absl/random:seed_sequences headers: - third_party/abseil-cpp/absl/random/random.h name: absl/random:random src: [] - cmake_target: absl::random_seed_gen_exception deps: - absl/base:config headers: - third_party/abseil-cpp/absl/random/seed_gen_exception.h name: absl/random:seed_gen_exception src: - third_party/abseil-cpp/absl/random/seed_gen_exception.cc - cmake_target: absl::random_seed_sequences deps: - absl/container:inlined_vector - absl/random/internal:nonsecure_base - absl/random/internal:pool_urbg - absl/random/internal:salted_seed_seq - absl/random/internal:seed_material - absl/random:seed_gen_exception - absl/types:span headers: - third_party/abseil-cpp/absl/random/seed_sequences.h name: absl/random:seed_sequences src: - third_party/abseil-cpp/absl/random/seed_sequences.cc - cmake_target: absl::status deps: - absl/base:config - absl/base:core_headers - absl/base:raw_logging_internal - absl/container:inlined_vector - absl/debugging:stacktrace - absl/debugging:symbolize - absl/strings:cord - absl/strings:str_format - absl/strings:strings - absl/types:optional headers: - third_party/abseil-cpp/absl/status/status.h - third_party/abseil-cpp/absl/status/status_payload_printer.h name: absl/status:status src: - third_party/abseil-cpp/absl/status/status.cc - third_party/abseil-cpp/absl/status/status_payload_printer.cc - cmake_target: absl::cord deps: - absl/base:base - absl/base:base_internal - absl/base:core_headers - absl/base:endian - absl/base:raw_logging_internal - absl/container:fixed_array - absl/container:inlined_vector - absl/functional:function_ref - absl/meta:type_traits - absl/strings:cord_internal - absl/strings:internal - absl/strings:str_format - absl/strings:strings headers: - third_party/abseil-cpp/absl/strings/cord.h name: absl/strings:cord src: - third_party/abseil-cpp/absl/strings/cord.cc - cmake_target: absl::cord deps: - absl/meta:type_traits - absl/strings:strings headers: - third_party/abseil-cpp/absl/strings/internal/cord_internal.h name: absl/strings:cord_internal src: [] - cmake_target: absl::strings_internal deps: - absl/base:config - absl/base:core_headers - absl/base:endian - absl/base:raw_logging_internal - absl/meta:type_traits headers: - third_party/abseil-cpp/absl/strings/internal/char_map.h - third_party/abseil-cpp/absl/strings/internal/escaping.h - third_party/abseil-cpp/absl/strings/internal/ostringstream.h - third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h - third_party/abseil-cpp/absl/strings/internal/utf8.h name: absl/strings:internal src: - third_party/abseil-cpp/absl/strings/internal/escaping.cc - third_party/abseil-cpp/absl/strings/internal/ostringstream.cc - third_party/abseil-cpp/absl/strings/internal/utf8.cc - cmake_target: absl::str_format deps: - absl/strings:str_format_internal headers: - third_party/abseil-cpp/absl/strings/str_format.h name: absl/strings:str_format src: [] - cmake_target: absl::str_format_internal deps: - absl/base:config - absl/base:core_headers - absl/meta:type_traits - absl/numeric:int128 - absl/strings:strings - absl/types:span headers: - third_party/abseil-cpp/absl/strings/internal/str_format/arg.h - third_party/abseil-cpp/absl/strings/internal/str_format/bind.h - third_party/abseil-cpp/absl/strings/internal/str_format/checker.h - third_party/abseil-cpp/absl/strings/internal/str_format/extension.h - third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h - third_party/abseil-cpp/absl/strings/internal/str_format/output.h - third_party/abseil-cpp/absl/strings/internal/str_format/parser.h name: absl/strings:str_format_internal src: - third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc - third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc - third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc - third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc - third_party/abseil-cpp/absl/strings/internal/str_format/output.cc - third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc - cmake_target: absl::strings deps: - absl/base:base - absl/base:bits - absl/base:config - absl/base:core_headers - absl/base:endian - absl/base:raw_logging_internal - absl/base:throw_delegate - absl/memory:memory - absl/meta:type_traits - absl/numeric:int128 - absl/strings:internal headers: - third_party/abseil-cpp/absl/strings/ascii.h - third_party/abseil-cpp/absl/strings/charconv.h - third_party/abseil-cpp/absl/strings/escaping.h - third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h - third_party/abseil-cpp/absl/strings/internal/charconv_parse.h - third_party/abseil-cpp/absl/strings/internal/memutil.h - third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h - third_party/abseil-cpp/absl/strings/internal/str_join_internal.h - third_party/abseil-cpp/absl/strings/internal/str_split_internal.h - third_party/abseil-cpp/absl/strings/match.h - third_party/abseil-cpp/absl/strings/numbers.h - third_party/abseil-cpp/absl/strings/str_cat.h - third_party/abseil-cpp/absl/strings/str_join.h - third_party/abseil-cpp/absl/strings/str_replace.h - third_party/abseil-cpp/absl/strings/str_split.h - third_party/abseil-cpp/absl/strings/string_view.h - third_party/abseil-cpp/absl/strings/strip.h - third_party/abseil-cpp/absl/strings/substitute.h name: absl/strings:strings src: - third_party/abseil-cpp/absl/strings/ascii.cc - third_party/abseil-cpp/absl/strings/charconv.cc - third_party/abseil-cpp/absl/strings/escaping.cc - third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc - third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc - third_party/abseil-cpp/absl/strings/internal/memutil.cc - third_party/abseil-cpp/absl/strings/match.cc - third_party/abseil-cpp/absl/strings/numbers.cc - third_party/abseil-cpp/absl/strings/str_cat.cc - third_party/abseil-cpp/absl/strings/str_replace.cc - third_party/abseil-cpp/absl/strings/str_split.cc - third_party/abseil-cpp/absl/strings/string_view.cc - third_party/abseil-cpp/absl/strings/substitute.cc - cmake_target: absl::graphcycles_internal deps: - absl/base:base - absl/base:base_internal - absl/base:config - absl/base:core_headers - absl/base:malloc_internal - absl/base:raw_logging_internal headers: - third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h name: absl/synchronization:graphcycles_internal src: - third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc - cmake_target: absl::kernel_timeout_internal deps: - absl/base:core_headers - absl/base:raw_logging_internal - absl/time:time headers: - third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h name: absl/synchronization:kernel_timeout_internal src: [] - cmake_target: absl::synchronization deps: - absl/base:atomic_hook - absl/base:base - absl/base:base_internal - absl/base:config - absl/base:core_headers - absl/base:dynamic_annotations - absl/base:malloc_internal - absl/base:raw_logging_internal - absl/debugging:stacktrace - absl/debugging:symbolize - absl/synchronization:graphcycles_internal - absl/synchronization:kernel_timeout_internal - absl/time:time headers: - third_party/abseil-cpp/absl/synchronization/barrier.h - third_party/abseil-cpp/absl/synchronization/blocking_counter.h - third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h - third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc - third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h - third_party/abseil-cpp/absl/synchronization/internal/waiter.h - third_party/abseil-cpp/absl/synchronization/mutex.h - third_party/abseil-cpp/absl/synchronization/notification.h name: absl/synchronization:synchronization src: - third_party/abseil-cpp/absl/synchronization/barrier.cc - third_party/abseil-cpp/absl/synchronization/blocking_counter.cc - third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc - third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc - third_party/abseil-cpp/absl/synchronization/internal/waiter.cc - third_party/abseil-cpp/absl/synchronization/mutex.cc - third_party/abseil-cpp/absl/synchronization/notification.cc - cmake_target: absl::civil_time deps: - absl/base:config headers: - third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h - third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h name: absl/time/internal/cctz:civil_time src: - third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc - cmake_target: absl::time_zone deps: - absl/base:config - absl/time/internal/cctz:civil_time headers: - third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h - third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h - third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h - third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h - third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h - third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h - third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h - third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h - third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h name: absl/time/internal/cctz:time_zone src: - third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc - third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc - third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc - third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc - third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc - third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc - third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc - third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc - third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc - cmake_target: absl::time deps: - absl/base:base - absl/base:core_headers - absl/base:raw_logging_internal - absl/numeric:int128 - absl/strings:strings - absl/time/internal/cctz:civil_time - absl/time/internal/cctz:time_zone headers: - third_party/abseil-cpp/absl/time/civil_time.h - third_party/abseil-cpp/absl/time/clock.h - third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc - third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc - third_party/abseil-cpp/absl/time/time.h name: absl/time:time src: - third_party/abseil-cpp/absl/time/civil_time.cc - third_party/abseil-cpp/absl/time/clock.cc - third_party/abseil-cpp/absl/time/duration.cc - third_party/abseil-cpp/absl/time/format.cc - third_party/abseil-cpp/absl/time/time.cc - cmake_target: absl::any deps: - absl/base:config - absl/base:core_headers - absl/meta:type_traits - absl/types:bad_any_cast - absl/utility:utility headers: - third_party/abseil-cpp/absl/types/any.h name: absl/types:any src: [] - cmake_target: absl::bad_any_cast deps: - absl/base:config - absl/types:bad_any_cast_impl headers: - third_party/abseil-cpp/absl/types/bad_any_cast.h name: absl/types:bad_any_cast src: [] - cmake_target: absl::bad_any_cast_impl deps: - absl/base:config - absl/base:raw_logging_internal headers: - third_party/abseil-cpp/absl/types/bad_any_cast.h name: absl/types:bad_any_cast_impl src: - third_party/abseil-cpp/absl/types/bad_any_cast.cc - cmake_target: absl::bad_optional_access deps: - absl/base:config - absl/base:raw_logging_internal headers: - third_party/abseil-cpp/absl/types/bad_optional_access.h name: absl/types:bad_optional_access src: - third_party/abseil-cpp/absl/types/bad_optional_access.cc - cmake_target: absl::bad_variant_access deps: - absl/base:config - absl/base:raw_logging_internal headers: - third_party/abseil-cpp/absl/types/bad_variant_access.h name: absl/types:bad_variant_access src: - third_party/abseil-cpp/absl/types/bad_variant_access.cc - cmake_target: absl::compare deps: - absl/base:core_headers - absl/meta:type_traits headers: - third_party/abseil-cpp/absl/types/compare.h name: absl/types:compare src: [] - cmake_target: absl::optional deps: - absl/base:base_internal - absl/base:config - absl/base:core_headers - absl/memory:memory - absl/meta:type_traits - absl/types:bad_optional_access - absl/utility:utility headers: - third_party/abseil-cpp/absl/types/internal/optional.h - third_party/abseil-cpp/absl/types/optional.h name: absl/types:optional src: [] - cmake_target: absl::span deps: - absl/algorithm:algorithm - absl/base:core_headers - absl/base:throw_delegate - absl/meta:type_traits headers: - third_party/abseil-cpp/absl/types/internal/span.h - third_party/abseil-cpp/absl/types/span.h name: absl/types:span src: [] - cmake_target: absl::variant deps: - absl/base:base_internal - absl/base:config - absl/base:core_headers - absl/meta:type_traits - absl/types:bad_variant_access - absl/utility:utility headers: - third_party/abseil-cpp/absl/types/internal/variant.h - third_party/abseil-cpp/absl/types/variant.h name: absl/types:variant src: [] - cmake_target: absl::utility deps: - absl/base:base_internal - absl/base:config - absl/meta:type_traits headers: - third_party/abseil-cpp/absl/utility/utility.h name: absl/utility:utility src: [] grpc-1.30.2/src/abseil-cpp/preprocessed_builds.yaml.gen.py000077500000000000000000000155631370425124100234750ustar00rootroot00000000000000#!/usr/bin/env python3 # Copyright 2019 gRPC 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 # # 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. import collections import os import re import subprocess import xml.etree.ElementTree as ET import yaml ABSEIL_PATH = "third_party/abseil-cpp" OUTPUT_PATH = "src/abseil-cpp/preprocessed_builds.yaml" CAPITAL_WORD = re.compile("[A-Z]+") ABSEIL_CMAKE_RULE_BEGIN = re.compile("^absl_cc_.*\(", re.MULTILINE) ABSEIL_CMAKE_RULE_END = re.compile("^\)", re.MULTILINE) # Rule object representing the rule of Bazel BUILD. Rule = collections.namedtuple( "Rule", "type name package srcs hdrs textual_hdrs deps visibility testonly") def get_elem_value(elem, name): """Returns the value of XML element with the given name.""" for child in elem: if child.attrib.get("name") == name: if child.tag == "string": return child.attrib.get("value") elif child.tag == "boolean": return child.attrib.get("value") == "true" elif child.tag == "list": return [nested_child.attrib.get("value") for nested_child in child] else: raise "Cannot recognize tag: " + child.tag return None def normalize_paths(paths): """Returns the list of normalized path.""" # e.g. ["//absl/strings:dir/header.h"] -> ["absl/strings/dir/header.h"] return [path.lstrip("/").replace(":", "/") for path in paths] def parse_bazel_rule(elem, package): """Returns a rule from bazel XML rule.""" return Rule( type=elem.attrib["class"], name=get_elem_value(elem, "name"), package=package, srcs=normalize_paths(get_elem_value(elem, "srcs") or []), hdrs=normalize_paths(get_elem_value(elem, "hdrs") or []), textual_hdrs=normalize_paths(get_elem_value(elem, "textual_hdrs") or []), deps=get_elem_value(elem, "deps") or [], visibility=get_elem_value(elem, "visibility") or [], testonly=get_elem_value(elem, "testonly") or False) def read_bazel_build(package): """Runs bazel query on given package file and returns all cc rules.""" result = subprocess.check_output( ["bazel", "query", package + ":all", "--output", "xml"]) root = ET.fromstring(result) return [ parse_bazel_rule(elem, package) for elem in root if elem.tag == "rule" and elem.attrib["class"].startswith("cc_") ] def collect_bazel_rules(root_path): """Collects and returns all bazel rules from root path recursively.""" rules = [] for cur, _, _ in os.walk(root_path): build_path = os.path.join(cur, "BUILD.bazel") if os.path.exists(build_path): rules.extend(read_bazel_build("//" + cur)) return rules def parse_cmake_rule(rule, package): """Returns a rule from absl cmake rule. Reference: https://github.com/abseil/abseil-cpp/blob/master/CMake/AbseilHelpers.cmake """ kv = {} bucket = None lines = rule.splitlines() for line in lines[1:-1]: if CAPITAL_WORD.match(line.strip()): bucket = kv.setdefault(line.strip(), []) else: if bucket is not None: bucket.append(line.strip()) else: raise ValueError("Illegal syntax: {}".format(rule)) return Rule( type=lines[0].rstrip("("), name="absl::" + kv["NAME"][0], package=package, srcs=[package + "/" + f.strip('"') for f in kv.get("SRCS", [])], hdrs=[package + "/" + f.strip('"') for f in kv.get("HDRS", [])], textual_hdrs=[], deps=kv.get("DEPS", []), visibility="PUBLIC" in kv, testonly="TESTONLY" in kv, ) def read_cmake_build(build_path, package): """Parses given CMakeLists.txt file and returns all cc rules.""" rules = [] with open(build_path, "r") as f: src = f.read() for begin_mo in ABSEIL_CMAKE_RULE_BEGIN.finditer(src): end_mo = ABSEIL_CMAKE_RULE_END.search(src[begin_mo.start(0):]) expr = src[begin_mo.start(0):begin_mo.start(0) + end_mo.start(0) + 1] rules.append(parse_cmake_rule(expr, package)) return rules def collect_cmake_rules(root_path): """Collects and returns all cmake rules from root path recursively.""" rules = [] for cur, _, _ in os.walk(root_path): build_path = os.path.join(cur, "CMakeLists.txt") if os.path.exists(build_path): rules.extend(read_cmake_build(build_path, cur)) return rules def pairing_bazel_and_cmake_rules(bazel_rules, cmake_rules): """Returns a pair map between bazel rules and cmake rules based on the similarity of the file list in the rule. This is because cmake build and bazel build of abseil are not identical. """ pair_map = {} for rule in bazel_rules: best_crule, best_similarity = None, 0 for crule in cmake_rules: similarity = len( set(rule.srcs + rule.hdrs + rule.textual_hdrs).intersection( set(crule.srcs + crule.hdrs + crule.textual_hdrs))) if similarity > best_similarity: best_crule, best_similarity = crule, similarity if best_crule: pair_map[(rule.package, rule.name)] = best_crule.name return pair_map def resolve_hdrs(files): return [ABSEIL_PATH + "/" + f for f in files if f.endswith((".h", ".inc"))] def resolve_srcs(files): return [ABSEIL_PATH + "/" + f for f in files if f.endswith(".cc")] def resolve_deps(targets): return [(t[2:] if t.startswith("//") else t) for t in targets] def generate_builds(root_path): """Generates builds from all BUILD files under absl directory.""" bazel_rules = list( filter(lambda r: r.type == "cc_library" and not r.testonly, collect_bazel_rules(root_path))) cmake_rules = list( filter(lambda r: r.type == "absl_cc_library" and not r.testonly, collect_cmake_rules(root_path))) pair_map = pairing_bazel_and_cmake_rules(bazel_rules, cmake_rules) builds = [] for rule in sorted(bazel_rules, key=lambda r: r.package[2:] + ":" + r.name): p = { "name": rule.package[2:] + ":" + rule.name, "cmake_target": pair_map.get((rule.package, rule.name)) or "", "headers": sorted(resolve_hdrs(rule.srcs + rule.hdrs + rule.textual_hdrs)), "src": sorted(resolve_srcs(rule.srcs + rule.hdrs + rule.textual_hdrs)), "deps": sorted(resolve_deps(rule.deps)), } builds.append(p) return builds def main(): previous_dir = os.getcwd() os.chdir(ABSEIL_PATH) builds = generate_builds("absl") os.chdir(previous_dir) with open(OUTPUT_PATH, 'w') as outfile: outfile.write(yaml.dump(builds, indent=2, sort_keys=True)) if __name__ == "__main__": main() grpc-1.30.2/src/android/000077500000000000000000000000001370425124100147365ustar00rootroot00000000000000grpc-1.30.2/src/android/test/000077500000000000000000000000001370425124100157155ustar00rootroot00000000000000grpc-1.30.2/src/android/test/interop/000077500000000000000000000000001370425124100173755ustar00rootroot00000000000000grpc-1.30.2/src/android/test/interop/.gitignore000066400000000000000000000001661370425124100213700ustar00rootroot00000000000000*.iml .gradle /local.properties /.idea/workspace.xml /.idea/libraries .DS_Store /build /captures .externalNativeBuild grpc-1.30.2/src/android/test/interop/README.md000066400000000000000000000017451370425124100206630ustar00rootroot00000000000000gRPC on Android ============== Note: Building the protobuf dependency for Android requires https://github.com/google/protobuf/pull/3878. This fix will be in the next protobuf release, but until then must be manually patched in to `third_party/protobuf` to build gRPC for Android. PREREQUISITES ------------- - Android SDK - Android NDK - `protoc` and `grpc_cpp_plugin` binaries on the host system INSTALL ------- The example application can be built via Android Studio or on the command line using `gradle`: ```sh $ ./gradlew installDebug ``` INSTRUMENTATION TESTS --------------------- The instrumentation tests can be run via the following `gradle` command. This requires an emulator already running on your computer. ``` $ ./gradlew connectedAndroidTest \ -Pandroid.testInstrumentationRunnerArguments.server_host=grpc-test.sandbox.googleapis.com \ -Pandroid.testInstrumentationRunnerArguments.server_port=443 \ -Pandroid.testInstrumentationRunnerArguments.use_tls=true ``` grpc-1.30.2/src/android/test/interop/app/000077500000000000000000000000001370425124100201555ustar00rootroot00000000000000grpc-1.30.2/src/android/test/interop/app/.gitignore000066400000000000000000000000071370425124100221420ustar00rootroot00000000000000/build grpc-1.30.2/src/android/test/interop/app/CMakeLists.txt000066400000000000000000000075511370425124100227250ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.4.1) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") set(PROTOBUF_PROTOC_EXECUTABLE "/usr/local/bin/protoc" CACHE STRING "Protoc binary on host") set(gRPC_CPP_PLUGIN_EXECUTABLE "/usr/local/bin/grpc_cpp_plugin" CACHE STRING "gRPC CPP plugin binary on host") set(GRPC_SRC_DIR ../../../../../) set(GRPC_BUILD_DIR ../grpc/outputs/${ANDROID_ABI}) file(MAKE_DIRECTORY ${GRPC_BUILD_DIR}) add_subdirectory(${GRPC_SRC_DIR} ${GRPC_BUILD_DIR}) #include_directories(${GRPC_SRC_DIR}/include) include_directories(${GRPC_SRC_DIR}) include_directories(${_gRPC_ABSL_INCLUDE_DIR}) set(GRPC_PROTO_GENS_DIR ${CMAKE_BINARY_DIR}/gens) file(MAKE_DIRECTORY ${GRPC_PROTO_GENS_DIR}) include_directories(${GRPC_PROTO_GENS_DIR}) function(android_protobuf_grpc_generate_cpp SRC_FILES HDR_FILES INCLUDE_ROOT) if(NOT ARGN) message(SEND_ERROR "Error: android_protobuf_grpc_generate_cpp() called without any proto files") return() endif() set(${SRC_FILES}) set(${HDR_FILES}) set(PROTOBUF_INCLUDE_PATH -I ${INCLUDE_ROOT}) foreach(FIL ${ARGN}) get_filename_component(ABS_FIL ${FIL} ABSOLUTE) get_filename_component(FIL_WE ${FIL} NAME_WE) file(RELATIVE_PATH REL_FIL ${CMAKE_CURRENT_SOURCE_DIR}/${INCLUDE_ROOT} ${ABS_FIL}) get_filename_component(REL_DIR ${REL_FIL} DIRECTORY) set(RELFIL_WE "${REL_DIR}/${FIL_WE}") list(APPEND ${SRC_FILES} "${GRPC_PROTO_GENS_DIR}/${RELFIL_WE}.pb.cc") list(APPEND ${HDR_FILES} "${GRPC_PROTO_GENS_DIR}/${RELFIL_WE}.pb.h") list(APPEND ${SRC_FILES} "${GRPC_PROTO_GENS_DIR}/${RELFIL_WE}.grpc.pb.cc") list(APPEND ${HDR_FILES} "${GRPC_PROTO_GENS_DIR}/${RELFIL_WE}.grpc.pb.h") add_custom_command( OUTPUT "${GRPC_PROTO_GENS_DIR}/${RELFIL_WE}.grpc.pb.cc" "${GRPC_PROTO_GENS_DIR}/${RELFIL_WE}.grpc.pb.h" "${GRPC_PROTO_GENS_DIR}/${RELFIL_WE}.pb.cc" "${GRPC_PROTO_GENS_DIR}/${RELFIL_WE}.pb.h" COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} ARGS --grpc_out=${GRPC_PROTO_GENS_DIR} --cpp_out=${GRPC_PROTO_GENS_DIR} --plugin=protoc-gen-grpc=${gRPC_CPP_PLUGIN_EXECUTABLE} ${PROTOBUF_INCLUDE_PATH} ${REL_FIL} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} DEPENDS ${PROTOBUF_PROTOC_EXECUTABLE} ${gRPC_CPP_PLUGIN_EXECUTABLE} ${ABS_FIL} ) endforeach() set_source_files_properties(${${SRC_FILES}} ${${HDR_FILES}} PROPERTIES GENERATED TRUE) set(${SRC_FILES} ${${SRC_FILES}} PARENT_SCOPE) set(${HDR_FILES} ${${HDR_FILES}} PARENT_SCOPE) endfunction() set(PROTO_BASE_DIR ${GRPC_SRC_DIR}/examples/protos) android_protobuf_grpc_generate_cpp( MESSAGES_PROTO_SRCS MESSAGES_PROTO_HDRS ${GRPC_SRC_DIR} ${GRPC_SRC_DIR}/src/proto/grpc/testing/messages.proto) add_library(messages_proto_lib SHARED ${MESSAGES_PROTO_SRCS} ${MESSAGES_PROTO_HDRS}) target_link_libraries(messages_proto_lib libprotobuf grpc++ android log) android_protobuf_grpc_generate_cpp( EMPTY_PROTO_SRCS EMPTY_PROTO_HDRS ${GRPC_SRC_DIR} ${GRPC_SRC_DIR}/src/proto/grpc/testing/empty.proto) add_library(empty_proto_lib SHARED ${EMPTY_PROTO_SRCS} ${EMPTY_PROTO_HDRS}) target_link_libraries(empty_proto_lib libprotobuf grpc++ android log) android_protobuf_grpc_generate_cpp( TEST_PROTO_SRCS TEST_PROTO_HDRS ${GRPC_SRC_DIR} ${GRPC_SRC_DIR}/src/proto/grpc/testing/test.proto) add_library(test_proto_lib SHARED ${TEST_PROTO_SRCS} ${TEST_PROTO_HDRS}) target_link_libraries(test_proto_lib libprotobuf grpc++ empty_proto_lib messages_proto_lib android log) find_library(log-lib log) add_library(grpc-interop SHARED src/main/cpp/grpc-interop.cc ${GRPC_SRC_DIR}/test/cpp/interop/interop_client.h ${GRPC_SRC_DIR}/test/cpp/interop/interop_client.cc ${GRPC_SRC_DIR}/test/core/util/histogram.h ${GRPC_SRC_DIR}/test/core/util/histogram.cc) target_link_libraries(grpc-interop messages_proto_lib empty_proto_lib test_proto_lib android ${log-lib}) grpc-1.30.2/src/android/test/interop/app/build.gradle000066400000000000000000000040331370425124100224340ustar00rootroot00000000000000apply plugin: 'com.android.application' android { compileSdkVersion 26 defaultConfig { applicationId "io.grpc.android.interop.cpp" minSdkVersion 14 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" externalNativeBuild { cmake { // The paths to the protoc and grpc_cpp_plugin binaries on the host system (codegen // is not cross-compiled to Android) def protoc = project.hasProperty('protoc') ? project.property('protoc') : '/usr/local/bin/protoc' def grpc_cpp_plugin = project.hasProperty('grpc_cpp_plugin') ? project.property('grpc_cpp_plugin') : '/usr/local/bin/grpc_cpp_plugin' cppFlags "-std=c++14 -frtti -fexceptions" arguments '-DANDROID_STL=c++_shared' arguments '-DRUN_HAVE_POSIX_REGEX=0' arguments '-DRUN_HAVE_STD_REGEX=0' arguments '-DRUN_HAVE_STEADY_CLOCK=0' arguments '-Dprotobuf_BUILD_PROTOC_BINARIES=off' arguments '-DgRPC_BUILD_CODEGEN=off' arguments '-DPROTOBUF_PROTOC_EXECUTABLE=' + protoc arguments '-DgRPC_CPP_PLUGIN_EXECUTABLE=' + grpc_cpp_plugin } } } buildTypes { debug { minifyEnabled false } release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } externalNativeBuild { cmake { path "CMakeLists.txt" } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:26.1.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } grpc-1.30.2/src/android/test/interop/app/proguard-rules.pro000066400000000000000000000013571370425124100236600ustar00rootroot00000000000000# Add project specific ProGuard rules here. # You can control the set of applied configuration files using the # proguardFiles setting in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} # Uncomment this to preserve the line number information for # debugging stack traces. #-keepattributes SourceFile,LineNumberTable # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile grpc-1.30.2/src/android/test/interop/app/src/000077500000000000000000000000001370425124100207445ustar00rootroot00000000000000grpc-1.30.2/src/android/test/interop/app/src/androidTest/000077500000000000000000000000001370425124100232245ustar00rootroot00000000000000grpc-1.30.2/src/android/test/interop/app/src/androidTest/java/000077500000000000000000000000001370425124100241455ustar00rootroot00000000000000grpc-1.30.2/src/android/test/interop/app/src/androidTest/java/io/000077500000000000000000000000001370425124100245545ustar00rootroot00000000000000grpc-1.30.2/src/android/test/interop/app/src/androidTest/java/io/grpc/000077500000000000000000000000001370425124100255075ustar00rootroot00000000000000grpc-1.30.2/src/android/test/interop/app/src/androidTest/java/io/grpc/interop/000077500000000000000000000000001370425124100271675ustar00rootroot00000000000000grpc-1.30.2/src/android/test/interop/app/src/androidTest/java/io/grpc/interop/cpp/000077500000000000000000000000001370425124100277515ustar00rootroot00000000000000grpc-1.30.2/src/android/test/interop/app/src/androidTest/java/io/grpc/interop/cpp/InteropTest.java000066400000000000000000000042601370425124100330760ustar00rootroot00000000000000/* * Copyright 2018, gRPC Authors All rights reserved. * * 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. */ package io.grpc.interop.cpp; import static junit.framework.Assert.assertTrue; import android.content.Context; import android.support.test.InstrumentationRegistry; import android.support.test.runner.AndroidJUnit4; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) public class InteropTest { private String host; private int port; private boolean useTls; @Before public void setUp() throws Exception { host = InstrumentationRegistry.getArguments() .getString("server_host", "grpc-test.sandbox.googleapis.com"); port = Integer.parseInt(InstrumentationRegistry.getArguments().getString("server_port", "443")); useTls = Boolean.parseBoolean(InstrumentationRegistry.getArguments().getString("use_tls", "true")); } @Test public void emptyUnary() { assertTrue(InteropActivity.doEmpty(host, port, useTls)); } @Test public void largeUnary() { assertTrue(InteropActivity.doLargeUnary(host, port, useTls)); } @Test public void emptyStream() { assertTrue(InteropActivity.doEmptyStream(host, port, useTls)); } @Test public void requestStreaming() { assertTrue(InteropActivity.doRequestStreaming(host, port, useTls)); } @Test public void responseStreaming() { assertTrue(InteropActivity.doResponseStreaming(host, port, useTls)); } @Test public void pingPong() { assertTrue(InteropActivity.doPingPong(host, port, useTls)); } } grpc-1.30.2/src/android/test/interop/app/src/main/000077500000000000000000000000001370425124100216705ustar00rootroot00000000000000grpc-1.30.2/src/android/test/interop/app/src/main/AndroidManifest.xml000066400000000000000000000014111370425124100254560ustar00rootroot00000000000000 grpc-1.30.2/src/android/test/interop/app/src/main/cpp/000077500000000000000000000000001370425124100224525ustar00rootroot00000000000000grpc-1.30.2/src/android/test/interop/app/src/main/cpp/grpc-interop.cc000066400000000000000000000113201370425124100253670ustar00rootroot00000000000000/* * * Copyright 2018 gRPC 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 * * 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. * */ #include #include #include "src/core/lib/security/security_connector/ssl_utils_config.h" #include "test/cpp/interop/interop_client.h" std::shared_ptr GetClient(const char* host, int port, bool use_tls) { const int host_port_buf_size = 1024; char host_port[host_port_buf_size]; snprintf(host_port, host_port_buf_size, "%s:%d", host, port); std::shared_ptr credentials; if (use_tls) { credentials = grpc::SslCredentials(grpc::SslCredentialsOptions()); } else { credentials = grpc::InsecureChannelCredentials(); } grpc::testing::ChannelCreationFunc channel_creation_func = std::bind(grpc::CreateChannel, host_port, credentials); return std::shared_ptr( new grpc::testing::InteropClient(channel_creation_func, true, false)); } extern "C" JNIEXPORT jboolean JNICALL Java_io_grpc_interop_cpp_InteropActivity_doEmpty(JNIEnv* env, jobject obj_this, jstring host_raw, jint port_raw, jboolean use_tls_raw) { const char* host = env->GetStringUTFChars(host_raw, (jboolean*)0); int port = static_cast(port_raw); bool use_tls = static_cast(use_tls_raw); return GetClient(host, port, use_tls)->DoEmpty(); } extern "C" JNIEXPORT jboolean JNICALL Java_io_grpc_interop_cpp_InteropActivity_doLargeUnary(JNIEnv* env, jobject obj_this, jstring host_raw, jint port_raw, jboolean use_tls_raw) { const char* host = env->GetStringUTFChars(host_raw, (jboolean*)0); int port = static_cast(port_raw); bool use_tls = static_cast(use_tls_raw); return GetClient(host, port, use_tls)->DoLargeUnary(); } extern "C" JNIEXPORT jboolean JNICALL Java_io_grpc_interop_cpp_InteropActivity_doEmptyStream(JNIEnv* env, jobject obj_this, jstring host_raw, jint port_raw, jboolean use_tls_raw) { const char* host = env->GetStringUTFChars(host_raw, (jboolean*)0); int port = static_cast(port_raw); bool use_tls = static_cast(use_tls_raw); return GetClient(host, port, use_tls)->DoEmptyStream(); } extern "C" JNIEXPORT jboolean JNICALL Java_io_grpc_interop_cpp_InteropActivity_doRequestStreaming( JNIEnv* env, jobject obj_this, jstring host_raw, jint port_raw, jboolean use_tls_raw) { const char* host = env->GetStringUTFChars(host_raw, (jboolean*)0); int port = static_cast(port_raw); bool use_tls = static_cast(use_tls_raw); return GetClient(host, port, use_tls)->DoRequestStreaming(); } extern "C" JNIEXPORT jboolean JNICALL Java_io_grpc_interop_cpp_InteropActivity_doResponseStreaming( JNIEnv* env, jobject obj_this, jstring host_raw, jint port_raw, jboolean use_tls_raw) { const char* host = env->GetStringUTFChars(host_raw, (jboolean*)0); int port = static_cast(port_raw); bool use_tls = static_cast(use_tls_raw); return GetClient(host, port, use_tls)->DoResponseStreaming(); } extern "C" JNIEXPORT jboolean JNICALL Java_io_grpc_interop_cpp_InteropActivity_doPingPong(JNIEnv* env, jobject obj_this, jstring host_raw, jint port_raw, jboolean use_tls_raw) { const char* host = env->GetStringUTFChars(host_raw, (jboolean*)0); int port = static_cast(port_raw); bool use_tls = static_cast(use_tls_raw); return GetClient(host, port, use_tls)->DoPingPong(); } grpc-1.30.2/src/android/test/interop/app/src/main/java/000077500000000000000000000000001370425124100226115ustar00rootroot00000000000000grpc-1.30.2/src/android/test/interop/app/src/main/java/io/000077500000000000000000000000001370425124100232205ustar00rootroot00000000000000grpc-1.30.2/src/android/test/interop/app/src/main/java/io/grpc/000077500000000000000000000000001370425124100241535ustar00rootroot00000000000000grpc-1.30.2/src/android/test/interop/app/src/main/java/io/grpc/interop/000077500000000000000000000000001370425124100256335ustar00rootroot00000000000000grpc-1.30.2/src/android/test/interop/app/src/main/java/io/grpc/interop/cpp/000077500000000000000000000000001370425124100264155ustar00rootroot00000000000000grpc-1.30.2/src/android/test/interop/app/src/main/java/io/grpc/interop/cpp/InteropActivity.java000066400000000000000000000077031370425124100324240ustar00rootroot00000000000000/* * Copyright 2018, gRPC Authors All rights reserved. * * 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. */ package io.grpc.interop.cpp; import android.content.Context; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.text.method.ScrollingMovementMethod; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import java.lang.ref.WeakReference; public class InteropActivity extends AppCompatActivity { static { System.loadLibrary("grpc-interop"); } private Button sendButton; private EditText hostEdit; private EditText portEdit; private TextView resultText; private GrpcTask grpcTask; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_interop); sendButton = (Button) findViewById(R.id.ping_pong_button); hostEdit = (EditText) findViewById(R.id.host_edit_text); portEdit = (EditText) findViewById(R.id.port_edit_text); resultText = (TextView) findViewById(R.id.grpc_result_text); resultText.setMovementMethod(new ScrollingMovementMethod()); } @Override protected void onPause() { super.onPause(); if (grpcTask != null) { grpcTask.cancel(true); grpcTask = null; } } public void doPingPong(View view) { ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)) .hideSoftInputFromWindow(hostEdit.getWindowToken(), 0); sendButton.setEnabled(false); resultText.setText(""); grpcTask = new GrpcTask(this); grpcTask.executeOnExecutor( AsyncTask.THREAD_POOL_EXECUTOR, hostEdit.getText().toString(), portEdit.getText().toString()); } private static class GrpcTask extends AsyncTask { private final WeakReference activityReference; private GrpcTask(InteropActivity activity) { this.activityReference = new WeakReference(activity); } @Override protected String doInBackground(String... params) { String host = params[0]; String portStr = params[1]; int port = TextUtils.isEmpty(portStr) ? 50051 : Integer.valueOf(portStr); // TODO(ericgribkoff) Support other test cases in the app UI if (doPingPong(host, port, false)) { return "Success"; } else { return "Failure"; } } @Override protected void onPostExecute(String result) { InteropActivity activity = activityReference.get(); if (activity == null || isCancelled()) { return; } TextView resultText = (TextView) activity.findViewById(R.id.grpc_result_text); Button sendButton = (Button) activity.findViewById(R.id.ping_pong_button); resultText.setText(result); sendButton.setEnabled(true); } } public static native boolean doEmpty(String host, int port, boolean useTls); public static native boolean doLargeUnary(String host, int port, boolean useTls); public static native boolean doEmptyStream(String host, int port, boolean useTls); public static native boolean doRequestStreaming(String host, int port, boolean useTls); public static native boolean doResponseStreaming(String host, int port, boolean useTls); public static native boolean doPingPong(String host, int port, boolean useTls); } grpc-1.30.2/src/android/test/interop/app/src/main/res/000077500000000000000000000000001370425124100224615ustar00rootroot00000000000000grpc-1.30.2/src/android/test/interop/app/src/main/res/layout/000077500000000000000000000000001370425124100237765ustar00rootroot00000000000000grpc-1.30.2/src/android/test/interop/app/src/main/res/layout/activity_interop.xml000066400000000000000000000033451370425124100301210ustar00rootroot00000000000000

_`".".Zf_N:2jmOƘPWcaj< L G? Qjz 07/&7bM SKdaνqLA/b".wC^]m1 SKe`͞sƿPoӽYrXb".bzaTph^ň0}sJr Ɖg@)B׶m0ҳgAɊQ$U9} ?GRӰtnxIfjl^%v.~\zv >1g.IӗXSN-5BicI_ "&G W"k3S,>V/Qo۬$}M1 ['_h@Cmh/XV_/_A!8k _o8aleayP5Ǣ-LĞ.ߩ/ꥎΝn[򅰱xÞ31쬭BCM]Xh-?xYyk0n`_tum 쾂w="Y1\Q^k*=q?9#<{"!5 ;q c#LlǓËoA7WG"8<jtTe͞~lu6͛=L\]m1L y/bXҍHH Z9{;HR\&pijW{&%le94ĦٳT"j.پhf%P3E^2lE 6n)Z.ut^]C1q0׫}{;86i ;nܝ0³K0k076DK;[:Gq=׭3[Z`_w;C'Cп6w+b>hѸN\Ǝ~hP? ѯ;L1c:>SC yXe:v &[ɩlŖ'v6t~Ҷo:r.@ij>}84BӆlR{e;_p.w{@ ؉dv︗vBY:vQk}0{%n̥t>߀r\`pN*m[4]sϳH~aCIR9=;j<ԛ'aҴ;T=xwN/@͓C]lX gub.rnM['al噯hjE{_K`OwtV|V6aŽ7R'e zUkUe8rmԥ#1kkB߰ zvS6cL <'B{u4ny .NXWYu\=T:κLLzgB 8̘ Y>0kѻC6^6zmG\8-k42E8?ݵU'?Xeן+W}[9W1}=!!*.v1qe@/Wܚ=Pk;6)˩WjGírbS~lMDz ^s uu C LM!gnoj罱 n{-}\,҈e©?Ro@ ]B ZF6W &wU Mkv :SnWZR;g~eŰqҒ" Sailؤdxꎰ;H|MbM~L_@O,FDLVof:B=c7Ӫ ̕cHʆ};]/X*WpB!!;m>r͊ZY\$ ?maޢO!;$0w쏄+垓u"= 8U]G삚wZu\\w,DQ{Wخ3}CyCO\Zn΃^8,I ]u_u}>f̘0{痚U]FxĐn]I)076CrC)/?!*.99*.ǃcd^ǎ.[wa ;k+m[n85cy*Rl޿VccCwF׶Yq15jX<58<\۹I9=(<Cg1KG5w~7~ PWW9z7u"lլO(Ą1pSmVlglp7>q"DoS$^[n1^شHzjZ!\X3xg)6)pcYpqT5`ҴCQZ*2^MYˊX.7t}-w׺No;['(-A-"PE6^Ȏ A;AUVoq/V<=l筄'iաiOO+  +<-pӏi7%UKdPzcU :!B\iiRVV+ *galWShaS} sh F0/Co@Uc͓PaXyN;HyAH싄˾he*y~z^}7TJ\4-{) +6%0mLE T+KPU>֠0aqb]^/k3SYT9'κK-T-}j ]m1¸}W;4)=cz6_ U!䈣0x搝\&AqaZVG&^]@iQgYj ahㆌ{ TC*Uinң+Hs*,sQ:2,{_`b߭BJ$\3Ջ~2WشaƵ>ڋ064~Gk3:9bqjWC4Z@` 3x 7OCcfҴҢN#:zm5IqBX̊ In~ ύ88g8#+0NO-ۧ+0}Wt3q5WPj?͚9 a0(&N^[MC9/9pyT5д׷5hㅴ3cBxk{alFM:s;8/vԵ.҄l˦O#عwRfv#]eCp(FlK\=m1ڵhHVpv݄DGC;GJ{⑕U]ᗕˑQvJr\"B/݄Deg7,XAZ\K076pkI:b-A zrxq)? \.G1A.j[' =;APx69<5Eޫ{V[96~G/ٶkTVseOxCO[ HX-р H kro >9GÔC0cHe(\:4P3!W-ƨ޽st4 Z"<q GơqIXe451n@ ύKJр 8a,84`gM#!5 _wgGu.ֹߣk:q,y8;aoBlܶлlqz=;*yn8qviXejjX>7{pɗt&!5 3W^.D߯/?ۃq 7XSY??AlR 6S&D_/_3a`ekյ5TB|^+CҞ3޾K?N'6>޿ ێ\[qwif* \DGeVdL,#* ]Os}6ͱ9s)¤A) taS玫n*<jxk39iӵ9 3:5n"}ƏwܴC/?kdS01G# s$!!5 nyvO9ʆף/w 2pe7{(Apo IDATH\y <|j#+ 4 Ҳ-aciG*J4EVnKc؉x9~︗yx]VN踵i޻)mP6Jq޺Imwoç|IT>cWZ2}(AV^(ԧ\ qSlɊan\-:$ ']X?mPNv$lBC]+v޽xM qz2<˘Bk{uÐ]޶󨾕ōOr jӥO3>ʖ 'O|?'z [?IQ6bVo>ڸ8e?\"Yr.,pwvV>㸤d$edCň˱hoBȉ6+vbkeq'%EAYX"~(W0.bίuۑ0iς+{kË e_MoVfl<||ʨ޽/W F\R2P\^֩ Vٯ S|Դrt.XZCS87P+ʆ#}6FނSƘ3qmh(/JuXQ~\ I}߷77_͌+6SMC̟ /_ iEy,>.D`alI=cɴϔ?{%܃"Y1B!6-TBXa!t7B.cz~32!)"O"Ae#6O_<,fdPPܕQS4,wKM~i[斖[iJ.i*  < V.uq]psϜssngPkf|߯1-W˗Gy?l`瑣 v#P/<=k+tBm|/]E^u~jU/AR06; !DHq#v q2[LMZO;M 88UB` Z*LTAWlnɢ\ ~9-5|܈X j+;jSk%ּKJe#9=F:ʬT\R2x--*j|k-ihL^4i\XR֖z5}5xkd|}Gϑ)>ɲ0 P6kդae瀅rC5wHZ傥?ONz6︯\M]u?e`P`eH壄~ۃRa{*\Mz]^iHMWQؚw._zIٻ RiC$GSN tr#m;窍H$*d>9qwr|H<6 dznw͇a!FƷ8j` Ǿf dVĆ&=\]k\ُkQ-%6nw꿺 _'Q|ێéJ=r2?]f2܎R%5]%fͯҧ}^p  ?jjV, pwvbA 6H><|9)x@'r^D왎wTUNG~sj$ۃG@S(_6o:)ش/wvmOS۹Ո÷TTaa鰟M͂to{jn'3)i>&W oύ#\)\qnǨϖ%s>yb/:|.jȯ2ƫ;ǏfI1 I @Q6VmY!k q崩Y\N ';5=MOX*mH @ҹc\WNGK$_G^Gy5OA !lʻLlj9:VGХ:]·O i,,4kQQ|x̔ E­VY?, K%nGO.j͊i3PZZs [mjtnB{XHMj[t f\yC_~U:+ Q634m퀭yJ88A@{blФFB-ꫦ@Q[GO%mFv^f}BKQI\lME:SF}5R)+uǧR. ϵhGjI)9#E9f"4 %N -6\ I?dƐINz\6][)_яu:QaoU7 ]-{.̕k?Yy[ɃXi !DY. tǑc0_jLSԴZ`Л{[sikO!9"G ϥko-F#%7#u+6sf>Tn5޶Ωj#x[dI V#=&;g/+ףr^8{o.n?\) A>Lv-!~*((螑KgLnu _ϒM[rO==KJ6=8n"Fqۧ(o~oy)a+(t¥d.:TwY)Ӥztɦ!;g/R. b4beh @EM7 'ëq?cc>0KY'zdk3(NoI™m0WyN7 ɬbךs2?PE"5kK:6 r ]OG5"CAA̬W&.LaWw9//E?)9z)83dhֆ',܀RBoȿ:iuջeǑcEae \eߕS[~fxzq)lʻsfS(9dr5 2ZAI8<ƝP'5)כw~TϬKҹ=d&EoF"5X#Vvm-h0ۗ/.S뵸lkY3QXpmErDY+6ߵuȇhS7G][.X\P=)&`EVNNĮ#kWEwUV<>]Z6-cYN^ }٫_4Зyq=@f2[}oN` 0~|RJIqFSNΩ2I9y 9WBʹT39]#U,,-Ε~ZAl݌ԏD왁C%꽲ҖH:3۰uRaEZ1],;*fq5|ꄿwC$r|wjDlʻr1bFiSq\ E?ax7XX*H8մ/C^ʻצ -O~^ r=82DJue\w|)u$_%??7)TUhw#-W:]>5k 圽h2dk\ j,,ǿgf5edlkX[@^_a`V'*Kb~_N6ô?.wmVtO0?ˇĹ n/͞tp1.2;f:z)!Cjܟ {u|HljSMyw|ێ _ϹdT]f2ŵCfV[{O}쇮"o(,-Tz# `k}F ř;frW>:C;o! {~bcLXgйm5l)0<| ʼnam6v$te&;XU2"T޽N&O\oS8*I&h으 5a*|= ;/OANzJT|J.'_#;=coXӌd`ep'ֵTq$tM2篍O>k1s5|cVli<+<z[4eWMߠs7v'4j@񓜾eZ&g,wLXS|lryz4 U.w^ß#Vw\(/> Vfc=uM3=qNߛTv _U '_Ǐ&9:NHDLڏxa>0X%"Oo9|-0}obuF !wxP3a# X8wBe+s->ʿ'O>cZ) [k S΁ ՛aSM C ]w ;1ƶiT_-lIHd^iۤpm >Hz8x1^!vzac{7kxj6#l~Kyo jL 3z|i;1jn8ni_Eex/ǙoO|m gdf`ӿ[]gV}9*2(ak; p)q;!s#k?6 =m'wg:}ٟ?$i8EP@Y8{71 r)9{7Nif$BT|Ru0 5'st9ѿCVVތ}|?O$+%4u^ PXLtڌD ]E^ʅj2$| Ԧ{K6H8 C K%:lG=t k]ai.I]f2w~sMAٻ t'Ffex~4]}[Lif2+8ϹTF~ZdFsW_=6&>@ET mFv^\: {Ո`!FJZ@^q{V3jMs=8uScdjpj3WwP5_xt}.RI_`Sޝ?4~fv}7շznuu7R-\7#;5#-Fً8~{7_^MywERxu\?uB8<둕|~כ6aSx=P'Ż \k%;5ˇ44c Ϻl MJ$."/G .Mo0ygsg:;I*NEqHSt*>=#Z*agϳ]_^Eڷ-OM"Ð͠Vm;ִRAFR@/Z!jML\} an6spڦJ]8n'7ոYGTaocBɸrRao-2ؕ_?'+% Ć&iϦj1+>ӑ=υ3h Ss-Pejŧ/ /'Sx;ux/[ \y)SЈ1Dж1iDYe;gy?r C_WeMɚ]{j__iˆ]_IY}gAA.U bKa0frPBf4G|az͇Wgw-|E#LJU.h3ume$Wt~z/~O슔wR.`r¯z鰩пg4K VvX:pfaMjȽTtLF+d[ R. _#>oczfMBjʲyz7^pʞV3Gwo^?iKJ~Ǽpu?ҲA]}Mre$l홽r>?씷$s2_`aUS? ` En5Soj4OOJS߭;q/LUk1s5|J}o%ALB"!ڊ{Uѝ٫֑x-oO>E$$`f⒒O ^j,*~35thHDL,nAL oOe>Mf͜ rn3 Tv }+-e0BϞ';'q7pPXwBbcmE&1k'"͎U6,?1a2Om^] ţVvn~wGvw:'C[G4svXX*2|ZE Pr IDAT=\:D\<@hNS[6\=` I/\D7Vn,ȗ%t=]</4Ik)+__JF >G2hxVgPkaޚ 61 .3O2%3ݮ- jQkPݍkt7.-1WwY\A>'x LB=Hع αixg7ٱeo4߿*n;;il oǫ;GO3i7Tp(K[й',ݼAmRتLVɟxJm}C2MO?;窦٩1fO3dDL(N5r鲒e&Qj۲Rp\~4"vO%FNmMT{~ ՞HA;kpb~_[ͶX:gt5] +*T kb]GV-/'ÎA_ _tk>[TS;;txzoGCDaK/2w^/Ftx4jxZBa 4m5.1Ǐ]`#zbҠd v 1:-2{& ~tnij5.w4/nAF|9._Oܝݾ-*;[L1Ѣ~]jwص%%};;1uR:x~=3oQ}m^7G%xխD:ߍ4Z -N&r\ ŭf[,,}cV+]cjbc_︭[ r5i$~K0>Exh~ EUגz0gf5k:ceh%tkO6̃p ۼq-smWԷNHMדL ,vbo'NmӨzڈU=Kףj/dF7YYS4*xUtgMOIOG!*.[lQ.?Q\O *.gn=OmfciL1 cZ >{!8ZA$?dz^OtD.[!?8V 范G{fo0׎.nC(윽i>ˇ!T{~J'7 WVn1OA`c?Ǿ'9":BVrj3gKvznڠU_%rd|j?I`_MJ+w{7_.^#.>M14Ć!OA:>-Grg5nڠJ!r\t< ,,ss-JEJĮOQBS% 7 ;1to2{ҠUneF%}acm]bMRHJYΞ7'GyPyy~5|VV [e;}oJyW^c7KNΉR<`\ /Cmzmq5.z0rޟA>?週cwL:}U9.\Z-ߦ 5V B^UmqU.4wzlʻSBӎ4-guCLۻ:S_ki+[GjwL~n:g1U.tmTc@YX*ms-'4c*/p ]O<~ɏ!~:phA`_-f=,WEw⇍ Z-3׫2{\+?[yW@a%%_Zʹ+1rm,M8[)i.WBPQmWVg2$4޹״mMhsXeiق?5xS}\h@Ec{\{!⮐rK Um<>9ha7w5٤@M`.—cz4ýuır;vVTb拃G}=e_Zcz%.wTOqSXpj$KjMr,1ۋctkdxnD]FK5H`ccm~Utb+/O1wgg>8{)z|Y8F͞Ϧddi Jϻ* Ri ޞ$^3NWЯK7oóZAbV܃ZAekK&Mg켅l)1>9h"ca\!(D&}il^C_~Q3JNRaiG7HYF5f'&!ī^M_>Q\-3Uu&`է}RR)Cak; 8eO(t'twRp1ze⢯vuבc)Moȿ:iuջeǑcNBXJK˙NnRMUR$+lM+ݤ c)qKH%K cTӽmITy\<%G]0ezNRjzC`.5%K܍+0IP y9u _w [̀< KJFHBB.q*R'ؾ+9)GOX,EHBB._ySV;`%0&/!K ]ă L*gkؾ̿My64|`0 zqIX -ē* OtI@t[k6{RMa=1rBHZ} OU'`է}RQXtFYȱV>͈QrBH[ {{Un [AG@^!DiFPLsur9!_lѴLN+ݤo͈v !%JJK˙Nn9|0l'BB(kY)ӫyTr9r{֥伮/޴ek~%BB(PXZNiaLvB!Kc 8ļ5󬬔g >!wE!.DcBm˹ V48ګNKB!Ky!!/2COpU5+jR'&f^mܒX^u8*p JB ]LKѪQ}zfN"lJeٖ,鐄/!DF<:dzu;`cmU[a|}Gϑ񣁫rGEid[" xDxUt!"&Y=uwr'KHBHĞ_t?:تA=텷S_.g/E3 ](_vJLbW^^1BBBBWa말 ]U agʵj _BBBBg,_XeCﶅnSb|>𑂹g™f!&!1ENJEHBHw [nя@g`Ӿ~!=3S—%%ni-K:pgw_CR0ca^Vhu#22~ReTLx?I<`CbFCAAA/!K! [+ll<2Gek*J9p=ϸyضRy٤Ռ4Wwg'įK4]{DrjTpWB ]Z/oqrhbLU6Wۦ_poL=yirl >&G[fWEws׮=©|+ HB ]"l>.7/g1u ܝKOHM ]爘XqǏf*ߪ'WK%nRo/:pwg/lՠ;oOGv|вA=tRb'YgǏfɦ9#{(ijTvtnѬAZ#bbzvd\dV\ۡ1|m1 p2o/*ߧ߮C@Io]vL8+MZGF#Z-N_nnZywUVLhqR6L5|9)1I_zKBq3ϰ5GM ?fя4p0.)Q}z0s fߗM5|ƫ;5|HNN Uѝw_C38Tl?>>ߏan$^K  FN ;{a3x^;%&m ;ARw_WEw^!ag6p x~:lƺە~aŔ}< )ߑ5A;y qIA1<>ߥ=(8ys{8y '=c*B7b~>,N>|N_biݹݛ 4j>iԀghe\hV7WW*ڊ[eAvh#pThӨ>}v?~i-W8i7 z3fuHNKguli?ԤdFhQ.Iɜ6 s[=4w͆/yJII_R<'7ոF)Iܰni_"_r#u{-@Nɍ|=PHz֫1k{\7į_v>Z5KMMA~TىfަmmܐvMx- l/APТ~]֟@T\Y~dR1jJ;pIJTv ӵ#?utžf~fu .$| !D1/&,7bOKETv,ڴff/{?*~j>oNJu&,ZJ׆~oO7֫募wU6H+&!c'F%0ߕ.7ⓒM_.toݲm ^=s{PXRfz6b/3G T*.'aQfLKνnoՐ( _u%nS9u|9q|ڌD U3W!W0WvOy|{e;A&I$5]k IDAT,}qW,^]`Ru, >Kۡz5~eҒo|*⒒'*cbL^hrmzۚr j]77sbͷ oEnKo0JAmʴNDL,jMohZNfL>Xԩq4MC|Xq&ZՍLUÒxf;:zPTo9 oWN}26~ ,0n6vU=TomN^oq8xs~TӛA[ {szB?7#jt4Ԇ|  Kz-ģn7i."p`Oax˴^Ȝi> C#_IRiG@WBa}ぢTnpivO _Ol.\6/~/~{۷`É=G)cnw:Mf Ovj4*4|>4{$C^/5Zv1x'6Bo+͢\Sؾ<3LRiC:x4lʻKzz 5=aZoCRy|Cf ,0 BqOl+"c-$x||*Eegӻ}[>~ ij{Ŵ\bkmeSRaν@u+wg' gH.( ޲]n;6kM[hӸ>.4<==JqRm;zoKV[~SeS3edgB ]ιXu{-Di]w:YI(X fbS F*ε.a >N^hX*m?mHV 5d]1Tޜ|=nsIwwɫ圍䎯@TߋJ]N#o8Û* {kLTmF"kx٩*y|J"o8k**ǥTmU.$ƕST^>UcE^ Q(m [^1wwI^G9X&قw{$Tn5I \;AӷvbeH}~y,J_%©M#qnk= {s=nX'Ix7kdg:ǾFqu亡\:Oa8W _O™m$F~Rү[J%&.L1)˾c=X[SG ѴnK7oc8÷>JCFCZF&M5iLtk´|xn:q A#LtB"}qbbb1z3t,6Bjl: :&o ^M_/GUѝG(ՍIKsr4JKKӯӽu <`@P?8(|Yew ^㴄/j҈3x~VSL.0+6S5up1s:I~TӑSFpf]k7J~4TkRj;g/[m<&윫-}$CTm?|Ϻ8w|G@gӵjh[*tKH\!WCp2bT'Qjr2h3lOWi؛[tnifVtvSmMYԎ̤;ONz)p5ƴܹZ {KӸ{*z qkCV3R:}LrD0 ^]f*+;ьqwf)lTĆMǹՕS[P'S˧7jEk' !V\|wqM@B{(HP ~Rj]pVuVjժjպjU_ ȞW   _ySw͜(Lnv)j]c<z~\4x8j_dh({!ڧ7!loWonl}!K̼ǔT KYtX#=2yqW]yqaPSg*5q> ch A_'jfDZjcbe]KJ,?Ǥ.֌D_I-U۾(^֖͊te蠏{u$@GGBvN/ҜFrQ'6&4Y7 j8}' | _DKHcw]sDysCv}EfIIbd1J24غ*bJ 3V2c(P)L&Qʭ?  ( 0yV$kUc1jǡzt YNA 0sΔ']ߍ;e  óu͕:SSԙ]@QZ$80#J咹֬0~8vexz7slH޹̅rhWI՗mS0V)dCű1򯭒<Q%tcsa`hSC^r'"kS懢(r_Ba y#\𵕅!EGSc!]4(H-Q+qIU>Y:ȭCUm5.ȃ~VWxE jD,Sڇ:ͯ8d-jkDP]R T?*otR(UI}5"ŠJIzYq|_14 C;Ig)xtr o$|u\Vֈ*Q%(Rp~'$@RwiPLz//pe{?<]ǿj_ Bڝ#0%@ '\Cdt=l]s>EQjd,]~ A9 H:N0sڢs4w?#nԈ*a:ϊt}7ru ^'wLJ#~9JHjf%V0d#6+hj#_kt[s'XE hhu DB>nG='|`4~ mn(N؋Dxtr>:6[YHZ5u&Km1C^$\mc.{ֽ&!!B>;A~_X͎&Q"ٛt}7X`8(xj͉#m놾>=#ō=*GA ֦&aB,8Ss  2 q#jCb|g)*]էo㉮W nyu&:ASh[쳈 )F>1DIO^M 8[1dMAM ON *>$+#6Mo~?F^"Ĭ{9(-5fa/| epmyN0tۇsA%LUؐ59e IeE 1(FݸNv\`hh"n6C4rKbsϥ9RAPN8͎&0w ~67r+!{ ԙ9)0~j yag/wVb5dnL { tuJ]܍Śhqx6"'4񎉯ZI__`6wzI.m-:揾m}!w5" SQ#B^˳8l]s%Qt5YW ЦU-A\%0LK!,FEq:8-Շ,ެ)?_y K!?EzϥF$)yv2Q_-hExV-=k|R<+Lyesj6k ׏w.~=];XhAa%ب޶܌ q鄣V$hm% :v`K@&~@f# I^AaT!"(, kSp8(i6a'h&A^,{m<Qym/g'ٶugf?d[Nj㧵I*sY:oUɥ q9:աsw7aL]lf8 iwUʵ?~9u:2//g'z]'Nbi`2B鏔p.[,o Z<{.~X*10 pb$fdl5b_ `0pLCc2hIU3 w ֣h"4"wnCW)E|>Q;|=5@kSaQf$hs:KWʵ?V͘G~{3NmW#JoD]Cߞ072M'Y%[{ lZ"qS1zGDCAzRj]=62b[.IS[!z{]̥S&pMM tuOEfX46*ӖOu, \leonr^=aIÝf `poO/UI%YB]C>GFnԽW~˘BʗދEGáI~ zὌS&p9.t;thk7W]7c]$=Ȫ, xۼubʵ_nm_uv~q kqr<6n@^`3._ATB""UtD_ e?TxIZF?ic{_uo ^!gr Uch #n_XJjxs+?]9aOFW:}&A Cn9Ʈ%9x3km wz#ՈM:]¶ş`6:=y˧In N$6}6&k0| //:}k31=kZjƺix,$|-}kʎ> ^r \Dޮ !ϊ3^Jt'ᯟ jXnB?+q>yqa`8гrcAa ÑaxEU9(^cQrr_Bڝ#ul]=~uI|{sJi>dc,Cۘ̇A0U]G2!(>9I1 'g$nCa}䖵OoBYxZPK?[~^SmB[`4K?WrIMG~0qƁg}ǚh⫱l륯 JĻ_ys3ϠL LJZXJf#ѨqftXa5diVN5еtu AԩE9+$4ϙgM ^{=3Q[#?Far ]PyOMDEjs&y:K_ ?_X;GwiVnrW6Iܬ{QpC6/iwy.6~k8^\er^m<*gGsn%s+DW#rakVoz`X?^RerM}J!Y ~D%$P]la9cFɐVE[T>勱h8:KЧ3xA.(yס᠃aQTGqY]!ñ;QU] n]Ip"8Zl,21C| 1;y4_LMb1*4Y|ć}ʲ<7{%Z/n6&i S"vR"`41yqaȋ CiVݑ #`:V5Ϻ$!!}5kå+Pg ȋ Ө`7j 9B>F oō#ua: Ydӑ o(It&uV䦯6>#\ZF녓 IDATړ, x8*[6 s-b꛿65H,.å+W.*Yk>iCGSc!]4( eUȏ ȅPmvF[WU g?t;Fٰ;F'; W!9^ZbI\z A[OV+٥o76wB^\ـ5q T. m{H܊*f+QSgu4#qhuadJÑ$l|؅l^,0d-+`j˯uo=nwwdqdN,2#C7|0c/^׉3KJeip::X?gnsv]';9K[C SPrG^iVrPҬ(706w,X8I2v$NXS`?s(HNl؊FT C=>`h׷]Qǡ΄~g&oW!&%5o0H UT'FT!N}YRHA Ezd[&]NBܥ (L@RAvj,]M[7n}~pSj'h4kĥχ&{c!2 ̍ i[&zX?gf נy3L$gD-u~o!HߤDW~|x_c > oH mPYiPWT[#O{+7T 4:|wW%?'؃ jDpYɂ$[RA(Na/t4u@EqjkDƀ7HþC|w`8009 }il|dԄ#QҢ{y쏈 Y|sԙ#{Xkk]6mp:AWҜ"Dց ~X}IjC )Faq o-ZI7ad(L!'ʋ @8`*k)zր}>HJ:eA qU"XOR=d<+)eK?F<"767PpLJ9 2Aۘ0VnH DG޸o4CQ =d+68ܠ˙DW y&8`K&W5ˆ mR/wƆ1X_g Y9N@,pogm \ވ 8(IB "Q#DYn*`0_Z-NȬ >{1AQ]y]X-,Eܥ ȸw5B2a\3h]Kg^2 Yuc^B,7O c XzE֟+,˃[G)G:CZ:ŁX q g=: ^]Kfj^mm_Eecǿ{*>1~. Aeeem"CnIxo@}תP<I7`oۇPE)PSg*Y^Ic o*+@K誋[ai62ACK݇nPjAZ)5*ԙ1w$c$;eէY֙g)x}&J⢣ \ވ'WZd-*ju^eY27VSU LXT"l544t,\,lZz/1ODÓ~E.֯|ԗG7ᓂa"E|>]oqm9rNC OZQ,[C[t0E~|8R"o -}kt:E)ȋ {M7潲)09e4 5"d=:]oBP̾*J2]Y;I,o*Aϲ<_'SzYpjL}51 u)˓$ߋIRk}z/-+rhs.޺#A4pFD4T"qM'MD5 Fubc o 4`(͊j4ǰoP[#½cV(LM'cZѧ+B'`"zWQ@M ۾soh{Ufܔ$jkD Ժhv4@KWǠW |sg*}Y 2TԈ9z{MgK$),:훍7Λ>)%!"dޛ[?vgmmOܢivP-,{/M[/$\@/owv :{cq^CpCA0]?hv4 ?AM V"LpG--.Se^<D g?t:eB=}#u&= " 0Rc0J5$BߡԄzX?/!=2P9p,FKI7`0L.x'9M>927غ>E/l x5x$^D55r F6ϟc܍O!(*@W3f鳈IJw7 LE|> Ģc%KĚ8z0Ƨ7?Cw ԧ0)Q<G;[zE|>O\ 6X4q|Eb^q woO"_BX}bXc(Xˏhyu172|򕒿]<-(ą`0ÇE='On=vQTSc`&$DA;XT &]pu;4ֽ&ɿKH&w~v"/. uVZjuadxjp- #rZMŤ/]˛b+I7_sa[ yqaغpYdS)NDy~"L{ i0儱hv4A^\X=ꃭk޳"${~]fGthR.˛iH\ a #j81ZZhR֣hLZ!^.ҏ`nl9¬QQZ.G~SZ y66:t8Zll: MM`1>q7&'B~`l:s :tar+vcAbF&\ra&d59yfL;<߹֦&2aPTZ G>/ {OAa蹋% ~s 5cqpEq}ovXc7\ 'i*{/h~t1[b_@R~mN_Q+,˃V#II*)W W 8U"tݵ%dcS]oՈ*8C%EWVmZ$gxbFk^yK';vq/cd>CWg $٨o\+a٭5|  ^.Iz8~EhKW.LO\\tY=s'm^0y.&=]|[n?|ʪj;Uu9|RZbFۄ7nAX]Y̵`@GL, 5+v,a>ȭd2\rǃĥ#(,CxSLʿa='ϸ8qn|[HpA}E][g|1D_S'!1#̘{. &1i8٢\gj9Lע> tt[YYcPoׯu>e&֖JHD.X4a8Zl VxG]@\j::X5} is`kaDx9;a7_YRޏx)&%6uƊb/{L`! Z jm`ihL1bHf:nոtPPFvA! {X>$$ aSL68}n7bı5F0 eذ9&;]hټ󍊐̇A0%bg0ټY%kc6^. Q_ټ(X #},Y0$۾,<gYr (Jkt߀&'Uy{u&lzOxmfCKZ~O6/dq=Y^P٤>m<L&{m^^REޥ|? 6;',_MyV!%Ė/zKpA\%?E9g_ ŁJ *EWPgj,jm!V*AlAzd bί-:6?Ϳe%r,T aiv !9 {# cw(mð ֻ%dBPRp| 'S뒺oQo|ATSSX4wwߧ0#^ջx !!>3(-tsc>APX+oɎtcAO+!J<{򏞽hQ[[;7 .}؆Wf4wSr1f=: >$׶/Ҭ(XGׁ+Z|Lo򥥣:.KM C\5">誽:N{L_k0񹟭&fdNj:[K |Ģˢ鬙9Mbz]tu]R!C^6'B`mMln=vQTS`% tE .~DZsζh?\Q&ܧkp;.^0R l Z:K[7{5!X8!q*Ƽ+bK$nǡH|_@c{f^lҥ.⚚'z{\s,lmRSpRfKnDkK&qY\ &EFnVrsr! ! tu0gH;tܕ4c1kp{OJ!SBƈh> A\kK,6 ::Hޓg0ov~ E|tb)ܼ5j8|=ܡ1|-6L^{ jkېxS*Wd.RBflUc.^rcNL,6K)eEc/6/-|u3^~j[i#@G3G>݋*COKL%ꥎO1| b,?DD47j_<``_lwR\7ñ- c}=Z =pp'%4Yˋ]^,45Xp<`X`@/7 ЈH|s2Yñ;{yȹ "4"c|D_3oFvA!MM0}ͻv-$߷gW~q*>' .MRKU~^DcF!-t3u1> Y!m}΄pLJJPǗ`܌ՍKټ80,]*.qMO ]le7 s?T_]9S)P}fDY slӑ_h8n{O%ܺ$qjF9-i{O :}z1ɩ$֖_UU IѿA܍~&tuD'$PaC!6͟V{M]uqΦmZ|FǥAQ\H5"$Iwit_u݌O[t<2cGQ"E IDATe[KH rԈ*+4_727cڝ#Np=8>*~R uIt_`_-omk{OquFT|"2".- 7V^L,Db1>id(N%fd_.ފF¬[;vEs3 )/)EIwtPr7"`RN͎&p N~[8eyhJѣa]4غYy/E=_/4⅏m^mwUͿYUKw@Z\ QM ? 5cl:aOt<֦&0ŷGy[l8*Ė=33'[%tA/FCJX݁xؚYF57ؼNHKC.\p̓4Y.(!di@GNӰӏe| *>eϞP!χH\ ddV.AQ 65|wB(y072NJCv>u-[E|>*ߊ_ c"y`Tfh}\\eZWF6KcIoR|5\Ӱ}|:wnށ{ѨU+F E$Ht=\Ծ|էS5m dy֖Y1}LZmWdȭ;\ @" A Htj=amh-⫈G\j:m\ Ŗ!)ã!Ht.]Lcy3;~ԧ7)VH\c.y  A Htj; eo63&V$[42. E2RLo9&:hH*%{Nz섣_4,. EaC]}.p E$Ht0Lfi0ֿm^0ΖA:Qv5dŏ,| , A Htj?k>C]}k7 _]l ƅ E  &ce7 s?dcaNr?8g6-@`+[hh]A",e2I|zw"HtAPEL~}1ժn]BB5&&M]" vid]A"j&1sO_-/{PN#C"D\`ihL1bHfTˏՆ } @ ].. Ht/ uLOG~:b1HQA".u6K*"Bݦ,t]|1Q_c. 陙XB hIMMm#1`$YFi4I5cH^/HJot;Y«ۮg +UVV&޸TH^@oIpAmtamө2m/}eeem"Cn75x4D+,]@2`l0ӵ8ofǏn"qMκCÏY[[/$nG4D+%AmrL$Cꛍ[zAle@bٺEG[ @Π$.`27v67<NVr\%{Nz섣_4]AV `" D\1ZZheUWl|MAD&4r6/cdgՄ] Y auu_8KSBD+c_!)& @ Ax5ڵ}_ bF4AR&2,a!Ht/  &ce7 s?dcq?8g6-@`+[h hȐ0QPO"^2]/)ꊭ|`/- I"^'zi0y}zT+}&oobru+r l,O E"z0`ӯ1UGly`rF Ht$iXИ6cĐtXˏՆ } @ A$ Z Lf1#Cwodb?@b#xDA[ (JآsA"A=爷: AA.  ]AA.  ]AA$  ]AA$  ]AA$  HtAA$  HtAA"  HtAA"  HtAA"/@&h  f#RRi4AADy!nϸ*Ц%DADFFTpxk4 v#}h\A"Fr7dnbHVPq/$Yҿe^h ]A燑X+MW*TqG*$06MA$s2/DU&HP:S`A"&j4+z쵔I\Z}8>v(8!x9 V 0Jۨ ϭXL(f4tixK9Ce_XFTJ_$`>Uz4AA_Y I Q`$G'n]Hb~ ,VMAo9G&D ^y|T2?yA"FMH*E- HtA# z '  EAA   E?{wU3($Wny\p!E \-151%51SH\ EEX$$фfFGe(y^sΜ|kQ1Ãu bDDDD d=2Y"j¸ clb{{Y"""WC @9I,5al"7.5KAD ]DDCk% "."W$xπMڴvaV^r2Hj\kfX?{-0|CQ4XzV7[ 8h;W,pu,ll+ED ]E7Flp뉰'.uP xVQYSQ&$u+qBFNljDE ](Vjfxx|8zD[U`W162Ћg"".bFa璅'ϯU9N2rD ecm_ɛ:(1tC5Ȱj0mHx qƷ$bLq02ڤa81tC5A ?w4 ]q_2= C{2s('".b7M]I{E| RidED ]EEz~y0w85]P˯6ɖ#蕄$K}dtlgp%;՜KIUob"".b袗"rf1qm031nuIj.jy:مE;T!".b [Gcl{wES`i։yDrZ: w-'OED ]Embv&8X5VY87BW^QAV6l5X[n,s:|k[聬أzaI/i%t [0PTR2}G-WT--/7BD ]Ö@S}ڰ0/Yht,6(kjjUڣD¹(ZMٲ0PR#1\% (T~EV2-O 0yk >l+ED ]Ք~jcc[O-=v_Ş0~ TTV!T jJ?@+CD ]Vjfxx|8zV"c?QmdED ]\dտ]j0 SFidcm_ɛ:+C2CW[I)ƌaaR ~?`dtI[p/".UDžǟptpriezѱd/P1t1tl`0HX&"_* ^>Nǝ>y˱`q0caB_~Hd`e^q؊HHtNvAvF,L3q%;՜KIUob"b"bz"o:p<>v`X 3cJj.jy:مE;T2D ]D ]0lݭ+MuY'iX7޵<CC ؄ oixMrUgsu.%) o" Cog [&m 5֪ CLE TJob"b" TأzaI/i%t [0B~P;lbniyY".bbت [MbIjkKA!ʚ,/".bjakN`H >Ph}6 gKWTHL<6WD?J߹s!b"fnH˴<]'`Z|XZW|ወONlp뉰'.uP AUEeOEᛐ֭ 9d2D ]dVjfxx|8zq ;Fz _D ]h\dտ]j0 SFw5(rG`ʶzǯp!b"FRR  c!n+O ZLq02ڤax3 _`l/w 1tCj~q.NqYN SR,-Î#04h'3')&v~3zC\]B ]VTR=:@"ᕦF-_* pYtp`3ހ>Nǝ>y˱`q0&%~?"_m$-(C\z|0Xg8l[t갬eiVb5T>X.=AiZ=Q @.GхV\ݗI"o=nOWTVYFl]-^ѱQ8 Bү'Jv K^H̪s_X*EHtL4=K5maѩò6[qQ]um6,y0k1g`#5mL[ amX=U&+~AGnlu4&.` ݺ"KXujV-JO~W›% =ިul=K5 rbe:مE;kCKc;_X@#ֆTd| }M""_Mz[A_ªy * c0 vQIɈL:[1As4"ϝ iG%.[;;[T]ap5ذ &ĸB؉`(`ZG]wk{,PpI)`=%Jep>T}~؇Jp 8|2XtO'#}=dX \nAܐc!~JHUxAv([n8W\JCUKBW^QFcTWyԳͿǵm[XȆ OFfC^S@DC^ۄ:'95~FKTJ”/}ak Nv1ܖ?Ԩ-:3H [C[HAE~Lq/M Ee%VUsCZ]~=|c;#KIlX}hi[s<SFSDDlYm-&: Ax\Re6꡶6jk#JJn~оVsK_u$> `CTcž"jV~9s@St iU>{>0q9;u֐|F@EeΥ⿅q%;/İ3|s\3y*(D¥ryuZ**пW:GUcC,ua{B^ IDATT՘aѱsOfkcUovuw[}}XթRPFM Cc-6hg5$'GMtk?}am/PuO2tQ]Y{tC7LGw En-jLc3Bcp2Bc c8u/c&D6G.qClskK0i ѣu]wk$=; Pw{>lQMͺ=T4 Z=fsZ|(8o)08B%ܹZT`n0avY6?A)Q]nH˴<]'4/*#72aJe2L_GOVvaM/|E3Վ#ݖ{ԭoQInkajH+ Vԏ~@"P u+@$[@p?|8/;_n:tK<Š0 ՚՘CU{ckbc[>bn?5opxo]RwkM"C(tUTV[αdtyu}[_[KnIU`{HXۚî5VE J%DvA!՘v}=4L=XZanU\`4 |8zdo-m$N~ƒ ejKP 0ZA5儶X;^7[?]%2{GhV]=pH^ρ(Y@׻^|qb뺧kXi,݂ 'Jtlg0K_Lu=?e0%c;#d›%0~dlΥ^w=z&ҧzdz0cL],pZz[vdz^X}a(*v?D^|FNl}=&jWub¬6e-DD k]Gj璅'ϯU9N2rsl4%2u.efFYZѥB,A.z|%}?[T̼|{(JalB \6ν%),[tDW›%e ,>D.(H_}gc0̝8۾M:ݖCQUUg)R {>_cCCKu> 3FPM:q7Nl]9*#FFW5 g"bFV-/%)1isO@O(|k7:3P @Fn>Nd)aGFVޓOPJEBl`/45^rCfi։׿-*!8uJ#C/b"j@ND,nulעQu>?N\ݾZkEu,5ZCCWGK4xĪY1l;}֤OM r;+%w5zjhh|%|T}<5QcRQQ9ĤP g* "FU'UTV&Ŝ`)U< |QI:A{"#7~؇Ꮼy" 8}Q 7}{Bc~AFRJLaךn~k?s!"zq+$*kjߺ=a7ߥN$9jff!"RR_qS{3 AT t v~ޖ]B lty/NHLj lHeuOjrҙ_o _;8Fw l ,puP[|sXt4ŎGya_bzk|ϱS&555ֆY"M-x}޽KJY-zk6z/ɋgv>r:י>#7;B`|@rZ:~@i :o?r:ѱ8x  iGySQ8s"Do?{^Uv .u3A;B 9-:uB}66{nFǪ vݭi~&-AXϘ8 ƌę p^^0ܮ/ߪWBSFcrZ:"c`^[:u{EDj yS޻7iҊVkaf֝Qg#ztPd bmr- Ё]wk@_ pG uUݑp2._D!XCkVBBCmm փKw&"q~wV#| %D T ZO\]<|slTOlY'P)b]&*K+c]Wj*Aӯ1e=vl.^ylHb1Ɛ>0W g5~Lwd8|EŸ_\ˇEaZw~>50rVRJ*Z3u+WaDkU{,0gFxwB/zu!"j姼wﻋWg;.|=+|}̈ O׉%l%%V'HbrAEe:-utУ^sm` dHݍ-¥l,Q+-\3̓e ]Ttacra_d(˟ʚ&-).Z LDJ fyዚY `/TQde^ Ztu715R٭?I;>!ZX^;k _-n"1t5=544[>c5Ʀ"sI1!"bj 44Vaز TK2DD ]`@c׺FT+]~wU7 CWc(\cזhʅe+!"bj ƊB߷뭙;轞Z (~A{Jje!"bjLD _–r'Y""N`H] 5fwl*~Xm%c]c+\ֳk _–_X""NlPtP>3:*"~|j -drym P1t`2/z.v0l1t@$~4deӧ*T?2{DFP2DD ] , 3߷XEO[v6+CDD ]/=Z"1#*<]'r*ƹI}  2V^3"p܌#0|5۰5^C׫c`YK1f?P[KĪ4QR٭?I;>!\ge ^6Ɇ"Z'!""7W]{gL8ط 8jcUQQ9Ĥ@ՍCW_ZWW? _:l 1t5\^.sfٿG7`{׽555@Ս;+CDD ]PSs^[rjJde+ }2nflzZk$oTа{ZU߻WU, 1t5MMo&"78ɲCW$0IK$Xƚy;Xw6hW{+Gx.EUUK_8ƺCW _szvr땇-#.DD<- ݳcF'3cV埩٫7a+@5KCDD ] K(x)ca]k`"""."!,>H_Uy?2{DFP2DDEOc`P 2-;lp!"".z^,ܧQ:Ds87iOvPۅ2- ;Ns _BMDDE/e-utx:ߛCm-QR٭?I;>!\@DD ]Ykhhh/tXTCak('"".zzjhh|%|T}kϱZQQ9Ĥ@ՍMDD ]hhOc_-{X ,| Zw3hj{tߚ?Fsjj1kې#a+D^>""bfH(}˸ޚi@Ϋl{hX+eg^.""b]mDaK `9^""bDlPtP>3:cWvZrڰe'"".jtx 6=e0|=-""b"z@PӐwMjj;WTo߻E%6e%"".X&fo?i롰e`;MnDDElX%O3ub{9VoܧZN^(cو^="co60)-PKb`ڰ՞%!"""zujX""1t1tCC#BIȱϰ ""fe|zѻ8ROƌ%'"Ɔ-]e "".WtYB""b"zn؊'w3>Loȭ`0KIDD ]DOvT݌OVi@B rDDDDԔ́f~l3{G xiCampcn v>ZZQ7.F[TODDDD/#lMun Ը8\eͰ~Z[ܡ*:Q],=훭Oث:X|Zf68Ts?W[., |1t󅭣quŢn4ұvoнk9y2/""".z_M`i$Xu6ϥbc!evA PWTtU%"".z–I[CEn;|k[(+`طGc&KZ >/QIX?E\Q1߬:1tQ [MbIjk^/4:B555Y _DDE l Ip"Gw &al_kW+8MU"iGw\U!"".ja놴Lu&: y#RTb >l+EDD ] [z" =]'`@o~a*7!aU[2rgU#"".ja+53K=AG*+OT3|C5 ;,8x~oWqv”à%j--xvlwZN|yEdJJI56f$<ƏE[T&_8]m0ወAZ|\xY L8,Q*aGFVޓ@81t [QIɦ.X ɽܢbl>Sg42`""".z- 8ws-H_ɿB_~HdADD ]JVDBC>t :3jvuujΥ*71|C7[ 8h;W,puqKZf68Ts?W[., w 1t quŢn4<"9-kݻ'c""".zfo3=;<6- I.l<ŹTl <.(!*DDELj,rwU79I5J[ _DDEd hL}I+]`ݚ~P;lbniyY""z,eV,@g}ɴɚK>O$,A-QgﯭET&ۿEGS~5sGAj_xm $cc! XtQ#4[\L&«w+*2y ԫ1k/ŝ` zf y1~ ɩ鈽p鵝!1(J_kd##7_Κ~yMt;^?kkEb-mx'ѫ&d ތ=:!6LsLt\ǸR٤b{W, LtqE{O|/H?*s"N""bjjbc[O-\kc^]W)8~ r[`z[t2n+f='R}`(ܢbBhk`1?|3rC uk1M|޹J7"ϝrXt4Ű~/^ž Ak f:RwG(ARJ*:\tX?[a`0~u/^;BԾV|:!#7;B`(2t5/MD[ K0Oɟ w+I"VFUUegVPx^u;CW[ũYy.w|+hj>p%;n|5%R0K_~cб o_wkhaL ip(6rr1s1uN~g[w`qhb S}۶U7hkiK ޖ "z[S(-_ @!A_X*EHt .^!9- BRJ*nuPѮc'ҍ M|) AϭWV]Xfk璅V,[ەs˥=]ʵLHbtq u::mkfb ͑U[|W[Re R .zprnL=s9j{ۼ5gb/\m 0~ Bcەkg?^]0i?<~zǯpw21t5u2;wL3[CBU>}`@7d(scu@ETpFzt NXU ,up߳;.̼d"z_״+V*1ئ1c6~[5knQ1eܧWO%fo׳z::| 4뤮5ƌ ѹM' _DDOӋ@Ъ&8 =Zu28^] ;:CFn<7mTD%%R*++*Vw.h-~<cyp^#Q*=q0]ثGߣV%NKmckkU| VΞ rnݹSo.'"ŖY1@WeX*"w7,rwCL9k6cCDW],cc2Reذcj=~p:LU]w,Z2rЯ:eY323/Zz_01i!7Ӎ 2s(ODDς-]/AzS/ܼ=LOW4;VΞ\ ~Ot(Y@Ң%Ik]1**+t{K@Zf:ύtIWQY @SR$- fi 6`P*Z!)$b82T x:u[#jF>]zj׹CUtS@DDOÖNǝ~FK}pb뺧 w܆ Ʉs>=Xf JYY,A:9:/zGs7KPQY%vt/Yabypf Y_}zj }`'n\{͔[nx3H_Ɔm01Ѱz,mfb-^q%;Gn_в2 "p}ј{Wzz2uZ2PXR }I+ҹV o o{uթcEGKbcdHPӫ;AnQ1 $hkPxFrf&-#}=L9N4J}f@zڷiSs-ZG~W2б $duBXEeRQI0H Kj.jy:مE;T'NA/WVt8ݺbT:9$|9k@k˯Y)9-kݻ'c".b"6C c,,#OEaXt*(šs)xH]PxC(yA ]E(Lj,rwS/YC+p%;jp~)9|k[>YGþ=0A_Jd'OE4QIX?E\Q1߬ 1tCCVmh OwiA!ʚ,/b".f$n8p; g?x)=Zđxl H?*s"+C ]l i:G)ՙaQI܉^nÇ61vJ%8 ֺ _E ]M_&6Vy+f|fS& wЊH=΋?ܢb΄">ۺ'߇D =-0i. pZZI:wQԬfn=_853K  ~5wh ,nۥa^{l kRћdV-NqMj_.Q4))Ŏ1^C~W Kم~cuZk*d_Jp6޵1J%r=,WOѿgw7c9~^]gC}RҰVݐp3ݖcR/ isӶzl Fzw3Uk;.״t }K-*_a|ȳ_+gO܉;B864h'3')2Rk6<[M6c͹P^0isy~MB}pK=vYi ڰ ]7lY15Yѭ63߻V•{'9-ZZ0娨B_Ypn|`7c Cx\"aD:U=-njc.6m|/V•Bv[+9uT*qʟ>01i!7Ӎ pE8~8} `zAyK]× )0yF;Ob>Nǝ~c@'N_hki^P;ؿ{  ,:vmz&~Þ`lW.vCc/*  uT> ;331[c_%Rٔ6ɖX63|WL<`j\akFK}pb:tlg/L#~ 271F^эǶ76lscl~T&CʵL!vc.(E+x* i]KNKD,nt3}Qg`}ZfUU0Ws-+.zojگX`3+_ mM-Y9*+hӶnwG.GeⅻȞu*+@+IǞ+QT%7S>6u ${Wuܯ݅Ws<9*vڈg &=ޱ@-ajGiY'^qdo Niݺ̸'hfj Pt%aɼi8CzauG|F1<`)Z!uy߲z9kɼi;hg||ljxahL\>uE4.DW6K˞,:2\q |:.KB_ٰ4+907iR/Y }gİ RkvVG;8EvAQPčD..[iife.eK喙Rn&)&i. 00?FFPQ.wrr9瞣­@̘ԧQ[ݍU?Ž#G ݾ/p}H /ux X/vm^̏^3Zvnf9D_ou46&_Ԍս&vn7vb-L?up9ֶڳ3(ŧNݻww8,P!iFqhv|:u[W{׮11mbnߙ[T(~|iиLzm/;a_yac}uoݴ%Yl!>Ӡq3,,/f?W}Sy:rZfҐAԭB) 6la XU*#䴴"kn%qzn04FpU*l,, oRge|-L*;T`ffO޿,VqxVs+h8X&!%ZvW]˃l--"FJz:_률Aq626.Q4?\`-fkj>@ DkJYqs^@[q߶kf|$A 5kŪ-]Mkbmk'(W{Icسm#߬Nv<ZPn=z{ˋO:Updc6׬ÊEsYh1ɾ}#?u(:SW{Э+z ݎk:ut`A*RƬ~q7ٺ> 7c=.0}=A]]vqJ߼o*O<+Ή:|?xO?.@MMiZ˚=08ֻM.4Rm١Z_ po u2'{;?`.LM Qw.A˼tMo{ȼOuvi|Yj.wƹr"yrg)W?Pk($t=尵- 7& ;c?/,˛?W狒o`Gkyk]BRJ[wyAOy"wu lİJ^mRK4jg*aW K+._*kkX/U:$lTjmڠøلzNjdˎ@w{y 63I^(GWCv9GK2vh_}+k[iиz`h/k#qqF3amkϘ!=:z<N9EspY}>9j׉-}RZ =Nz_ʹy ׽̞:CϧV'u]̘4n}_VB<Ҋ{c燴kW`Mj# ]JmZu'VKZYJⱉĘjwnj/l=gaſɽ$ Z,Mƽ1^XIٶȟ)8155e~&f0ɾ OYڱ~͚?EVӨY+}ѯxS}:ugڜyd,\}'uֶv?}6?ӕyl6]sqƲ֏IOKe϶ٶS3xRɪoүWN=Ẕr1,t0؎xx,x}O>zykB6o]s{>9߯U cO_v{*X.2'驎 ׯŵz'n`_`oб)M}ɵ 1QŵS鹫R.U:"EJeOk&%Eu}BvrZ =*lfϮ׫xJB!9-?mgA?s]937? ]3vh_~ 7_`ͲwJH6~>c,>z\׻ufTT} 6/ :Baмx*\ÝU?*#/w2ؾZ[ITfdlwOF RLBmnV?՚SO9G1 y^Bס_v7pY`bjƹ9g;M[Gg=Ϥ#ϧU(.޼cT5-2151W6qn7eعk CE;[؍:;V HNKI(JFEE;[>[ccթ2o/{ỳm)kjGcjҾ79}>>qۭ;156Iڬ޽ ܼ)f- f@ܜXs7ܼ)iwT<}ʚ1_/rsstgC0{C#8v<)D'ʒۺiʖ3s3)Y?b}v *Mj3"AW1*ce^ F զzFQ7wqrjfē(cQy5_cF/k֡Fͺ\ġ_LF IDATs췃6kX4t^t5{*Kss :#oZk< ~EP~4}_8UF&q sf~b|^> ƧQCf3 [+K~:_}L¢o<~~;*C֡7JWXl<xn-3fZ-ݥ>$T`͘~9~wtjT'\`θq 9v:;~!L.'IJ?1d\L]ikߵwN2tlVjֻm'=OOaQ94V!!E7˅TOw[u'6s*5U/΄^/YޠLTY`NƂ;r< }Fņvb/[ݍ0OJ YҤnmv9ƚ=z=sg]˃A 1[-[EM$%-p߹!'/uv}yao R. 877w:ܵ?[}W#Jzr.VP<'{c{feI"t#>[+ {pIڀn. ~?W wTJގsA=m:l kyݔIrqAV;oɽ[kNlF)"A !);77wj/nב\u`٩KlZq7.vZT ֶv 9Or=ǺؓP(O4V!f,#)1M#^\%euڜC>,ď#=fo͞[WۮÃz"e2^sVoh wWbwsZ]^bY~پhYY+1Xgetk^!A Fnon3ѭy]6^xܽ9ȇ{E-tnZ]1{y~ ,\o[I禵Jk#Wi^ۉnҼ3&1wǽINowZ{Vfh5D%X4l3.׬1wJQμۿ(073nu7R`L^qG[n Xa뷽Y]r)=6w 0fpO~?]G_2|yacL;7ciDE^cڜHOM%6&CV>[Ųf>Ocai͘p4m>}6- \̱bޣ{9Va ]<kS߻V@ltc]^Z~m 3uU(0TNs~;{:wgI5hLC;V~Dў9&35ZçΌ?z{}Zݝ6|heaO!'® 1+#>)!0LN]Es\N$%:W(N: ; JO˕{zO]Aq_wUEKAq7xAB-, :㛘M;Elta/!xnCWlf6?i?96Oַ%| aC>^;t'=ؘ({Ԭ[ 9#B/Dw j?yLJ E=Ձe,ǞiPˣА$$27jTLK`90 VFT ȾQ+ŵVpr=*5~ ˒DVmߵW&»* -m툍)DKhr7vl\M| XN=JL0xP@c Ln|Ǟ/F57Bσ٫$:>A 6oз\^B7.ayy}a _j ?DWNv]ï,w˺1}H|r_OtV,/;Xb1)a+|^fx,G|`/B]r$fF3{=WӾϥUBmv9(ʕ5WOs8'151[f? `$]ۃW;ݻOmjb«:\ &!K v9JyY3"8u~?ܬ,M&61ާSLXF ZLo7Z$3WUkp'y>^gGF *Z耋Cpuu:|)hL%FTtN|^/f0cS&|ŵ|c?etoÞm:z< WDG+o\ýf]L:iG2 ŷk:z<mV`_o0cSdtd(JFOOl}|ڋm?tڛؘb;jz&_/L˔)eyG 5ԱROر;E>̆ z8۠v+_>dtk31cj4Z-V?i~Kb^֌WT"lտ,.ylWw^3514?(Vߝね^LOK%:2k["f7Wj4{nEhsnXÑ{4[˭J!F\ho&%3gCF<19- 7g' r꽖V둪RtNY٨22 {unޔo}6UedRQUf&lY|~ڵ18.[+K  toܜݪMUWٽ977 .!xq6^J嬪NТɋxOaҕ$ѹYS˚Ѫ/֙+|j-!"073cܠ~]'hi^ϓ՟~Yӗ@Ifd\1#h݀~L^V昚нUs2H'-[(*;:kw[wj$t>.&3%J%$02VE_~l;>xX.!e$E:mNGXt!|cQZ)>dn;ZPK @BRXѴ5kd7gu7g1Gr-}0 o{'93;rŐ.DKB mTLiӰẅ*NR*Ih=yeT*H ]BB.qOy`Rֻ~/a% `-!KH%g 7V*C+QE.]:cVF|RJC`>Yp.!KBx 4B1Oַ%| T8:0_/D%(l5w].Lh5oo2UknT<;_/aUf&]W۩cOyMz)>),Px[BIg\JeޝK]!J22ye o˛=<*^؁}zLS{VN? [C^E7-Ot'"5]%t3{6|md[vRgeBhD',S*`eB解ޠg*;:W7%-Bnn2jWbbD \B!#I,S,3էzN\"%-ukQge|-9nÖT=Ax :U`^!`n%GJZ:f}EOЇ0G 󗛚gP0Uu& 7w*`qm_ [}熜 ؋ 1R.{HMx"R%_L,˛>b:O:+!}151ى}'vDZ֯Gt|=&LkU˚Ke}S:+sIӺ aٔI8:rWKssϜcԬ KdC4It|'+^֙I  [8zjs0$MMx{n%ij6[=% `2ݗ;2sgfw->x`k0f0̅.!K<3wnnn;-?^Y?צC151fO?ry$wziIhd/}_;vvGűUK ~}ny2QL\c8X3g͏:+`N_"4:˚ޛVDP0_nGQADP06ߩYn%r.^«;O:\F^ך;&Sc )))ʲsAGC?7M͹9U~V \B! wj[LJ6f6f=ҢkfOeys}'G|5xi>wfl8fe)֒'Zթ"ӆij97g=:o'b"A RⱯ#) ]>MNξIɽbᬪNТɓnЫFuNo֏B`oGء5Z-JZ8mun1<ܱ,oN-*|}3o˘57z.Ouhnq𫵛jrrrRV P\R׎. ]lfwXt̰WΘVI=-CZ$Q:З!}i>mܜĖG3hgtyCl--76sG8 ,:S7>=g57ҭ?&8а'ż~Xa3;<ͰU S!ij JFbb{FWfa7HHIwʘjoz_섓~F%$<MN(8Fplqqt :>A݄ۨ akiyY3h5CtAPrޓ2OVHUF/m~rrgnxHM%Q02Vf' _ϳ[wq|8f\ɘ9 X=cԭ4.aKO ]BH*̀JŔ6 }njT*N\ҭ;9r Uf&Nv ͒@sg+R六F.7!$t !K&) m맕 [/_K%l !K ](xc>N>򓎏U\7tƬ|`)%#.!$t)}ڵ-a9-#%#.!$tUlbl/׼X 0(oyy&orBzofL~ UE7-o?[V}'#WB}G!J/17/4B^8+J`^h+-t\f!!=NvWD_yG,Sk0!#xJ7z-EU}Dkbvt: hV`!D!D\BWVKn?B.!#Aϋy_'AaH_BQ?q>2!uox\a%_jk+%wBBW?uE8qc~9B}G!çҾt>dyI⹶;Ƨ~BHBgB7d)!.!xvNBBBc|bn#wREs+6UqmbB⍉S/Vo|o䉍kSCt -ޢѽ2FJ*7DF]쓡B!ij }J >(LO1[?v,Z2̬ю *) Z^onj0CQ*܎>U%/pm1 # ~ђL?r)ocLӟㅝc45X/P)B ]BHiob|I&Ars8\tNIxş~6Fy=*>1Rk3S[v$G(|MSHVz4,r=kr !%ٝo'?Awo&;m4}&Ѝ\vH|G6(_ ~ŅzQFz71ź70R01ǪeYq輧+ݞId<= JDabluB BeQd0!:U71P_h8<g74XnU ors4j8 %];ANgnG![kttju|fe{a܎:Ch[9osT L! 5]%=+MqN-)Mtī6ƵemK(LI  .x/:bbn-.F&P#)D~kw܎>co˶Zsbv邙ggV&Q'ף41ǩ^/T"n[Qn{Uo%B ]P9 P?pRsf31gØcx__ϳחv!B(_zE鍤D=+s'1 wMyfVNX:y>꿘Kf~t {( FL- \묌CW.*!2/9vsT95r4jWp7j L&hH̪P"7G[yjwWǺ xHMUbX J^BFRX~59`yz|(iq!ظx?X:y B]B!B!$t !B ]EyI<)!BBϊ*:1gJ.!BBB!U"dgJ~zYdrs4kTd=Ҿ2SѨdD?t[YGAEO"KHe(&B<)_r; 6NϹjn|wju 셍7ٙDc3+ ko/}&Ti< ͱڈ6K{kc0j;|&EɪkF ^Ȟo˪/ wDRpL-To32F.\mwtH&C , .`UoHR6=A CiJ:]S } =0ؠ]eM͗?Ʈz2noBH*մj2R{X+{͟Vs |fj,1WjqURIucfDS΍+Gc%o)MprU?Cqm6{&Ezp'KYq;.퟉kSjv#)ѧ7rapϛ$3*d濈^ٹ.퟉s8 @\2FJ@ԩko#)1g#2S8YRO/]%QsG*ﳛFq+ZkSjq , hxFEFjW׺h3Cv,Aak 0 &BB(gB[5?6UptA3B΢CTɴ{J^e!{41}0tYDZkQĜJZ\0ۺ8i$17Տ˿~kS7rxt _KZ8 N! ±&vN"-.$/SHorՁ?GfZ,}]i6z>lxKd(fVN\2F 3+'z~O.LJxn-ޢfiNzf$_P?*e+z`&iq!%=t9=cBhrUi:̠'ޤ8o靖AJ nR W>0RW$Buu:b!4JѨqppi4ī`jQP?NU%/Z{q 7GC/Hq2FJ=@FK!x9.Rt:W\ yh[8֢gZ|ٙ(M ܖujҮZsZ=c%R\i~sKJM"KCBLW@e }(Z8n4em\ x凖 }zhz}שc.oKX Nzǭ!:Nqﯖ /_T> WQDh& GMNU2R +Hn[IG6@[3 2!%'!*nGX>֭ÿtP? G1uo-=LIV1noǹ^o}* 5|lgּ?HED VT?6Mzx>׭ٝvn͹+ ;?7󇇸xйM|hGZOJI}&jbaGsd(U %7GCŃP!6hzp-`iq!0qՅj.osp0]G^Hcҿ袖}_mkӼPI>1RrB|h6ͭG\nͬwoMB_bl~hEPCiq!qxv"gpn=cbn+cv !x/9}V%2Rqv w"IYJ_"hx2Ro5V *ZQ{af8[WbZ.XKgbfLQ(ͰpE܅_c3K$Gc< cS[LYdM&b/`Zu:ǗJ5ǣÇZ8xşKb0AiZ\pmnHaLmYTD"~.bĵwQyǿI:KCMH 0`DVsDò(::93YWaPqaEqza\pd\$%$ HHB;&]z 9o}9Δ$UKօ=rؗ=ҝ˩8Ј[z('4{͸k|6u'I6sK~<&w4{I6h)qo˩.mXwX_1 NQWY篙Iu.Rx= E_'{:Mn'4ֱ3;:ShcBlz6i -/r#HuKB{-e_p+X*%_oiw~ߋƂ޾ șѯvVd:jBQ!ؽIsCkgdM[O-_-f&@LxP+vH98+ 5WtO?7ݶHMYJND{h9}) ^',"{VPƆ|s'[4{=tMqR{*OcKˢÛe䔵tNU[?N$<2A&k R׹rcؽOd~n=RW]J9|nj@Î%pd'M}u)E *#xEn[D}=ML)y4֟Ճ("" ]Yef+s2mlۗ-oѯz\]cӹOQ،1h*ǿYALjLnggT^w z Y8wN^[j g)پ;jHؠel>FI-{CL{ȝw!.h3Mn'ѽG4{=TavlI5 @-?DXd%;Duvk} }|9եl_FLz6yhɖaJ5]7Yy:"z d䔵Tmq+s|F>[=&=540Y[cE% {%0':[}n{o{XdTl1^KEaソ!U-B:Jv,3lYPQ@S>C#3ӎM4T8;QI0MYypKKqD%ٟ9ui\=.F;_vVh)ÖEA8 ^cM!RFgG}qo/ٷXĤgsDmԞ wmvV]jgMz EDDj6ݐ ޯF)6[9K?daVN|g8sN;6qڱ8r1k1[cta:9vl‘3 yl1e2[b[tBW'nK1rșOH"?sQ7~%:FP_]J[ x;x;}vVQUJ/IY*M$DI4{=:{>xyЈ[8"u4M!R,IDATJW v=""rS&z''k*Pa.U=5@;o5TɎe珓ucSyJ~[/_pMcC v䷽dw4{=䯙ɦywPs|l"6ަ&*oeo3(޺hh"6c aV,hV38g0^8Kڹj˩((""7Fn{LNᆹcZ;@S)Oi8r뿞 yӘBݶ[#\Mn';D5- 9u` 2'!Xr3?5ng}usqՖ3`›1x"Gޏ'WtMY0;>p[2x;E bK͢tr*z2 \fCqh !,2^9my+Wd\*(V6Ԕ0A{=""}hIؿr:RnI2 dO'8̊c|@S CBؙTuؒٹQQ=}C#|SeY@(VN<}+_`'D1%ҡ/gS9eMB_C}Z/-Qd{OflȖw[̖QTH/"""%7-eDEDD8B"""rciKDDDDKDDDDKDDDDDDDDDDDDDDDDDKDDDDKDDDDDDDDDDDDDDDDDKDDDDKDDDDKDDDDnNxMe@i; 6ұ FIENDB`grpc-1.30.2/doc/images/compression_cookbook_outgoing.png000066400000000000000000003600571370425124100234240ustar00rootroot00000000000000PNG  IHDR\ay.bKGD pHYs  tIME 9H IDATxy\Te`eQ 0]34,5KMҴJ\p˥%q}WEE\A1P}_Z~>~r9soιy_K@J`v5gzI\ -ņ2L@eO ŚPMH_S)& τx 35(~'I驙ݲsl Ӓ2 X&00ևM ajz7҇ES*CiI ;=RYi9HMHCJB:2Ӳʤe2c"u _GWx%73w{@DDDDDLF=(+#%!62/@ݱ:;ñ aPAGiIRҐG#}WjneP}ލ[#"""""gsj$1uޓGo=c_Wfkoå[F b_G#N,/Iy-h/))0(ݛU;yENEYك|hCѡsqt< CHL} i)e]LDDDDD 5uظEZSs8پ[JB.ՀPifrXK*+-g% y"""""bxz℟~T/4ƦF*{Obq|P暜x63U1`̀yY[z]MM]};EB1X~z_@L*ۓ! n}-4tvg R@  -mF]K77JI˽3@"""""bxndzW-ލc  C!6TCuB8ޛ#L@,BDDDDD ϪO[.+Euאw>q X:D{X7È+HJ(geTm7,G]9CőGRo. OKzHcUT[PplfqYPߪߩ7fEꙺ:-hFGIe?@ !""""bxWCM]p`WN.F^C4zhd̛6ܭ.QF]xɖnc$.6-=GVZe.\r9YVGɊGAjB:,!?p=He24vqr9\9{h/+51-'!""""R]RV;p^/]o8/폫8Szf;cdifph>p7~Ғ2| cS#ixx!?v QZRJơm'u|att|A*1DE< rp43}}:? aG..dg[nTUC7{G;5D"S[@YB_ыOUM֖jjx1<7&Fa,?.J*NzBsm[mYw*@/q*bލyupvQڳvJ3ǵ58!""""bxnLXd)K(KODqI}Jkgr^2,ݾ}dz뛎::|ؕ*Î~!]>eXٚ+.(L\(XḴ\SKE馁lf5^>DDDDD ύk[)Ef u~ʫqܬ>ۘ*-)\M^J1<7⪩gffAV.Kf%Gۮ]RT% n 8?aٜ6rKY"""""–Z$JrTآ`LLK~Y /1s&YϓHKJ1< =}HDDDDDL/A|*u3KIp3N˃N]Cso$-DDDDD ύ)<{TZښ>ZmYiIB.@]klTD4vߏ5 6x]s^ ߖe " p܉CDDDD<8`Xm5UBxxuQtpoAAn!t:*ۺrm; SKX45ǵplރOGx^zMp4ڹݰxwH;ک\MSE!""""Rly]Yƪ~j|.`̲ObqhI o |7a{i#ڹߎ)F>s^ڈ G~}eiIąb3Ѽ|,T&U;yJҒ2e;r[uth2e.Bih` @ 8w#UIqPSS@9/"""""n۵L&yAǨ w7tݾtEϭ04~crG'pry wr~]j qtBL&CDDDD\\r;a3T8u`sm SKj ӎ=RҰ6 ~9HIH tk fy1<76'IU ]\$ADm[7˧c5c!FO@u~8xN:7+g_4*rG scs5=9Ө9_U"$. \ޝk\HYəD;׶xX^}Z݃TZËnғ3Q$.eCDDDDHd2مE~=uEqkҭ= k\ U]1vs[)Ñߖ*Z#TJU\="N!""""R>0'N7XYy5kr}q=88#=9wb`hc<C!!7+^nU]8~Y^1DDDDDGԉ̬FO:z"F[X45 lwDOhj>woF huEVPSWGvZ̭M1tL[>:ڊu nam;ƔyGͫ ZR%jYZRe;rt^2DDDDDʅ-u# r<vMUↅES3;|׸_>o|Ѽ-O+C*] BDDDD|s)//e#? b"c065B.*s7̔)'5 ?41U?XLEh &S88qf>3re25eH)vy*J?)&4a9u3Kzj5n_ēDH˥sE'T_nY """""gry@^VAפF^]Xo݉E32Pr\ZWM- 㶝^cno?gA=\ !""""bxWe"#5om [,IsLE>r|QkӲ2/yR$f KTD95r"X""""O%Pj:"ckiFP~KgL*0!""""bx: "=@}K5kTP^S3G+,-) 0ϙHegcWrrq76eW{%W>},Iq.18<7ZښWnZő7=HR>')₢>cETCXÑ!ʮ6U-),_==LDDDDL!AZ. z.lpYYyi{7'KR_O3nD,`+BDDDDma2iٱ㢍_"uH*b[ 4cUIy}dbf6fVlYi9'rogUTm7lEK߰jnQּ1KR{/*3n$/'?@*DDDDD[U@Sڹy[>_%TM?lK8B3| @5lyV rDzrfiW[{k5[,%>l^(5Tt LDDDDL ZTYIѐQqܭ|& xMDDDDh۶jPWW_9mʼ^z[OOqQʚo~GB3bUIuuPSSNd rA]XW=oc|BlxxsJ]][c3_..l)~\o~ .2DDDDDHC4-l[~YuWaіG-EU& IDAT(ڑҒ2^ :? ?lJd6 ?;1wa)j |ޙưDDDDDXk{WM埙?X/0147끉|L=Kʽ]e"ݢM. dHTnXtbж㗃]wlYcGJ5}MDDDDD ԘB Nm^Ѯ z~-IH*`&"""""gRi} h-yw Zǟv7vƧfjhhIJOê3\h63U;q\ m; DDDDDL [\#6xecе+۾HV.Z$KJcՉ\hV M|.}bn?\.c&"""""gRм]/x+צI$Z_^uR)_ {455eO/*BDDDDD Ϥt937OkQݷWKTOz; DDDDDLJġ'._8%M4{(A[Iiv~ EWb?_Cs8ь1o!"4X_&Fjݦ>v*8t& ]T 'R3c1 I3%"""""gz9nɤ1aq`ރs|Qh"""""bxloF|u]P- c05|`G '"""""gס?$fLޘ5v$L T83zN_^jnj!o]C3AW;{-qXn>z̍TSRnA_!nb`QrRDY+LGKפEYQN+ADL$4׭3>?据 XcH7C4+## uz%DDLNG.m;~9ص{5v$쬭}]aծ}uS7(CLLDD ύ04 r5}o˾x辽;,~},&!!ᙈᙈ>m^z4J_;N-[>Y W,FvJ[kw#j>i|Jj朤=<H%PZS:aaqxA@Xm;}-x3Dó Clb2R)fZ]~urtm+VR_Gk$b("""":qG|vrw[s`͜e1gכ| Õ[wpnňs'}n314XW076Blb E"wjkiЅ EwS7Z+܍Dw7۫<[߲0዗m0[W,d [gMιOWH ;l-̿KJUFDDDDT?B8ivֱ`ů<8A֐%gʴ BIi)+xO=UPbIEx~⌢%E}+ /V{?0&Fx"G>zusƿJOGx<а8""""ǖ w=c"Dkqrw/@KEnCԣ8seIY6͟Sbϑ _vwպsgGfv7`nlTegL(9zʲ)Ç tǯ8cʶ)B*oZ#5+C0oo:^*ѮV͞SghHLUftuNA3do!`߹EBZ5kz@+^DDDDD J|y޲~ٹYht_>z{|`%ųǍ/] D`-xCNAr M"Zrzt`;wf5<;me{tú=BYيSϏSVkkib[Cwqbծ}OIES1X JIm-ML>׶mֽ[o=h""""ncWMKoF?4xpl]8_ѽ>tm_{`Ɗ0п E#AZ+Gvh `'̌`a߲blZZpsj?e;B k+hkikieӪ2@1eJd#~+بZi n]ϷO̧~ 9闐JK*GVF"!)k={뱓QfFcfdDDDDDK|*8tiHICbWSPu{bfGU$D{@o_^gCmHu^`?1<^͈ e3aP:WYy{2eOSq缟 ][ۭ-yظ0,151(!y>z jհ{Lt jYc[8=?*h7R<͌㠟ayP*Aav,Wl;{v 7>T?lr@KdLDDɍm_n2\<x!Qh<]C3AWla=φj6v֪2zZnm0ǚ931kHu{N-`ͣ$ PnX;?ܲkﻰ۠)C%Tgkl-HXkhCV^;fɇg^&/&DDTgm?t{o׃KV].)-s\Ÿݿx2rm(T{5QX^3P:FTE#[8x~3^UBgyȈ>BC+8z}R>EI~ ޜ_e[~]c[M>x(;Fe0r­}f"X:ϵx'EQv5`ÖW q~9nSt7sCA?i Q' #"۹̀0uQW&C| bk}W-|-ޜ iY 7Tu mX9hkgC̅ ^DDTM >1,o|{B3r$ո,QuebISؾhօ,MM414̴CYm>fWܿ>ةW#t\~ ݽ2tEHVgk,A.+GUK@Qv,U̝r(Z (-A (ʎS-#}-{D牻`<wBzy<}O]Aqn"_CI៟MpŹ0m Ҳ&&b0k n@3}[FTi W6t FG86B^b˷k2kpfъc m$؍nƤh;x1fAzҏ~Ɠ[>b5Lܐ| Z0imϗ֩|u6ltE_v/Y-T3p*8b M0bGqG+¢@\O׊TEEc;D:*)zFZQ}b NT?;kK:K8tq)]ڴFO,ߺr&Y>GN@$wOMC`M ɘr-ά_JkϿkݷW?\%Fڹol朤=JK ǟװNT< ?{gx}u4*FMuS-ܪ}&YXVfyŬ%"CAjt@|v<͌Eaݡ'kmQt,Gld*_Ί $ȉ UamMZw oc&ZhҲV<:{м$=h3zώ:JJ 3nGťľ+V \7GB/ R#<|WaZh4nbe9:7m:%ow;򆁕3!n7wMѼ֩lu6Ǎg aSm Rf!61"F>@LRCo!#>?)K#@TT+^^qOIm;1䳯-{`HLπ5m Vtw)(lHLP-(Ts0AYC2oIgycGZ3rs_ުk;g^Db':B_&&6twlx.4׳>˟gB6g{UVbj,j@ *nF@#k\_[ i !W, ?o~ CB1bc'R-2ѹ!,NTb??~!]ፃp,߱b;ǚgB#ĩr Oy#n?B_mc;W1﫭9~ڷS;O{>#m)\[c~Ř<|JW.tuYݽ{dzN~9% v-5y,%-P1@'*FW0XwxqWS I~*,ոӐe:"PڢXx8/"3%r IDATjUGs [!+/8;%0mO3c[3 ̡+Ъ~khC[ʮEcᆪ6?0Cs轈b 51W%1Qbb,QQ" Uf`?FPZ3P{che-ȕrDg&:n+1Rܰ˗HgڭYZf=ʆn^k3EAfn.ҲҡҶѓ D* Q##xl|o_y߈1 ekm?o/ C]]l_4 ֣'1:a͜y>j"<]?/_~O?g'z{a̒X9?GH;|]Zcaii")5 بB {m:<wV73rGU]Uz=B=4Y\<=9qP LFՈes/IE.[غ`Xbb=qJ;5q() 2)O^*u]DnJ 굆PC( A@WZ4O{I Lu-kKnj_~0M4G鳔hW@WG-̕].{k+9 7kh=t vT Ș0w򟡮.$iN(dz#.mݤejˆVQzuTz SP$;C1շPtKi(t6x6^ʺh:LX'8)]YfMBMKOe /Irtz׽<ŪB 4ꈴ@d'Fa'=4,p|?;(D\;y] !|kF5wpnysϪ 5`u( Ƒr/ t}g\u{㹜B ^DDa.n;\$؁٣Y;Gi_v>G[Y[!.Ҳ۲08)3]ށ) uuzB>* ܇})[+ù9 7w&X2΃FݸrϤ[aaHzBܼ?|Op_ʣ 5xl4_W|qϜ ~[41#_ksB ֽ`3=nol`<U|(g^` FtyIsAS5k:Fxx㰲weto P6I(I;OPQDr^aPqt MھIO5k{!P*_AV(UsdƇ?@A9xuH؎;?@&ɁSO$ ORc<۵=PCC[7")w ʮ6ct%7~4i^:] 44^Z]̟xd(J a~ T=6-%AA_M7_e/ߺsq6Ddzc ڡZ4ø%+s/"\63Eۖ-0wrQ'x+Z6Rg@ u5*13Յs'q&<ώ]❔؄Drr\\XnD+[cqh^rmyJ^XqϷ߸{_^hiBC]z"t Qk7ef;7m)40ƫ'7i׶}=sx:z EX&>``>驚.7/V\/9:t+%]az %8O]ѮcnHn IpǸaG }6) }:h}!bF|k QTje>5!piCDl(42T^SQmЯu[?ż])R} 5LY[ ; z:ؾ"pJODDJuɍNp"4bۆ0{Jm2ss'NE W,Fcz [[!-+=c$~PF#Jzv9q݈o8^3[g[w3Ƃ[EC{L<@9ϳ礯\[[ӷ#^3u8|!b^=hhh)G4{ 1q~ -;1hPO'Vto>pL^ fa/[0гU<1ǖ# M ML\8ڥu$9HP"#rAEpj^]X9{*B1㠩kQ.'ΈP"#7j .g ; uK?[Vo5M xeϮ9'""E,4߈6ٻ;&&Qf~:(41>]iBѽڇ痹ub/vCmsEb><#y5" DD UJxiMcz*GV&--+ľ {fC1,X\Q97%6t )r\Gl٤3%vg'-b`BS: g#섩QU;䥿 M krR( gJ@܅5NB$ula gt 'y j-*CDB1Mu453tE"#hg"^"B",7&J- @A5-<UU| `)ԪVDDL9\K$S33Ov7%gt^] +;_빆E2?0U[v^TEW:ϒlUwڢ6г^m:J&xhx;(W^94;~ [&{ŀa6X%"潶p1c&T5L^h&] xhxep&w^zĞZBGS]F =3af&n'$bpΘ1t ~Oo#'-KJJ, X"z=c,1<22'LaU|S/].i&.ETmm&. Bc3#ldrysb.omfik@zih#P#E2Yy_Y!j4{Z;4Ƃ_bloo;|O%?"bҔ?7„}X*uxvihPMP$A8IrR /r]'iBq&$9^>I{vJe䤼rB UbvJefr%2^DDT%o%%2EUOodgQŪߩ=Z4x87G6pb(l{tM=JQx-%EEP vu*O` {ڞ JBo.bO-FVRt[s:@ Ƶ\x{W(+X =咯C\jg(n jYqq Uů܄0?_n̓35j灛v1Gg#/=*B5k P)m򳒐t92)Eq);>[oJhװ8 LĞZ*};8Z:FɸS(P©'w SeȿubsJ l\Ѥ[.W[4j&=C̡\#!/C.])^X$u{R)_unܰ!IJMC+^06Bzn tuX,u + KPPGu0̚vE}E_q03jz#8"? yV/~h7 3}hPj ^:yqhWJQA Pm4W~s& ~<>34k ^U![ S$GŝP&=;ؾeRhC^(Fom'°;32FAV> &p S /w܇hBײn#.h5"Ìph蘢X&E/}$5}[g$~Fm&jYH^l q] ^\hY'""wȋu{|nYxz6e[X"=+kɩipl`TO_VX\JLjj"Iw 5pJdąܩ'n㸋k?U.'2Gote:wϭuk?l5wꉫ r)ךm AVBr\X:X6%MV~ r1嬲Ȯ- 3[ʐY$Ɂ}h9K{$5ͽעn+ŋ YN-B!#>B1΃][v2 RcQR,C8Y h?X;Ο? /=:H)pZz.Õ4m=pRE;à 6KDDj <& 5E2(vcd_$1a Gֻ8@upcqNh>hР9߹'4j,]}_OXVHsRF ٤3m;iϢXQ\A[E|sʏ *my}vTP"s0iԱ\W+)!v`-N?+~^6Qw  B]{-똃PQBMKu\ۏߕy4&Qw@JqEn36 a39_g֟ )N[NDD1kX$ל|:͟;jx]S}@"-M{s',?ia t7oyg c#hh͸.)Hj`%P܈"DF6VhZ z+{Y\~T@LSϲ/g˞m~~~;8=B1.VqY(TfҰ,{È2B 5 N=aB 5{93}x&ZQ'm|~Z2 Y,BZ1=yi`=H&G`C/۩]6Cir_xvgJ=컌xzCDTkd,bpMܔrIrR*Lu<~{n%`ڸ3TTHPIWRٷ{gǘ~'œIW*icWO8)78W$mb닫=]EE /@L{!89lR.*Si)[MxSZ8!R0u>uxL5lF!үk lBUMW"1b;qwvE\6 ; m/il+sjn2\ۏB~VLu$ E8V2 ,Q){UNkVC̱ٸke] ߁f˨iqy46(b)Mu![t,N}~PI|u/nгrF"xGTଢ򝮶y 'XVR)?8YKQDt_V5:5HAmuIr: (g$X&I7ucHrR K[mP$i*oTFD1}3e 2y@le5| x:isQ;},5ej; |Ѭ \S=ᙈ>\xf ya_p1:=ܪܡn "zx(\͕__iq4Ѳ9 uu˭72Bh]Z܋(KEw)U.ʡ쭭^8#cn!F dr9 t1W7@喵4c6;V߅acar41§:7FۯS;>8:(cɋ-umGO 5~,+]edlVCF?:цp)f iQ!r9S?w-b#.93Votu=}瑔Sap\'?cʊ]kk3g1db%HJM礯s4w$!~0<22LaՒ'7ICĶc0VAY2cz]\w1E[s':0w6qg#uq5L 3G ~H o~7Sme;pW1brm0lLu \x~1wK]^}Ko 86A&j-Brj{^?9~OZbqYh(ֈ3"ldS/X0m`|>;t GC!-,BKZ ^L/{uGЕs/2ss[a* 0w%=0o}1 .mMHDxhd_ngGۮllNUx;qbb.8Z)3YzC,DK$:4u?4hМ\r@LDDDDH&955zul?wo: Weap?0yz"Erbh'.cP01Ї!xb.wpulZ'oY8}ip`dֽ En<\[[aHԥ`mf lcFTC0wïii*?7eiiCcZ61ЇiDZ{P7_ 5#zސ!""""L%  cvj.B4τfwBq:*@59 >Fe`ڈQI 1}AKpUs o{ ko+^͛ ŏ\KJJnB=/cbx&bx&"ovA&{c²ˍ M>T>|MZX~'C}RӐk3SH s,XCV#֝r1WDuq#.Efn.BV,ǚ]x67wBҐW:Ufn.vERGO|\h%P^DDDDD5spBV\|QFf?ZR\9;ύ:5Ō+YtuwŢ*wn3a {B(&֣'s .Mkia!ܰ />cjo^ gwmeŖ˕aˑ"Y\R/,|nKע ?N[وQ1^ c#d>cPـg2"mp"4]o7jpNCh8WCм^Iw:ȊgLDDDDTsz./.KJ2dw۫,<6 +.  F- :Xs`ٵztń} 貭--bΆ_-Iipl`Y+WBC]ʡ6͞QnC7EsѢ;.sgl))*rb #^X$u{R)_unܰ]X=cJŋF Ao+(xwh# ܱ'BpjJhPtswU.++n  ~4x͘SngϨmY~aڠʮ!4;X`;/A""""ڃݶkF^#/.uSy<|Ą)}"-M ?w"ss] ~7Ne{ð} .l-oPt06z}rqlfזּWu?$d:gIQѯ08>ly9$[FF͸umZι'gciV+K$jk3S#37C”'AZX{k+U"-M[[ᯛ1PWӇ:iMK~91b0Eh}tqsʝ{0=< -,}1q/ uuЧrY c#,Qþʭ1lG;۷*͸.)Hj`%ޥ7&Sa jkk~&4w Ryy1<1<1<3<ӳ̭{ }{k}rs1ѷ:GKI QM@DLMuLh 8ExM8|-lj=;齃)>:TzoOk"pq"iaC-~x71fkdlDDDDDTU3чd`P3VF4WYVCRMDDDDDᙨF44$DDDDDLċqPe}Z(Fp*,""""""vhx Kד+aɉ/[e """""g @O#uhDDDDDL5w~6H*o8,%1ҪIc>6^|d--nbr.C41ȶer9Ԅ73rG1<3M4:P &-,Žgn"=QH\xֈ郇{^ݪDh~@1Eh"""""ggz6~;}‰ЈWcoN°]V;7O DZBwx3Jq41+AT Sdٖ MҳgQ5$ cxoDHKGfn.ޏ]e&Ƈ*龌=Quwrym't>ϰUy: ogǤ~ٺaF:Zg0ŢpCz v6&"""""gz<e f ]mQ8>S},? nhӸ:uRMv-{⶧/z:,¡O5?O&ҪIc>6XD&&2D31<3<3s-ں{B t2c@8ٲ0v#+w'vҬ ~A(8;NtD!qceᙈ>bh/&35ԿM DLD mvK6aݻ@C]r;|[/41?z71y &bx&"gg"Uy:fh1oM6 / U3D Zii&5WQ\|?ώIuM=01t DZ,N5bEG&a-Ym1<ӿ \}@_[_`Ё8՘>?7jixN: DDDDDyvXT_OE8|ԀJx5_F=x<|晈3F$4 wtm) SK&$%a7% LD D W9:bK-0u7l,-XZ*^ҪIc>6XD&&2D󛹱*@ ?˥8;ͽTcKun36(g""5]m` 6_+Q_]2B]dZn^C{vMdg>u} ڦ[P*T*TQFHOœ5uuq?J%˺&p*z-;m3G\,o&8_~onl0`VՒEս .wOe:4$_ qB1EnJtJxz" az Y~#kٺi5{u‰ Kx + x@17Xj#V/[ix۱5vl+!&+}6 cvGwZW!d Oh<-MU~pqlK7wFF/񻹑P6#95uCbub:]iKlnJ4*@LZGcBĞ'%"u^Kv4m k+!:j|5#nf; >,r +:kqG :CFx?7EI{ obkuIw"/]LjN mbx{2u奚MGWF"x0\>Pk;)+acu롍[ +Ėwv}UQ٥5 CJ7tqs _HS#^,N!*©Q(άaܫ\g@:DWE}hk4X.tF@ˠg.9 IDATpbss$$9٤3XuA])еp{&I0wkv,9>PQN}~,΋eR W(ظiгjPslbM-߅E> y*B5pGc\.O`8ȋ݈Bq&Tp'!P!!qAs?7@/ @ݶS 0-]`i\&~w/HMyhAvH]T=?_2Radj =p;ܺ^C$7g@FZ*\<:'n|1wF|2y3I W(²n=4kɿzJx] ۠͜[r}99Y=p;.P @1_,ƅ?#)>DpkV{wpːJ0$8w X3 1)>] ݼP3INZQ ;3<Ԕݼ޸/BFCj9%# CgGNpE{[Y);@_+tNB~F<{TOEZl ;NA(IA\j\> -bDصzwOPu_,u))`g AAV 3)[=zӞJRDؗa f0cm"&d2.2HRT㩫GY"r߯W/{9|d 6d$GSƍX2N/{,R~>w8;4uCx~/{clߚlywO-#pU[\U%MŅaMk$ ^׍AH"ث3iqaX=[7(ۨchX tĩSQź #/*|}kˆ}k*;KiM[͙ʊ3uPWB/SsbfM͞hҲ~$++u+3sWletڛLCttzi=NRACkj Qhzl+WaܰHųd9=',3-XMŠ3DGEhd yҹ7_8}T~WH0dʃʅ DL-yϢPXXbuPW\&'2u0m^;W/1u0TU%Cq\V/Ͱ1:fRU[;{"o+]Wnx{$$?Vݳ+Z4;F="n+5QD(гr\ؐTг@ϪySGwlipoSѐHLwFŃۉ2lDrse +}TmvlʂƳ''ܩ?/oȘɳАH˹|t™>~5 .~>6]ΠQ㞽o>`٬زGh5.c-B3&g&ȏC\ՋABĄ8~Cc6ª r93Əg gLf,Z-lsu[R}w1!@UMV,[= |- !u PNE9S7 /sktVhV.k gN  W:DBo{͐+~104ywoqRbcz&UGC&I;:.۸+ywbcraIL;?Ku?eƢX+jh5c_%}]zy];FDldllV{ H_(B#"9tǚ::>wk%WuyF& 7ϭ;06&s/q<#;wzvR roGϖ˯޵uOߋ OiJQdRɡmk՝# p6ocGa nhdU"VnajMK~nHhې' < Wc<Űj2ubTHj!OT|'Gpne܌T\R?0~?:f0sn+vfs8R$![= ֵ(.յA.֨J$ פz-XXU{!8;}不+b$Dݽr* ]#o+m=){!5mIECVv5DU^ya@qJNM6 o[7CZFn.QU^*U'/٤ʅ 4dbSS}z+TQz_8**TU%.$@wQH(xY[a_dge*M2X9a̰vNu9.:}t_=u*än(<ѧ;)r9[}ޢ)-]KVҹi#A,{nI5MkJW8LFn|Pdӝ$^~{ POwߝ{G'XsBǬܿzHmR{ؾM] ć%n 8:=V 7S%vD_&@E"Er}$w$>IoK9W˖&ܩ hYpE^5aI3+V lR-×^CRA"mWSLޣ/.kнAvڻ0*Z/JUc3lMS}O%QZ(imPJ,+~_D\|zǯulZj z%7s`4d2:t͞{ܠ W.ۇ.}x!/鳌+Dߊf\߿Cx,5O FV>GFzz#==BB9s6<#OHzLFn?mM}ӿCk}8C۷~'Qhݟ-OB@Wг -.*nËg˓(JyeţR^JSf d/!?r* l(CFr4MFYiHW  =]N@V []=2rZwĮc1񖗛[e$&q1 r#w_ {ҽߐ2mŷ2 #_.pBaWC?!?IuEDk^9gŠ3dgeWn3,8Kr/k2 SΣ9ʄ2k:Q N^"vRbb%_q֏]0jsI.}ޥCf-@t$\;?7ql ^~>'No({nA>qZ(1ikcݡ/ Ɔ6ӇUutԌ4[~ďMRTIz0Ͳ'gcV#5NNf )qjk)VH1քt[4Ěk.d/FD)N^SVzqL [4C lxR(fW:Դfj xYGtVnwFn8V%7/xRR1ӥC Sߡk>ˑxv8L6yr-6mDUx6axwͼM<^Z0ywZYphقbmZ/,;Lڏϱi1ǵm`,e4~q7D_#)%sc# 7<[UQxlaZ*5>wRKEojJǼ6m(4Q۷zv-m6=sV6Y$;t?䊽k; gg_ނVwO87ktÜ>~ν2+j$&(\ca,?NF[0}`wtbن3y&FظFHŤ&UaVotA!JYr?~}!1n7:?V uTHꨥ׎̚4E3' ۝4a%JѴgxXxm[۱u jeE6ը 7C. RScEtُ̏rh>p&z z\ Wښ2td2r}DUMk0hΣ\GxiNԯY?OK!0]~Uo(Y\cC=x(ǹPhbQ%1m WG|xi{.goZQ:aal$X (J\YRf T=>TeaQi`ȍL#]=ϏLDKPXk@^ @.( w}` Y&ziUl1nܫL!=1 }zܧbY.eyIQ'F"QGf`U*kp<Ѩ^zlaW~g@i(\:?VN~=-̽[<mA c,+{),lbBjRZ8}V}NzkH\$aʫcV}wOA乵4sMg @Z(ڨ&{a/[5k ؗ^WD&jT[;W{hu3U;{d2rs{KaW!oPB,r'I_%e^zC1{jJ*!/7 1Hg# Es_gwa̩T"=u'rzj!63+Ggq7^ǎݴ3ʖ ~n .ݦkʙ+H}"g_nv=Zy:4jNb/2uukk#:\yǍF:kw"NFDbge\ݚ7I<:Î9?硦5M,w>ݹgNHDtQm/K\9|pu0r Q lj6 E IDAT̩QA빰'z#2"%4}#wc-tvZX )v'B8vЏywL-,yO 9KŴRx02s3͚ߢur3 ɏ3WaalDVkX,hʵ\:Fh*f~ۋ|_ U.gư_,Aϖc^mHOgXgE8.QU}u+Gl- .5"u06-Uyf0Q]^с_ QC‹+ܾkUe 5Z8IxϜܬVƚy3s9)r9:2G ǘT4 k`*!7tnY3Q")q?.n\Y;ϬK( +o,8#5Q@svcu?"&|5h'yf9)hXc2fbz%צ1[rd/._8}%^RbVvL=%iߥ7ñ~˟!ޱ?.޳OvLh 8԰b_*&>VMRjߵ+Sv81l ۉO󗘳~K^rZZ. ]gRr(ܰQ<k(,Wp:kED>5"""3Ȁ=^[v?˳1#hɟ+9cXpN8 m">"J4_ :_ifMFY#RRܿSp%$ IEp@+n?F"""""""""x.m:qw/Lѧ;rTZ8ףmE|޴tOKGly8(SF~"Ez> {nfOIb는mpųA}ˎ sJyEDDގܼ"\@7$Qe~ ' J $q7|m,L7VR?DC3A).pri)|E~>ĺuӀ#8n٣B|k9Z4麗;уqq˟߷o&U 4;~Uź1Pc5?[ /,{!+-w Oϝ{w,# ;y#/[;HѶUpx<:|P477 [g4$+/+ y"cOt\<Oxn/,Yk<t\Vv8Zy#p5֔M(\r^t0j_z@Ww(ܳ_ÇZDT;uynM}\aZF8MFmaGLǂr^۱}x8׎o}ڨPG-*" curg4$ ޴AD\ &,_ A<{gӽ"ՇÁ%8HTln\,V+2BVA>9qcCZU-BC"E㗔{sCveL}ehzi~.ŶfuIe_YU(9)/W̔W^'[ZzkdVA*Wyc^tJsܷUYӢcCE"Š+Jds/7@) ϝw:N_ojnI=7깸AXcEC#||ѶWN3l)+І%UPSu~U=C#"17_e >ߡ]$͜1}*EG̉ä`e[&ߴEMNKM01S9~Pa|h֦wgn.se4d2\5t]SsK&fMhwQ_%n\ܿɿ؏EKЈ:_p+4ǑҦSw -)>5̿k ?)v{W"+;QYjݳ+#}PH~̨K$7?F -LYSggdRƚQz5rҋ]'N!D[SԳK1Ӷ ؍?v"Q"nujjX7|'\8p6UUU£j5ڴ=~L0o6Ӈ`Do%+v}E} b&rY 3Г z8ϧ1vصLVZXT#// fPōBC۱i- WNJƬ޶+jE&>&QōSZ6CcZ6Á[#r}ʷ][4>o.]MMkѧ(ߒ_nu;AZˁ{l6Y뷐 @i0߸n/y]ܴ5v(6bư&$2ps}4бK<~HOyO.}(َ}@V/%w+ lw#Ȥm5pe{{VMK xn܄S ;V-2HOC Oi=;aZq6f]w:("_QXKEHd ًeVmB1J乵e˹s“xzZ5ǦH"?7Ι0\Sطj.,ŦH ''3)oX ]b`E^"NTi~.n?V?me ;8-|5x7&1kN1ut'rv}Tk1êM0>6q -}کsUm(,n5.Cb #I>:,Iclߊ/FEۆOL,᧑j-si)̚ SHԣ q>t~_o:t-l7;9t8v1eEB?GCC`(W1n*7C.cZ̆Up}1wF.aߟM]bt3#aB?fee2adb>vЏ7b] gŖ=(][DoY \1>bӇ(ђ(RvgK\ڊ 1Gpv8ߵiIDRr:7kSgJJM:āQXcgL W{*B`%<ׯk۷*Ny) :)' b&TqQiuU\Χi(^ɳnË -ćMCϐŗ7^al~LuT!$5HwȳihKQǰ׫w{(Ei?``AL $+-zůY(T Ex Tvj\pPX$c:Db{Ry۷.߈-P^]MC[ӓ^zː4*ZRܬ{hWb65鉑\lZ=1MhJW~$I۷Re]Q_xoT1yuڅpEq32Z:J7ee3_mvtڇAgQ*ލvnU:vº/pBFܴU%FD‘}N B[;{ؼG>-mΝ|&׭AZle87ha۶u+J2y@_mPeDrj39Ed(g OQnP>$h(Uг(趬1m&[DᥦBQ:u%.DfhOIu<<_8Pgqqs_98NGjM1sꆶV_&a ď:VkB%v۷"ϮM%^3=1RJVAx_k:6 &$jyqr*,#*p-Iwߗ[PH1VT]%R+3@vzoFB@[uO&2^8aT$RZFd}ꞑ]{FV}=e`[4#ktd2s4}-)5%[ve On^UU9Fxt 1o6CnphjUeښGǔ(7ɏV?32rKs1jgb=N=+/%y<./Ga3kQ@Eƿ'>D[K乵8Dz~_ʫ$E!O BmCI~biaզhX 2[OcV:Ti(?yjM_{,(\"k^ ]˺X:CU"VJ/?}(^)৐$;><Ջ_55DZdM=x(GKFMNN݅2i)FА}Q"wŠ3%Z#-ЈCUU~ydGIQED\\}{Jړ5sf{QD=q>yMkAa0c<v(?]D*s2E^~>AC7!Rښ2BF`-yƤ֦&ĵe$XE'w[ AJ,& $1 " %υ%+-)>A- bdb\Z:ٳ~߯,ppA?ldWxsXZpI n܅;1g8SsKu>pJ1zyO6JI{u5!yxl\msFxg/R55L**Y UO^ի?R55.b0}zjAMʖ Rҷf­> c#)\M*balN& KIE%뵎 ǵtnO:4j@+WgIɛS~p*mU{rlPh$ k4 E8\miqaJi@Qit-*yNt=DZ\Fտyq6nQ7D,ļ:D_FFr4GgvhF+Y_`׷]\o4 yUDK;S 'mP5!)|S1{Ϭ:&DzOŪ >oS$s5$b됋}Vd{7h}cMۤ&R-#b/$/[a-ckgOZj Q\\ B\l+˪J$tڇ+^t.c1ԮGyh\5߉Š3\661Č#_iwtϭ!ߺ)GRϓyy &&6{ᜊz3jE4&=[6A[cou^Yu(0㴗rD\>KIE:G85>6FqBίm1#>e\ڝ B&/:&Bpؐޠf2;Gpy` )1!D]I= tk"bd ƞX. [ IDATv%nѹh Ȫ@.lIS{_oýMHR1AЖ' Y9>d:ʝ 1oV:&H ;Jl^t-NO"*!qNzbj8`eo/xQd$GU5 ˩HzWw^bd V<RAkaT9q}z7g;AƕX&1nDžDžv wC~ NLauMIN"= Dԣ/,eXT+ٮ# w:ri55)yDƵQs[Qw_XBDDMk_i ~g鈦6Qwb lѽgߑ?¬?1{ ={36&fB>_R("|I]4I%9#}]AM""uxm5sMAI[>~*9vI𺮀"XQegнcďcJ˂mqBn PGnUD*#r=qv?wϬ,kȻlZ3)= O2J͎s6D*#<`17)"t[E'O-wW|T,}& *_+k6mȓpLڽU܆;"QSӋTNE}+q˛x7K{!QAׂwvMC[pOEo=>LzK[cT5~ s%oY,4j2!XYQڠ]gm])Y}H ]YN -iK6^<If]}!W?$2~"lѡK{&)Y_wя"4I.);'?FvU3D-"R60$HYc`Tˈ}IO¸&N,(ܓ  iա3?N^(VD/_s[C4nb#Y3 25ﴈH)S:kATP4{o]oP&Y*R S Kq)MC:qکy4UirЈHBFѭ"I9ښ2Ɔ::L呕#zQxPzY9 DDDDD ahseu|\9?{V).U234(,oҹestn</ :[Ck G_O6HJM'1͙̈@qቈJYxd\xߴCg/ ֥tR>07.O-йes^ְ#}ok`o27ñ 8f8cfGpu߂Fjbx 8 ,X[Z`o`kEw+ !42Mja_0u:fCTV2KĶc'!Z,? ֖ܶ1 cؑh״1\ֻ' Hq 40m렘`\I鰵46'`Z7\YFzzX<Mjbn3q2um-M:-6]#:Z{V\cED`03?09+;a}{9_{7qo݊`^-߃Gk;Eޭ6dfmo{%:/Bn8Vmۡ/͸[4_[/PȶݏM>:j7yB`pw؆#{54(uep/!)~Kڎ,z#Ij,>-IEj-Q1oKLC胻Err,e*3z-w>]&3{m-boMj{OH\h;voɾ*dWF0Q̮bsӾ-YYGcݸ8@_t_:u&"U034@-]-kg "Šc(>Op@[K1p?p^K>[q~{;A!\PKy!kۇU>gA7  lDZl,7B QqӹHLÆ]G{"wo߄uHLüUܑ ϥR(I[<ܹar>1D9T{tM.{kkȸxx9SAWU'e;+s3XUR[Vf/bΆUe_Rj:Z;O`micGxhXU,kCqJju#X Qrd 2ATdf(^]ۜX3jkp1052(2m^c7YUDQL&y6g3[hoϘ!!'kw7P YD!k+} 6W>,qju92 [^aTo_ aP[ IU=l~h!{M@Y} =ĉaj%NBk5 ^V9;e4͑"R{ZP Xi Sp+GYC+Dxtz,ɐ`6 EIxzA} N/Cn :' c^$BGٙigab z]e4ʻ{MP^5s8 ^`e!G8 BdKRaY}y} MaFHDfrd}MTe2L`]@mc/Dwo@=Ɗy.004FJr"-ua4nn.p`VBWDLT,+UƱ;j7_ 5 >]=}hi 1!gIIN)Nj9^ <߼S t4e22dp<&PƉC{jCXCn=ʉDd>n(N?cSENOKEzZ*nDZVU}v9iB8leXדּPCciQ Tz#Kr?4p}jQ"kZ {MayZ0+,XHŅ?iuw|f~YUJBƮ5s*=;gA zq]Hbr)h!G&E>x>NZ_g5U# B-lv [extzZ"h7-F@%ƥ ]!N CYwU pݣvGXa0=N?:AOpeK?TQ$QC . aո?w;hJm9;lۣnncn &CvA͑wڏmjTTk=BmdMm 0,IQhL&J ae4ڸss*p_IA~I7An v ppTdY.fl۸k 9 M}X5xySX놴A]s[J}KIVjjt/5LQ8jQ~OdKRUpz$Fh:(!Enqbr57UZF !4uQ~ rdR<W֢q4 FYQg0jwij' tOUkZ+HP.!o%Za_ EB(j%PFC6_[D^T-X5Bk=ob^#Xe4쮟AJ5شR?e4l0rdR$??N*ٺ:uSsiWV[^.a忻a߶Z k6%TzZ*<7G&`t0uS1crUWn-m,X#cާ{bPM] u,FMPr"'dI%x%1!OЮsw>GNݐZj,CCc߶6 aw([&;59sT\8vhh f%[vrrlpBY^#N e@YC+IYrgͲzƇS!!3%R^H#Զլf;4zv'b~|b@5gIRǣZ~W嵮W̳%HCfˤȑI!MWc޶ _$BcnSn*/`xθHHh ;~ʼvGr,gT`M Kv_yU'YFX L#^jϕ+'ƒ;^ya6ͫ%C^o|W  ѨYKǵuРIs?ƻȒJ  y^'xdcc(Oغa 6 :w}۲7-LoU5`έkcSfQT"`ЧWFik,%ٶPt>r(7G W~l0Gȡi0ѷXh뚽}ylEovbDwmq5Rp୲/L<: +ܛ{ B>|m}ua{>BV¸jFTHڮ^/CFNIzo q004.B\9TRuУ`޲gOE q9A~U`ljϣڥ8u N?-m 3EuW\\lʖ{^`lS]׬M)40V d"*H_sojT=X5BZLPK6PO^)Q^%RʔzMހd=yTܶ Y:/bdKRQVC-ꂁ<+~esuLŝ3 jfQg!Rץ_1fdF&ݷܢ"F/2IR!o[%hФ9_S'PNTcA#\texWmXZUϽ^DE^Kyt!z<'{VtAEIJd胏so9%bpF[d, Xze޾Ev>j<Ζ7|쵛OsuK545i4)E)/ U[CM/IZ,C-I}kѳP!Gl!*oDm3v9Om0ig!GQtU 10 ^pqݏj?"HbZmLUGC[""e4P^mYw,:7 o(N8к"A ԁivHskWa_<_'\aZ mEʛW>/CEz5ASG}!EվasBC:cp~b#`nQ=oacm }Eʈzw1uS>p_KDԭbn+ʕa)#cN?ZX)Izp'b ΝBluucV8qs{UkcSs4nn6/OdŨbSdeIgŅ7ܯw(u޻ z`L._}ߚЭ}˰AT4};hμ̸袼 CTh|!G_vG,ojƃw꓆g} hHBvFdR1 ~a7rUPNJ#Wj6BV"F~_}7";VPU|Pxe4[;gvچ]vqj.n=:h:lpƋGxOCϢ ߏ;~W[_޼E^Tm\9ʾGxh`^GDE5:3E1wu3|7ܛ'C(szLWx9g-P7j cۆժyB!ZrC-m=a٪Ǜlso`y.evƠmrcW~~lMUUR~WM6Qk}d q;y{8rR<&\m[0DkBs XC<*K0Y~9wE~u..o'Um~ 644eKR!L' pxȤ(!deںf.#K R#7GVk;́oh1X8<[hrhkkhP)IqTBWO_uO(~m{`< wׯfay0+'R{0&ﱃ8wg+mJ<ϼe<0Y&/7 u(ԯOZUZE' ("%7d^ukܒޖ7x @G~QhS)Q%zϱ}o׶k*g?B*>ǠUFo o ͟s$ouh@(BK[@ Υ nއl:tǯ];e0DeuBD_vGD]߃k;¢OVGvF"ArxlLj[`XD6IR< Ϡrm`:"Z8}p?*65 %64p\,bx&"gg"9s-Sp=M,bL*>9oN> BI40ax.ZnvKM}n;!*]^,24tӹ m@1hs㾳j~aoӽh;+[=KL`BCyvjٜCsK촓bsUS#42jր?yaU+#{ƫ}.ؼV DDDDD Ttlʖ\`ES?wh}}%ˆᙊO^-ɩ|ރ'|y1,OP:ls\ V Q{K 2S9vsCiNV`h>>jҲibqSB1SBsA#k?PW4ODDDDD τpCeFnއ}ҬRow:swA#*Cs-h'"""""bx&5fH$nXԒB]AA!$+C3 DDDDDLo-Sp=M%I#-iga<x""""""gz/7sss>}?RCt^hҵr:*Cs(w5$9K("p &۩esQqh<ٜl9|Ynnm(IT, ,b aD:r?gex,Xhbh`ZC+9.pQ W9, "*ui΋CL%XWMp7 e}:ZEdRdN;YNN"-g;s"*nhS,ИSWC,Ǹ{ Ř,"*F*{ Y$L%-Mܺ66eUN*/e$|OR]qQ)4f2LbQ1`OEB TCXK3?oV f]@D]l"!bH$dXJ4֗:Z ;wQM(C'--DD4g^f\brCl aēX1 ˌU>uUw ux"*eD=2Q}k6!"(#OymJ6(乫(J2o^P 5ADDDTbX+ ߲\rQb4Ћv(eS("$"""*rel|iVDTR"Ro k T3x"x9vet)+ޮ(x@DTd밼(};oV,ZOD -pebAyj!MbRM(n Ŭ+8 *wMDDKu{zr៵r AesW;7R"tP/kD"DDKJjxblB[/ώ}ӎO*߉,_"""""*>fwy] h(kak R"ba=yRB1 E|o@ }[>*~'r$27A""֥D:cLboY%]m;p/4m[L ֖<òs}[NgNxlz2;(X}*}|\ӆjAak]_sx 8˶&Qqq;YDD<$"aD TBIGSZSath""x0"g*oކz)Ѣ^OdE$\,MJMNDO"bFL.4k4@> =0h""x0"g*Cg K̐H͛~|mrV'//MD|BV ~`miQ0,۱;tƭ CDwiZ5̂y;hgΣ4h"0\J\r_Si~m|Sy#UaE@pm-M 5vT'DDVޭϜȈ3}lijRԮ =| 7o'3D3':_ЍmytuhG}rC$3D3}Va~ ܷ{soC=]hQ # %24{lsaԁ}ѡySg$˱y,߾+[SSx;19udjF5 U& LXDśAlzZ%K' 8K=}3}thNHNњԯ7oÂ!zˑXk\C4/,bAe]Qqd2GdfFᙈf=;y2KS LD TbX޶K;ǡnp{kV/>wF_:~^y ONOjb8"z 1<3\T84\ C˕۷~`ǂ)!"bx)p3C41<3'&y̢>Nqhbb0D3<3<ڟ8wqO@mW{f,*<&wy+bc=dᙈ(*pgڶoS:܌SJ⭞!3 LD T:a.+I ń+9 M[5 8 vνzAn99qX2LD 5wơ{Fbjd1<3<|\ӆjAak]CwaϜGQi LD ;sZW.wCcdiL E%5vo:޶7e8®Z * 8˶&Qqq;Y*LD wcbjWdrg"-MM>?b;9un.ONOg&g"bxOuzJ;ǡ_! ;`g{ tDzuX0AN^ƒmpD:6)5? 1<1<}(S;ðtny 3  Юi# }{}s<777!ׁ%Utu'y44f''3D3<3<졳}υGFfH$ZSEMY0r?s˷NLNq%C D Dw>L@pn%{9ocxfx9!9EkRӾ HrV'//M D D:asA&S5!ŋ},gz='\u{Ƒ=y&ԯ7zm@¡/JObl}]hD(,bx&bxҋ|'/ç֝#4<s!?wdhN)!<"3328M D TC&''_ IDATIrZhDrL>؅?0ݫ~Z,*R^~(6:ejhpQDxX2ax&bx9Ηqh 908hhNp:,*ҒҰzv,MM܌9=\ᙈV~~?wo[v¥qhDa1d0<*qިK1O+/bPu{cHqD )e~{2[ ex&"g*-T擁+9ozHOCZd\hФ9FM?b`c'D>ű;87Ο c?XX x84%;< K{h;omfqdbXp{4x>@ ctuhŀV:⭞.)fK`/?,0^E+OQcn!B.aƸvZb\l4whѺ7u>Dn!#CB zS' eo2ڥV9;ŀ^y:bhZwyIxޭI şFi>գkД%KmZ!85gZ4W2fÒ;Y@ńuex̙Qfyem*Wt1׏0u!m>ve OLp_xpqoH1{'T$&ı K8FMb/<գw67mlk](`z8tdp.f0w0\mFzEa*WGyAT gm>wiZ5#yª]pmj!,ؼWw;hgΣ4r:scCqpq ,6Exق۶@PY,ƻwێ .E Xm2Ο7U`]q3'n+ c4b<B!vn^V 1!zf 6OT!}22^vQ.jS[OX'~0ĩVUѮSWϝy}]qsXYW-u5mΜnd?Ƨ1qmC]r_Si&KVٰV{JHNHG=6}ڷ8S\zl>sҬlXa@GUm  SPZ9er9݀>۠]-FFc}}QYjwʝ{+/¡`[L׋;5Ki,۾{$+{PWܻ0o`7ܷ/ʺ*6l ]z@T!W ¾mלvТu;Ŏ]?rO#hT$'bE9o?BK[>A o=Dd} G}pWg:~7{16lW .6ZbaWz=?skƈԵP>qO\DzZ*\+lg'  zi2*b?mD?ƺpZ(nejܾ~gOU-wcX3z H p,nD:ث-uuU{w=Wq[ y6{~ХB ϽWy߸#^IxNo2s{c-;/ʶ=j1\Y[Z`xKl*WtKdf63<ya~ fkCoev?]*8|0m:MD>1}*cծpuN=¡Q}Fm-MxΛѧ}ZW^_?ާ`;v]-tF Գ+fBlONo?f~ԁ;#kV UAV+sGF?{gOUOZ#h*eҏ6]*%iRڤ!m*mCEFRӞÐRJEAD.{7?{rCCQy^^qsys=yϷl#iUwgϳ'ac?bɗEw ';/}hzho>4vsr^E  c̜Shb4W1PM`8wܭh\å;*<Ȅ_O~Vk;"۝:"``Wpp1:Vb@WSCd{y(dFD&ijB?y-Jwgph$CJu*,)[v=uY~\ ! rO4؉ػز~%Q"/‚Y_Y>´5a™J!! 4]uD}뫣'x1[/8yHODٍ0|D8yR''%"φ+i)OEf?dg))Iii>>NL U糾pex,Eư90d6ִSPD~n<6ufgJMާ}Zaҧ>=7 tFWZ|3-Gwsibbkv}hxnTPh/p$V͞Nע`b j`vbN8y- ]պ KX`}(A-(6lx1b6B|3g,sނmJ]3-f;ySrL1,N߼rQN]qAQm0XA] 0e{\M+xA:R02cyl6<`>?ؠo*SfMf4 i)O瞭k:Q]2L&. Pި@Ȳ:AVF:vn%K)T3mEezx9(.,W\svsW8͚i.@Nؿ=&oe?2@ |y~Ch>4ۏ밡ܺDo%NCm!vB(ASE,6? ij8K<R n[Y^EDt,gdb0skt5.Ss Lh(TrrZ&A E Q]Q{85f_ Ls hQW.LH ̆ Wt@ZSTr9 3/# >#BWs_c˺ f/$qJK Dp= z3׽s6<1BќZ+-EMNƑ zY*|U3qj./7?հON&QO.Pq;.xچ#:+uؽr)I#$'f=qfz.އuQTV.-)+;EF&SE}!uo{VyXn;,Sb2[CVS̱@sHz-NWjcgp(8r`/L=oYmFX`?P*עyplGG7m'n? Cw9Mc8)JX HOḘkу"z$$pT0lf; XlfotHp^k$ދkIf9Eh!5,1!!nmO)}pedg6x&yԈr:zhCb|H{#-g7RV Gsh'ǡS Wy"ϔpvaO20&1MiWbl <dHon)tD<K<b,GpC3;1c%opŬ^0]Mu&G\1 ;i"N1Қ ~CӇpn9N.PUפ>kaY><y`=Þ2rabϖ HK)(ШٹgC`5E8N"zaf[ E%E5,Xd O4#Z☿/r3ȇI˩3{ܖc "φ0ӏ@>J^FEE3bibP`́g9}i))}+8`T,ׇUFً8tbegy/2nd·:1!,0%jP8\_';4 vm _g61ܾV/鰜b [1 4R$_7vmSc:u;&=G¯R},gc5"NˡڬXYd<oށOPH8-|g_P4&=Qc9'ё@#Z#,|Cp5ZgDD6o%ںz@bhj4ضUJ.[W#0 +yka8vf>Bn(\fJE6jp̰-]{ f-XV'|ڏ~aؘ D<Et؎VB hBa ^C_[ ޛꝴ?^cXn;ݴXPؤ';`زıwQ9|ձs1 .3lZy8z|CN W9ZX<ʰM:{oMG4f| E Z L&i$ +)I| ݢYIaßB ^uӫ XfufSPn%$%["_A92~u>+t&/m^koFr+w2[cZkrq5V a=Q4/ܺKfn6m@h(}=I+1]a" _ ػ V8bi誣RV1[`=cnD:ӽ rBXtCyyÕa>ƪ^aM |.;ۊm\fN}WU%E|E^{VVg=]8M&OF\3WTg/NZRl1CfO,#?ַ iًJHχAw8MFG)p Ii`>F:k[YWP vJp:MޮχF)*'g-Xk<w$\ۿ p&0*<22sx A( \1͇Q?S =[q:$ 6n6; ;'|]t{ M cػس']/?e2HfgDZ |NzÈ <qmڼtPo짳^? C R`*t05 f'7 VPQbDiMNWh4TqF/xEJƿ/*S*(2ez&v`l0 "ы4(!u;ppv4;Fr6w.2G,)]ȷyiU3ΐ .|sSMT"`BۤU;9ɳNCtAF^4/kRNa6dH&BПB@h +ιOŽu)̱.Kڍ ]Ar+߼ ¸m޴^ob昑8w+t.)ccʥpc\ýM.5uP,scFŽ~DjҞ`tBoQ1i(0O~\h"m̱{Q=;M[ omִsĀ ̱-fU9A|hڟx𤺺ڪ[hag;Kf,)KD \nqc0 "BBJuX)dc o%$VB"Q b昺 puA~Q1GV^>_o^+0kGg96X8y- NS'bt $%1y`<26L$HGҋtp*ޙG>46oL wе?,auuUIi5xy:փo1 IDATǕx'?z٭O<#琕FG)h0۱h `4'ddVsW};rrj]p71 Ricf&= xN:t55Чd_C9GP:\SEJ9`vb]>ͮ~{ЇFAN9y뉈n_YH4zHIi^?y.t3ДXoEŻ1Z.AY^}!;-U\4O$,=& <#CNՅ2}iLx 헢$pjl?\]YyVVAWS3}!'3 fj֗(FW9hwZCZbwHآ9Lׯ $46[<>B;^&2:MN>< MeXMkg/XeiNGYTD" -E<6O)r6O !.2^xs3‚V5\r3QnRVx75ChXoؑϜ*/xێ7-2,f91_]8|`'*^FwB}SI 4ٌN?kCk3_3}; ܼ}xF?-"<QV9c`f2GoD%$B)G/1uEio0g n(dY^&ݩoɘLh(Uq7=,ك}xo3\v=~"bvG@Y^EŔe fm±+8q{vw‘_u׉\riya:Ϧm쪮&ND~>r)0##(5 w!Ef necp_`t%lFX`Ycw)h(#{bzztagGQVSEPe~AQ !aw2.3BDl\ؽ*ʰ^=2æα+8;"{9# ,T:1 <1_,oDJ> ]!脂V͚ަ6V%EHJH48ήы4Ja {u7A ݴ*cPa b'CJBztSAuV*j{*&> ~"3E[_TІEtK=Sh{3>8-+n&^/Pӕ5!v N ux-w꽉2xK"oU) d*/86-G^)jZ9aʢxh{yݺ!s tfvjctjT}i?Ώ(&Ƶh[Q/ə 0ﱟ husǮ-cb{$=~,dX tKv^qrh_5oE+8^ҭODD7`1̤ ,le En7qoHFTB""'wi)IJ ]ätp+<#>~8כS5{Hl'@2.E)ѷm@~L9"'+r 4lTmTQ¹>r382^AW  $>{aDx/l s(//ëTj;ޫI"c2SO4JY%PB^FNJ.W.#'+0el6)Ix!r_CBJ F0`.&^,*02)I{ $%%a8feÄXC0eQ`(.|Grl)(ĥ!r6Ŗ.??b.!ϚpUuLS8,0\",mcՋq=,-]_4RV R=r`'$%%4kΟ Kp8* Faˆn]1DcfK\sC#RA7|Mj?S$l@ 4&ij"~ZHiIE҅l:&b2i2=E$cLag 0zLϭtǎp/*ֿtT2rr1{݉np=v* '㴗׌#mnb#tK3[tp S !)U'ʅpdgbwjFXgWy<\hRDt0mzKG9=abq}M9} )IpmTTթ _fD9I8D4Ky8;usjtڵ;p&#"~ʙ?)0e.z_VZrѿc,^?u-;-ho5aF/=*x\fLAwML&wo x +A#,r5O=cn 3G/`f˦MipB }`RE󬍞yEfyD |3C>&"9  o\.fِgOn%7*=5L,."LWSwыt袨(RKnU%E6nG΋̆E)xN(fLMC r JM<d pcGfsXt: ~ jj_㟡U5E ~[er)d1tm Ԯ1<>ێǃgdU·V0sHZP㽡2iH#seU_EN;aL9т/q=YLɄH-k@e4Z%#EfpzAb@h5)("/7jJ3:_By/rZ!c 8i ^0o핳X]up8*#<O~8}yaX$cd?6ہWpeIsp] 2`I q8X~,^xȔz=hgSgCwœZ=Q*}pGs#%#-ΙIBRpaIGtJIK.x# r`]O;OZ5oRBB[qO p)/V;l5`"ܺaGm{ -Q**+HO+H"=D r5} {@>ݽ[6a*`*0Dfȅ5kTA/0eqO()*B=h;gB1f l~]E%ed|Xr}'' I)D>} !)+þAc0`~8J.CG:׃,FQs: j¼硼M?6y ߕK\'aǺXn%7K>m5U,x|><{Q 01(+בw@w-+q96o Ġ;GPe+8PURįchĐ+Y(5 V(Ā ̱-fU9!%⹝񤺺ڪ[hag;Kf,yIhkp%}.F|)<B`RD?\:9v4:~c8|`'l>S񓛼o7p[e›}ĉ@v= `U8|`'fN4Grؿ݃jW\T +EM{~"YBR GNcbx.XYk74~X+I-i}*'8;L! 4vㆴ:r ;WtH Np>TTa ;&)vD79bg~]Z ˙gj7l]=ʽx+6#,֚"l\7ASE; X qHLI5sUUƆL,w吁^* <ͭ`d+,,Av^>. gGǏD>PDOsַng*dSD󫫇 :B1M+OBfC7ԿZh|Ge퓦# I/iZR5Kf붶B˳t1&!smNb 2]E5p,RyGd&g2IJ&"GwJ(6rX5g ADdpJr&RѬWddV)pTp󗘯V`5NփTQF8w+BO¶ul3ztmJj<$>q'mҲޖ{>MAᄅ[vzEi=%N_v{5na!B;iSBzO~ T穘'EA4 ۗ/qAIz5%&KWSP*=HL"[9G&s땖nڍ['dX_Q439kῺ޿w0g@ C|˒Ҳk|xkگB._/n @jY(je;10v) G?LH7 >0iԾ`f>A'GGª!CEeێw0q1:VJ8ĸ}tv4^/Pӕ%WsڍqlpK >9N]IKRR`wHJ*HaOڰt ѱpٽ L&2x"vL_9x:Nrm0Ʌ?O`q` YyT{·Tg 5 #7N411?UMh!Ѭ @ "x&xKV4_aYBVV+*Z-jǮgVV'~(5 ܪ*馇CYelp,/WKE:^_!H{Gֈ,*|K"RiCz8M~(r,6kh#CC3 qV.ć@)`V;~"N-77""𙢹-L3ߎuD]m ㋏{Lsg6MLl $Bсd@wLEW@2q:}An4HH !6kgE^AQ;CNH ♈oHNv&ƚ, D_Al6,y MIN'y-88ݐ-"ۈNgݲpO] ;álϞb22ldg~b%™@h(uVF@h$B#1gъVߊ2pŘ6z9@`U_,\&+9 [ף8~ʃe>{{s0wj\K<p[O]Z}Vl{Su/ocy%V IDATl^V5˜:UUk(.|}lLBѾ,7WsCC |wTBCW ʪ*_4w˜r"[<@<^`!_T)I(xÐab2Sq=̆ 'Z_z}[.Ϙ>Wu" OsaRļ߷IlH̷Er[&Z*}\~(b>N{ [k^$y&n@ӡE J`~kv!,V86|t: 9)\A"bbL̓޽G%a>j{k3D݇̉(.*FG)¢4./;!.ٌD$CMCڞxxj~qaB@h$տ;7.u Ņ針nxy;r Hs@|h+FHSV+a;R1-5!#'R; SG %'#ډynǤS >w)3JVVigyʵ' R{3·EG;C. Y."b0s@X;eeNO7ƙq8*B/ I)s)+B)w!"&wdr΄"4`mϚ`3zðͦybf)3Kӯ5Db'5 4Dk9ii"c a,!!.b~,)^zBTTձ}jZ A9gFh Ys_.iO!MDNl O3"O*Gmg.OF r{n;n0u|-<@ۣo` 3N R xbG5kS.> mn)(:ii ͻ!!) I) kJ.Y-:F= *{@tr M!!);PT\lքЇ槓Wo̚_p MF~ L&0b0Zcü_vy3dNz5'5+~HsauuUIi5xy:cY6#,d4Rm-%}.FZ022B룔U[x*b% n r J̌T(>ght:Y_BR FLq:z:z 5Zt| Q'>j0jk`C0q|2J߫ͭ8~: KX 6|?yQ Bk+ -jED%$CRBÜ|2b(R8 L\Mҋt\K8lFXrȇ{f$> VJpt=qL1ʬ?j?Kk({<߽߯?}+Cs{!_]=uOЉ<:ȌhJ\Z1<7yB JF`ÊyaE&a`6x4.ϵ`AS[gB"';+m̓ba6 [@l2̩[xҸч;Xm%,p-.o4u.0 0:J!-5&&覭q|$LtUS:M 3nj©$> rx +sc#MT6Q 袤8;>GhmĠ{c376]`MJߗG;w!&iMmg;?MA/}KZhv#GEUWW `"B}q9.ïR?IDCq:$7By9{lm\PQU''@߿]ۇf3ߋG1u G6O0:J!>Hn?h!.w̰'x|>&Q{ 3> ~TmHJH .7|1ʬ?nh,j3g6GApaVpǶ`Wp`,mt~Dsi RQp& °1D^&wo^|x&N|>4Ζ2bt{%5Q0R_H {ӨݟBZ}Vk Xt > ]ע^8WTV^mmC3A@ ബl;{v^@NW*֢tv=~jn8Gƅ@hxoNpv&:z468u5~6,;r`'Pe,xo@E99.?gB<|0f $$p[אTp#VPB_A=f D<Ztv4wCCCha\+P&" ͊7:0bp1) g@3 "ډ&&f'MdT/zԅ|PTU)LhqX-!.>r4w.C_Wحy=_r!L x&|&R4WsCCB\++τ6tƔ"h(/A @ Lh&(U'"X>L6 C3u MZJry-SS*}l9xC.gB A|hLhСUUD\ ~gW4̼tDD4+gBf,]L[I^sk,f#L3@3@ЬV`5Nv$K^ػoOwx&|L=P"@y@_N_v-rFO3@3қNy0;'C3f6MLlcWu5o,kwaQVoǿ̰!""$AnInRn+k\I47Hߤ$qEQv?aEEEd? 3ys<(`!^g!$y~1}QLaRASfw$yBt5Ԫǽ訚4s<檄!<ۄbX`!^g!$yF`Uܱ CST;< $$:Kl L!%yBgQD e׺$)iN`.Gg!j#׬8ormZ,:]>SMtI* E]HYIEP ,Wt|MQ%H,K14j{qDgN&s$i%yBg!>4l Sڵ,S;< ,AZng]"?|&ߐ^[YzIY,4@WV=jCStfGg!^+_Vn%љfW`6ܗf%yBg&5*WLީJJ˾̜k#H,Tfzl$ѷsf6spQ㯜x H < !$y/h#s"4;2Y FӶWZ|q_XrLB$"RSRPk4< ~jŏDC'O3a#c*Iś]k,B}R!(خJU$yEs !QJIS!AMFVF'OcߑwdL%ɳA,gDJs!U$y0!Q=Fi!DGM6-ulgU7o2rGT< Iς(zKP6J!^`asiied-tlܽ3=O8~X#c*I$ BgAj(k3,M"xI*j}HN[7(It{ 8 J$ysOEb&p)g!QHXi ZBzi1Qk;zyרJLLgԙGv} R-DȘJgQ;w;`.q쯳rIe(%BH,!ċqSTff]S/b1~tyДvyp9(ɳ(*{=2#peȥz!G!^F`Uqbo5us)] Xxm?MOO?3)߉<ֹ(2ݷpOY7=%9DB!G!h10dU¢T`/,5̟IsꝀKvhP9|[ }Es苲o)܁$V>.(3ՙ5NPB!EΔnoҴx鷓Iݙq;-:D/ݺ6==7!mrZIrf(|{e6:'Bɺĺ20Jw ʦb8KQ.Tȧ!! |JVu~C U 7llSJZZn|S|'J,sgQA9P?teeyЇG}K3,D)%$BOtj::& )\!hU_w amBrr1p!< O6@P69rIR2 ]"s%ۿuBH#!DWר\1aR{ R6o73$$'[lIt-_*YwvYuB)^w_HoVI"-$♌F=½f}{+o[&ג8$.>A4zOw$B:S\@)V=5Pʳf.yhR^[w9;rȄ$?BB<Q}=>?˾J}}&L1e94 Itד+17?VIӉ"%? I>,H !;PH*^ZzS?+S޶߷ Z>%--K3 BzY2pܗ&Bw$Uv̊|2}&}h"?vsp?o{ ʬG ބz!rXg3p.}a@m}ϗ% x _C$6UfTdG{ (ifOAvI h}Z7oxj/8hV~%QVuҼBkn}cu |&q=!pl{\#X ZDZ!^Ů |uYEKs*rJZe` YgH( dYQ؉r2'B8Ow 9;@s`:Op !r!=kIy]'ҟ$y+h8NM_v:)ȭQAinKoteeyb}K3,Dٵ.!D.İg-=^('S_z IDAT3^L"SemrD;/6ZM?V.e5 JBm QdQc'c=v{8ʚG4@) GXK,ؕwʗ$KQ\@Y'P.D.*dCUS)wSC)厔" 0yoD ?yugWiJEzK&Bb {|x.ś'dJgˣ{|3('gtYz"c*IKQJMLߨ|3)izgKY}R%9e,=̑C&ɳ( dvN%$%_1ۃQ)wv!ɳ#E"yn(KOj'@5ݿ퐥'dqa+ΩIIWm B!G!$ O<yED;6ދXe'P*BBBH ҟ$y.jvNfV[s !&?I\DH n';q#][AHBaB$υh#>6{jΊBBBH &"ru/:Q}kոs/%.>}KÄ$yKm`[F-M:[jk7|YcGQpY=q|^2U.&q(B6=BH 2么3i\ͥIΝ{.~:,LĿj*BgjV|8uЗ*/Ǧlwp϶KHNBb1$Eh#'΄y 4y+r IEnZz\UGGդ>e+8H>~g\  l&BH 2(|I0n_lAzz`R-$y0T8NL]*/߰u[理T!1LȘJLJ ;]lE G)1BgZj5J.>G՝ s+L޸{ʲN)iiPNBH 20~jaݛ7?w{)yrc'LLJ+wYd10`U¢}->uɖsoٶ릧GT!1LȘJ炮`nŷF%%5-a̼{㖞R-$yOh&X7wد[M\L(N] XxnzFNBH 2 x&&u2PӢKcهKU'\:s?L$'Oe(NѢ+T4j5Os/\уr&F79ϥ+5C쨐Yjj{{u77&SS?)a2BH 2z:i|ALwnyH3砕k ;;'x6fCx[Z՛;G ZG:hNnM>GUeBi5jo<_3kYA'V~{].l]X 8ʡBH B௒ŋiY6GF_~}wIIMeO\!>u1_E* hoRBIt}!րSRm112?̻Gg.ثF?VUX0jh۴*sc LBaBH_kLML-X<)m܆#g[M 1wm7@LJfqhفSf0!Gorƭ8wzOv>T܃Zz'(`Gan΄E˳<՛h7>?UnߍET34'ophDߤ Zdgh㈱6nsoW͎gw@ 嚵׷ynux};`ރlV*ia۶gv1sT,/flϻ~whk_{X6OSD!`:PZ$ IE^{lQNKXm؋_p|$=OvMǰi@YO|H\)k1݇׭;@(~\7{"9f)?%pODsS3o ',eɘ 2nݜni݂ѽw@ `POݕ ;vnܟ4FmZڪCؒKF\0j~FΊ Q(RFs6-Zr@vV[omW ? !1LbY*UĻo_~Oo/m׊ujѺ$22anfJp^OGȑcԬ\c8UaˁCXyr4,m=?&dl=J*X}=qž[ow?}N07FZ ɾc'u :7jHʕrUq^F.u؇NP[D_!%5ƮuYk"/sHů[Gunϊ{{^XcjbLލ\ԋܲ\/dҢ |D(J ڣ}۵l|f2}yb~gcY]/XȡBb0Qh 0ĤwHz8q(~s3SVM[8"Sczl_ܸ}sQ3/np-@_ZndhBi]"1'$<*8dޱ?pUCgz"/TĤ g l1[C?tY*! sFγ~>%, ϗu) fq.*zogoŞf3K !1LbYR umugJlu RRVGF_ʉϚ6b]|=cIti$3jTcݤRrmoc>Nx Y>ΟĤd?Aqh悹)o?uf/vy㣮\')rZܜ S&dMY_t!h:ڽ g#&W.UIZԟxQlJ9]qC|͜DGH|hjQf%, 톀{X3tX34`> AaDa&eۯO:$qCGgЮ;45{~H<}Qr%"/c]B9kp)Vcі4:r-ŹjyLi4j5LЃ#7;u=}ӘҼ+-'1)Ĥd/v rzĘy&hjp;.9e㈱zu/Kʕ8t_Kf=M2mZ'4".bԏ 4\:3k/DXg;c\|9Eajb졾*Isr;.c1}>ח6rww܎c8N֗fL~\H.=U2Ϲt/O|~ /(nfʃl_+ } Djj*]{ӮUϻ8`gӯ%W*`L>SSF5zlG*9bocM)Sqj~M둟\qs`G>ZB ƀF^z,ۖ)k\::qeʁ?O ,.>~0XHwBb0Q rDDmpffmgzrV ƀSm`_݊ R6;g%$'[TaDaS`-w40P~X^$`e$"$$%4V I @/ժUutTMSֹg-ևclc&1LH\S{N2P2h S\PkWo.Rzzjک_TE/ [.Y~JZZ @&1LH\t`X^UAJE^YsȾa9|\V@/rU+C&\'4+3;x)V;Y&1LH\5PTs*,3eID^KHLE#=^ R-^€Sc`0EZ|j?wmnzzz @&1LH\xKf#g;d*0aBMJE1CpLMK nJH\D9 F6>OVظ{gzq$;Y"$I &$yWT9ve YNJEa^;rS5Qb["4Mޭ' D6-(ߎ=a/5TH &1LHSM<ֲ[i/8d\/qFK DJ%y.J Z-$vPL6-.8u+/^r3;2Bb&$y;NxLw&6nÑ󱷑y釵OYM(%y.tNZݻg}m-ͥU sQ{;ܿ~+-P!1LH < )Ew{|{xT-$y.,AZng]BZ:oHߊ L 2Bb&$y]RGNֱ|v!~<;8<͌뉾Ʈu3i~Gt16^(ǤU$y.NZ^ƽ}쥚8|:bkqǿL&$ Ish籔Tjw͂QCTמ_m>ת/6245\ptҀU* ޕRnI cGQpY=q|^ʹТusS|;\~1&$ɘ50( @RWu`bS}Kg+j5p'8dG#ΒDBljl̆)iR[-Õ7u'+J|<60XʻC7{GɠԯY幍+=fV.y8Bb&rMa Nw:uCGs|"/T_yðE[v.d/cp-7ٳ;<#z6^;@? \Z%Os@WV=j,"aM_w amBrr1`,UEH ^V@k`3scn1Uay TS5x%q~3*/}ikaˁP:4|12cz&KT,ΒoʇUUwhRQd ⹷oG{'m> :3LƟzyw{pՀޟ10 ؄&$>ՁQimǘ#Tؒ**ѾlCf?xhY]7$pOT+}'r֖TXZDF_{_=?ڥ+BJśP9ho7q\8ˮSp2iߪ]GvN7KaBbke- Jv>w?j]z0o/>kH{Fٶ1퇎&!)fX{{KO=;.}NZ%Iv`U RID.?wmnzzz40/"$ a&wCOysG)羟_T} T>:4PWoPlGi):N W lBǹk4 V'VS7S"] XxnzF7=)-#$ a<A%%f7ʹ~Si;/r8˜MLX5{~`DLX\?|4%f/8ˑ_XU{})"xպUC(+-]!1LH {)7(똗>sK|(C# IDAT:'9C}M~[cwʎRB#6{t]|$ߤI~w}a FUkz{v7.aa&͒3^'IIgٸ)?qq9n8kK6>T%y7݇dyLĿf_}w9g!6nh,>|$ļ(iZUyv[2[l_7wt5)W3y`'n=G&&l{uzNp@p>gy߮UqF.uhR4vs~&oQ=-clL:˧7osՌR_[ G) LBscںt_>z{(o[FFq3Ѻ %+hZ:NUhZkqQݏAXSg0sG:uC'v6ɭzUnűzw3狜,\::qeʁ?O ,.>~0XE>&qoO/.qObKm?s4,*aA9l6yW P*ۯNd=R~m75l124AꢾӦ9ل⿫מy]O{kh^9{joc۹苰47+7n}c4⠮Uuo֘mJs7WZaPLR-|oR %߬E ښ(;C>K+`.$} l')[Aj;Y1~Te@IA}to֘eQ~I}PL~~[&_}C axҼ HLJSqĽv I {gZ X}D,_- $1UŢKTCz~AV{ vee8B~Iʵq_'z cXmýp#^n&tP_-Ƶg?!G{;ҷ]lwUJ\|<F[;>~EBr/l_$.qObX.GBr2-eҧZ%G]lK +ԍ@R)W&eњw֐AB~D]o,FaT%օe#*p.ܺ6՛X}lV@0S\:ӮgokAVV3c[fYOM_1LFZI.u&sj5\Z:_9ZD)]˷?DbrdAdB?tDfVƪ>}eN3ߟ=ųS/7ldńdZİ\t#OXDʦٸw?Ư[G2foZ%Go/1wp֍F~tV'5˃:NU5뉾Cq3S4//<q?"bnfԫQA+:1,EvsrHG#' Xw攷-N}Zl 6Knr>JבֿUIF.uٲ?~w,ܼ]_F#ǞY>zꍛy^q۲?7oa۸ ۰q)~AveKbA L4ԨW?goʷ+>}7Qvw,VsnoǕ=p :x.3\ܵ~dn4}<$Zİ|܈CaՒu먟ffţvM|| @k=;9܎֪$]dF =y8ڗ%22MZoOq̀)4QWpvnʻaY-9XE/Yv=aev ;J?,ݶM{0ᙳŃ:g9Qi#8Mu܎v\;Cr׿ƹVBdG_vsת8=qmҫ7oq."3l` iS7opfFZtlǺLj?LпĤ܎#z II (io2+7sefo^,g. EYO<۴Ʀe=wtrͮ(cLv.It钖pp,;JOX Ю]hJZ)I {M*89[, CpY㲸Xݺ9j0k/6˴U0o <\!o]binΔT~qUZ1gw[Z?Ò1 5m$Ű<R8Uaᨡ||5~3fcjlBc׺joc~kUgUtdP>kڈR%,(nfV._2ejfoАNUh4ar)I}YyӹrZ5퇎?y=WFАRʰoM{kN15+ˎh_6GzJ3QعJ'pYxwzܜvt.~ᇱVEmScZׯZ%G,,BQnrVoR7/c,c30k4 V'VS7SB2~}׵,3(ҞgUa_ʕX7i,q ;غ?݇is2IɜHuΤegfy^ع],5 ho.&C\2E:v\~>;`ai_}/3B|gF]\*%5`0O^07Pf]2ӠlS]WuY7>zVƙ7Ww.M$95~ #VH죎Seߝ<&@vq/KShY_?9{{~hm\z5&fÔ s2-[űШՔk֞+ͮ;sr3.1&OR}iv~nYޞKWw&o2hLǟ9,&owμ mxK!(35Q._5 eM`AQǛ3qիg:BܥU^0jۉ :а/(k#[|XbX6czʧ3.aUI㱳V.ۻu,?7ڧ%,hX6;C8uv ɷ}YUrdOO޼w{'"^X8SM g[Kg!Dn051,=_H,1C5/e1>n1 fpB7\ x^MҬR3kYum%4A䵎Fep,or{=2f/2`ddTa]oӪUum)cӭgŽyTİ7g˦ 5ݏ'h:"/cUrѾ,߯Z'[x dg;_.͕u!{9uQ9ÓY9g!jayU%S}iJ7BN 8=~2ii[RX̼1ʶ vn֧MK+9lͯCU0eI_9,lP~B-e&,\}YLjUyF.uXҹqCϚώC151~^j KbRѣEgEvFةpJYkGf@X*80gdh;y F._=uj)kwVQĄ&u\@dR̍]Gr%7`F\wX3H BbXLD[/۸LS6rXrNZݻg}m;/u*^Lw+W)cU+e<{r&T~^؄qqY>{k])mz)kߚѽ3ʖu}ڴ}t~7L7 Scj5r\y졃i1f.d/%,02T.w}='$hoGd%&УeSD\;wsLYm\j"p*\n073e`1;Ns47O9dP?[BD{Q6:{% !1,_&9*6PX-UP[FArkPr%6=HJj*<-Y/\F.u8|:O[RzF0d A@ V?| ""3۩n A]TUaeNkMqތ q%[v3n.DFr:uE'``LkyN|b1n#ud/m gDžhL4MUU֤=qw]v2T:5M0=DMi >kn9YHSOO2 EXg|CBk*B!=O6B+&>?V=TZ'yEbjK8~Jl{=.aY0߉trB;Ve_ÿ<0v[]ݾѕY LBޮgg}ԔyprT?^j?NI} }6 {ASUyMmث's@=5\+Y#&0ޕٯ~K 6"4UkF^ 52jN2PZ-'5 'qp􁳧΃"6ڙnֿ}ַ hbqLjz pb!ÿ^-#oPxׄkLXv3,@N֕Q JĻ2i{T=Obѯ\ܱ#57NDz0 kt w!|DVϛ gf!,tZk2 I}p-Rfq*'BbnUvԯ$X"ΝVkaa[v^ȹ iS0t xĔ4vpDN^>ucZkRRjF5^I5fك~aLCqZ$\|NC_-617BYBAu^W#W*FJ ¦'jP #bXA E,vԻ.>IWF61.E7$G dw~GDaQ gkȯ@PĔ4&L!-"1~PQ1tr9KW0`g:jGŮ A6xM%9vWnWY8a!⁖6 AdFN^>̛Xp[_$r%uab@^{cMUec{+rq*$/necv6̿ICu +ΣϬcAwN Ʊ$g(+:>wooq?!əYtt IDAT4!r41t P$Bvm_2n/Muň~y㏠GZDLk\'K~fMEcRl Q!bAZ1u'z 0Dm-ȵRN43z@_\ ;łI^M' p,pJ[Rf y3+ZMy9{Iͬ KLg#1r GF[Wob5BbJxe<|\nq>9H쬏}P7m- u봅\uGV6CbJ̜+yЯGwLjMU_#A0#~Yk6`D kh@T8l-u<\((1K1,.+ҡ֐$|DT>ưwbRzخP$mkt2)}O2wz_}r?qOvO9mD@RXsdaT]MO`ie8s+IQ&\ s3SfrxZ >Ǒv_Gfb mÁ#p;JvҰ U45b!ŘGT3*n΄FLQd:BfFfMBj8e" Prkedք\f+@+UUpݴ!L"b\EE9y`X2P @a&W".!,}F#WIW] Eg,6 q%C]J T 5^xS Jv3 гSG-^'BQuAqeR k=}M^}{tL 8Dbj.ngp >4wŰ C~8~!+EY^XwL_Jۛ&>@ v):]/ݤGX0Ϝ ".DFcp3l[ٞN\I_|D|ZLVDKlw|9əYX OrvҞpJ3P`Zv`wiҐ hMekdmc H> /,+cz1~1˸J*)<ߧ_>6;8o\%ŷ>r5W8ܽ%%ϫKT*ӡq6<ťBfR%耚^^!`Խ+Ně ?Y,ů3BSUəYp=&cuo 'áH| 5eN,stu^\֚X9gkcפ!0i uzm J!N1c4z։,sJv]~5RȿZJ7yZ柫׾nyla/pV*8z.?4l|"dJ`HvV*2Ĕ4(2]k?߸Ap=7HJ8{ajbwƳ\MJ?1cvzvrFݻ^^õzކ۩xXo38 op9 ^ .v- ȈOk$.f?/ТębXC,Vn]lB[,asAp:$#~Y!h`p3o|rhBUN^>uݤǥZ-cR20qngBÏvp4ث'N,mzWweuJLIVϓҸl_\5ka NrfB 1T%=+]IzJX]6 ~xDFKҳsۯ[<ގacnR ku :I5ϝy0ᓌZj6 8!_{0w2yy̬.y%%87pV8~RW嶣JK\G| okS/u[=|6r$gf1a#&\ [=HJ**{0lrIZ * 5zt̄j&A6+b4WRbg~a d׳>ub ҳs0g#^|jgN(5V使]T (3ց4y]ɩ։)iT5N[e;鏋m#ӅWr޹ߧ FQF# ~a!4=n]a5y_RV:5+@)E aѶe9 0f*X;nr&K0yZYm)YgǙY09Vj)zvS=9Flb`aܗ>J  KOj:Mр.ył̒R">JphygnlOP;vdp039 紱^׍>|i#zvGwX3o6%R)Fb]pWp,ky(5B,3ٯTH$3ˏHJBoURDf.j<,PgZ+ĕ2e򡩪*Zˏ=>5Ofx~aeΡD*EN^>x<L1'ϵzw"i֦?嬛?f{&!q?@Jp>P̬T*Ml.D8Izhx9Q/Ք^8>ЯGwXODf.JJF6,Ƹ t/W-,PyDܽ Z6Tkn.p<|9ә1əY} 9`XPդq8QP,3-\>4Աjtf$[=PSajknc }0WOXMT@_NOcX_c B,5M"ŭTU=xjEaP KPm;Ysg6!7$ GpqV*/tu88,US?x: , \?4>!%bR p:4܎aD۵ŘeE,'AN^=Nb@سřslW"bʵM|^ .\dURD]i$\%EthOkЫ'|R![=;B,FRzJ8^ .j*_X]m-D$\(C2Q @=BD*T?֚P#93 Fݺi#,Lr-\V.cumN@ԬlKFŰ OѝG#zA~'.q\l)WwF=y$gfJU`nf֚ C8WbnwΘ5rRt,i'{FݻcvX,F3Fz1Eދ(X,ߗ%)94TUp:4\.'nb@LmNWJH0wHeծRf4k6qT*_kaa[v^ȹ iS0t`ZPSUclXfx-8i-Y`'2m7&AшM|ܱ\%E:ALJLvϘ6l(30r "֌v(0i ̬EbJdȌM5j8fZ '/3#=;|f?R![G3ԓ3/,ݤGO@z{+,8n(EF3%N;`9aLM+ĕ=>-RBA0Fsqh*-M[~͔&ԕ3a*3zm ;AbuO/8"8*qI= [ f&Gs&T𲟿߄A,l,&BX.GEbj:6V+u;#`}YnЭ`^7,fd:wz)>{A+;/#Z+$gb":,ϿOX>i;I`ҧJv[ztm$> 5t}ag׎/׺ZX;n]~MəO7Gن:tZk"3~L^!#*>p:WQoKEXgN*OI[p?/,((&(yn⒒7}3!ѯ|k?k6t OVhkcIEwZݾÞԴ,]7zD0ťB\ ҳsp\bL.>Wt,^_[,J0 .gb1i DW{`TtO\G դqX>jub`nqH_RV6,J|= Ee8y?|v+ _gZzO/(qւJ[t>cG}%4fE *>-@KC&}z!]?Nde}v K,&-8:Ξ'߫%KV8ܽ%%ϫK$M94S r;^VREfkK9$gfږIvȑGbџ=^wy.F@WIVT?JC8\EEXM6"銨p1}oH=ȴ4酵zLcafD@ }WcrrrKKOQOv'"EuaL%IRCSUUf|e@Ao*ĕBKCqFX.]dƬx>VY,/3tECN^>$Ṟ|~u|B 2Oޒ'9ly^-$M1b%GsY3tZ-p ֚XfT{e®ױuރv5u (ߐ0i#zJ /]C-7?@) n;\יp]*SW8yzT} F(Jq2.޸:_6 Y {}Omv5UTDt|Ԕ[L9{9{uqQ2V_ZRV6,J|.}~Z8e{3Gf;8 KM%GKLIVϓҸl_\F( >a. V?5.c ѕ8f֚7{_EKn_Ĕ4$7tTMG<a`#Q}ѩ# ̌P|ps2okz3Z{P #%ϯ9,M^8is%=Er,3yŋQ/iÀ7G<e֡'|V:#%+-A(awVt{lbR"|3`}qV"A,7THC~ԩk_mgafJPJsnRU9 4?F(J?L֭G V?Q"_Jl9$F3)/pu " ؉O ~cWfN$|Ep= PQ+5c)Y3bF(yO;sy^\N-`%ees\LZ]qPm5r-Y؄ Jp 8gϋ[{tP #H=f* BזJޗI gMLMGbjLJTy-1wPoԟC"b_@ǭϞm--/ 0i.D޼8#i˒7no>aW;IDATM*.g/gIFNnhN^7И@B1P #<^BX\qifݾCfX|C nSւ0~}5Pz w>N;l"? C.LpM̂0րIuw.g3OH(t#q40aqwe" d+(l $Bd4:uCǠ̃:Spc=^ߐ0Zpq56O 0{|wm[2\f.NtuD}P~5B\ 8~>"YaZxy鳤 @(^&@z]F+U>7oc[mlŮL^Nx^|\d&HTQ$MEЍ'K.Gl]tN> q%^՟Εrs/,)H(az%.,)SpIz<\ ^zڨA88k:<.cPSbT JJ^Ҟ`/~7 \%E:2:Oya~HLMh8<|a}q>Bo?v⟴'1 'bfNE݄qh(DXS@IYLFBr*6>i?AP:CAĽx& t;> an%>GpT n%>ǔ0**лkgm u\ÁØ=j8Zry7 eEh}!FhLZLlY7x4TTҲjbJ\Bfdֳ(3߀:n?$? /,G'߹A!#'{`ؑ~ =e;NT!(HݽRtNj^gXTmΟ7%MJr/7d*B1P #_(  X͚YMw>nsg ?V\ 3qQ2icF0տ/ƚ_XMU5 !073D*kp߰yG~[6^]:G_Q!u\,Dx 6cMJ(y'ܵ{i#,&RGǢonDX7:  pms=JVO㗯ƞ˘zvǶe_$)ĤAg:˹jdHHIG%8.P$ CxyɲY03߽=[G=t먇W5]:`X7'5-{V,n{ 69 H RX\u~aEkJșH,M ;'rn3bX_#*L"tu8{xW˳TJfQa(JL>? jDӁZm:5_I9ycb1`){!3O2u'AWI`Bd!VWB 8=;鿒8@bJzv(zvGf.} j<sSBW[kk3ǫC/n]&5t2VX(ĈMUlNkMXlXy7|BB11O{mNHIC tkdl%O*Ho8ڻ:e$* ¹:PP2T$ !(Q #<7\EOrs'򔔌7q>t1K%AR!^S5UU01 3L6MUU k|L\%ED.^ + ѻj.,$u=~ }eǏƬp-.GA+Ltu7$4,pT~ f@ b ]QQ&} 4MKH ;ckۙ@֯3-dc/Rt,{U ˟EŗTF1444pMIHyy̳Os6 G ,qE"HRtja/>G`KɳP$BJøAGojg!J} BCr3C qq2P3IU\# { >x{az߈p>AIk /,GC =E" @M1|E"Bd5 /,D*vϓϘi9oWIe) ~L$H3!3P紫{\uzy+"5C3HT8X-ڻxV (DNB(Q # Z.ϟe76!a Fރ\c.V++W8 @B%Cȇ}@GsA^gzw~ 6U3 8O?wR!b0Bsnf_Z.;viS"  ǸVOf_F-Sbv;]墊`X3*B>we{3G]4ث'N ɇ^m<)aI9{A7F1PhYU]=% 9_bĔ4Gb@K%ω)iHLM ]]om >|\\!pJO/pSWCGD W?e]!W_XPpdN^>̲[/(ޗ*wCKnsRt,=}d~,΅G"*> Fg,H8z.Gr*DHshygnlOP;vW[pzHhN̲GW!(JɇPlEX^י Ǐ~k%$ PrmE:ya~7m. >- 7&ŵ`1^ ~ܽEAP*NSp\MZtɖYyd$*pBd㝤j&Ǭþa;R!V*g<O0agRSjٜcBC\9*>=}}Iy&j<[ƉM죁q!w{`Jt)!p]lh}BJwŤ&[pJ4fe[a b0`S|v JKgtp!؍aaA0=]tca*)"93 c`m>ymlg?cZl3} j=~,[ V?N#Y"nt_^# 3+pmd^k9{{\,>`-h !N갰-;Xu\wٴ)h::Jx]JApTLgaפA(}KݸWx]b6TsICN#,pth`IoqrB@$ΓW}Ы'? ߐmqf DbJb@;uaίl#*>G<BKCybA_-y/[O`՜RI6~s9\, gB/9vWnWY8a!⁖6 kmCg|; z'gd @NB(Q #_jy_ϋp}X.NK+tnp|+vH΁F+aY|%=WGSL6 J'G|"8?X(DP&0;~ly!2n{դqa&'`^l"lD*p𮔗g-,HʉK0agRߒ +++=7(?G!r49r5Ip򡫭iÇbXpN^PԴ<'g쵚.b' -(b3-ӵEhWgGlع 5죺Q[g<-hFGB,="60_{Aܽ,yd5 hms iuuuZd~HNgaUVGe7o9FFMwI_,[^|ݡWc֖s\%E͚cF|bts&٭W".!t0o@s%E<u ݾlǛd&$UUD7y)iag<9{Mq;u;ޫOcݫRX^D(.(.LgB1ј/yQςRM'NQ/;G^a*bdn{@ғ \f^rh 3Sl< T*yq Dzv+ D*Ef./ڜ|1tvy2Ǵl:&8Ĕ4_drP˸B\Mg0oqQBJ[J :L(|s=.mw|kk+CI]<+MwJ'!b!UmqYSٟ+hlp;&XogogϓHLI˅ap_F&l,'Y{Y"#'/ZX5gLv_97-+ev۹ 3aFv简F'`ɪOJڧϟY P #-Zou:m?͇3K;lx_z;5H㟹˷yD# !}lv&4ȹF{iɶ'q<,i\!='w/hB0B(ynBJJ KPycGrM7gs)yn`nrS%T!#pSWCGDĔ4l1]ﶛ5j8,ǏFEp= PQ+5c)YzaPLTZr)*(nn^we EX{?E^ !Zbޙ[q#C$m4OdfYȣ"P #ga\%ݻ*o]yɧqJX]**+/XAABd:m4B ܾ 3hYB!B(y&Mθ把M|b4.$Vآ m6RB!B3i9Fko?P;vd3fYϟ 8lN~Dz!KT*B!J-+i}e- :S!Jױw>JB!Bɢޑ?OᏅsjX s+1I r>tiB!B(y&/\INkM(|^=}UU'PD!B!g6?+p8&b?~пv=:B!JRQTߦ 1ߴh~IC7)K˅?or7}8LB!B3X}8G;ngnF6<'@fB!B%b#/#9URlt?/(RBMH:B!JɧRPzҸEW qf뎨 7{VWW ` NB!B%sꯨ9CN;U]m{CEåRz -t!B!<`͑8hP7{Ojݓ'rX2B!B%Kij0trPhWnJrޫ>CW]]#&B!B%Ϥ! ou֚~۰2 d:-B!JICJ^bR)-جWT6a)OXN!B!gr8l-^7WϔAˉsx\PjokRB!B(y&(ǭw=8NXki G'5}z %*nB!B%ϤRFñY>{r]TRan01!B!gTlV*=)w;hquuEX !B!)|N#ģjj?s*Tƪª XƬ6&]gڤ˺Cj3kcl7ϪjRkޔn7/#V%zcZ=ݖ~t[Ve1oU[})JB{npd G&P17d6}DabZ}.fhɶmTc٪R׫ڣߧfs?߿F_5H6]6 OY{yn뤾J}N}6k{M~F/0`=Z<5c\׭6ڬfpkuiOunݾD#ŕ.W+9 h1[[j"b1=jCG^}Zhd:klץ,<ĺh/d4b@ͣS5!¾QTӺ1~^ۨبYefL?'ۖ~DD#15Bg[ժu==2?fǜi;t)FDmwh?\Y'm89tDי6tMZݶ=#c@"&i\arp:B]Y ogAUfo7)Q;ӸZ='nz=ߍ@M.IC_۪7E|F-lDUϭcR5!5r~D1kM4Z}fn5>6;|оHsg:D~5bx`vqݾÝY#XLxUcb+ՠ=Vv_n vS[̭ ò8,] P?Xo˫|?웺c,ܲ\t'̰2rxO{o.@_a.Kr2Gt׃'f~/3:eC_BԗkR [ɷoc%Fvgʪͪު(;qC~4B)wx35O8N fY{Pg5ca5n5̝uȏ4B)'5>wmW"d%V]jp &5{۬ 5ڑѩ :g!Rf~KJ{=H ~5jfǬFN8EO`~BRuT}gG7 6Ȝ_y^50bgE{!J:wI/7UT߫ 65މUzBtS/{W"d-Y@:ן2p;UI !P ScϽuG"dDx;]$k'B(/ʰgRl\w!B(F^ !J9{◾tB(]̯{u[tBJ}{<=?ut;=4c;vg:9K1kBLZ=bL}Ac֦⻮?ktBD$xҫSMҌ=\8sj&/tŻ85OXyVc[[|04B)S3 }gWnf))ј 7~X0_~C]ůgߴp?7?yyB! >-z"u /]K I$dL5[>i5b5e5h_ko [~7g:_?zOU,C?pΚbORAR2HKuH)!-)4%&)=UZB(zp1>}-dybV.4onR/F+`L!cBTi>syJ֑uVWh;'tBb'>>63AW }߼*!*7\~fYAÛIWըaJ4wX"Q_aIC! 5O͉s \$Ry_Ih5_, #{dvp_w%t>2o\r7v*ܱcƣǦm'eBTw_<ȋDwEE# k6Dͯs~g7AlВZ $Jȯɤ,\ͬ<%rf`L%\) :l`dW?vA7r˟ow=Wg3W\yk>y[tOZVcX[GK@bU9-YIȘk|i f[2 KƷj-Y8@oXɪ?u/^0m=J,'lY)d̾DsɅ3oM^k+^MS@߄Ka~ 8hŔ8@jbJa~ Ʒg1%0QhɃ`~1r1["? (Z9`o 9A9*) hȘu_/@V%9/d R(dL[*^|o9fK6o"}5a~ qQ(2+% |cƋg_ R1̽-Wy.,@nG5y;lZ_*3˯9VT.^7H d{b)%c~OuìYn]/{|[wlXE|,8ZaΉU??g?] kfokdX d]tŘ_It%fUZW}*[x,ûŘr~N\-RK-_nҘC?wɇf%ޟ>|+?Wh0&/dLmq̑ Zh1W$%$Uk>U9kx ?5«m~ v!,bͯ+X_b7g G;0;W޿ƽ_- ogE:mMV#V]mƬ*HcSh7aoG={G޽&YX^;3e}yO)]CW"۳]Ș}2Zb5,Ro*$XGs |]GWԑΙј \UirJ%ä%ᕮkq$Ӷ].Q:_:Ne«h7fq\a_vVJMwS9QS^XRe6XWJח]m^NR1X"֔u!c*y W!@lGMƶ0`L_Xl7P uVc1Q=TQo) _؞\EUXMfc(@V"Fc6`~gxw}1 xi!+ϑ\#~IB"Z 8hLMZcOfjvnxO /YQ`G6pzjƪ۪\_8kAKnyYq6pZo"{M90/gϭ1 Xh;E/htx!|fI"ji65/vdH-JϔvPXu֑j:&zMkUVc\LxGmȺ[0 n-v"7Dv>HmvLmեIa~jf7qv̮ VwBm>v]+ު{5D{4ql@"IZ"o`:N j/uٯ&ը[X簙;S" ߽useN9{8/dRި5m~vק< ,4 졻 4ݨbȦ}F^}Mu A}M׷rnG>ٖ\9ͺn2Lpn<Ѕf}Vߕ2:Ǭc~ PCK$FCdoodXW_B"Œ<5P( t nr5a}:"׫mRSXhYHަM4E:u7gYc_ޢ0*}^Wjl~7NK[[_?d o3k۞e(L_jgT i0$*HuD؅U尉F!8S׍s^M*FDs[}^UMrIl@%}qQ8:M$_f?1snFYAJ盦˹V .PI͗? ׍3Uc&:Z ܤjGZd]#ʣ&,72VJS-e~ܨiNjNw*ضIl5}źjeo]FH^XGsff@6+c|>|S1%fu,M4NK,XZ"ѴF&C4j&kLt~nc8(P_Ԋ!~2M5&μGqͨD=&Z谉#ž!LL4\iIմP~ݖDGЧS2p6;ɤyTcdu=y0rvv޴!ZXbk`*$L4oi?o5o[&f]2ߛΐ 29h̆5. QԒ 5gjsOx%¤2 c m%ݎMȼԌ5nmL f\I SL[_hn@11;MGc.@ƣu' 7*X$_=Z[ #ڦHHN{fdxkDKA6ر#Wʝ;w6:y[s,7rG²=2/ڵ+_X$ s<[)YLщIfk_7'پ}{?6m5c!BK}?136 ?VQQA":Q%ڦxC<{\{b3d "yfoܳE:{t$8w{ϧ[{yBӏk_wLd XN 7di6cHm`kG36pgת4^'쳚T+P+Q:l!=3/Wxt5=,E(f4kہHl66=Ύ4 \bեWk&5ľj:MsÆBhIoe{5/y?,à5DwBvwK@e5:ǹQB[!ݥjbΚqa<_Ͼ>͋;Ͽ߹{NB$H:"=wXADFD!iM*Zj0 kCsb_>b1Fo'ytB-[?{񌯣azXK3g-)VK\%qH Mtwkmȱ^:l!;GJzOp"z]D@#vbzqIm`F5{0S&),.eB%C7މzߺ~~h%g~Ŝ)oH9\5C!czW6k~_OmLeQwĐgBcNߓucOڵ*4e#)%Rmo0&OnHB,IFeLaْH,G8uBdht_s ]Q[ r6DR")ӏ'!ZqKw=O->uT=,aw5|5D6`1m$JgTH=F:m![qo1 wW@ 13|6|RX K 6iVц͕9;!Z7~NiƧW7pVnQ+c\6$ÒToȱF!TѓXѫڷhm1Fr=tB-Wo%_/in$d* [%qe;N+cbu?wYOiC!\}λk|#eG`a|kHY2,:c^;ӆBhz`tRǞ{x }W k%!%#fU9Fsvf >yj6BCO=;[iadX:Z#UJ"6 /6 Z WΊ=Bdϗj~0@T2wu!& ,PDy1&Pk&5Įd5ڵ0:l!+zp՟޾}{9&٪X=H|4Ɓ>6tB%Ǘj|o,y\DC!7#Br:DdmSVXMM_WL4a;w}NBdhYC㧙BlD;Bz܌(S$jQgCM5>_"B(:zԫ1'Nbnځ$%DZW!J;=,~#2%V,ki3W\yO6B~SRhΟ<]q~Ύ0Zh<7@FaH7?M ͕9;!ZJSoyr=J_^-tPW6mhmYHcF*V J>Nnl5v0Z,I8?_Bǫ&t/G-7'[9@K7Wq?6B-=GGc||KukZQ=I/@$i3FEȘJZ">){dm<մ.Y9![pQ$?8LKdD1%&2l>vZXMim6_m F/7,9Ü_B {H_3%5dWvBu&ɳfnT"tjr^uayVb}^3Z֔:B!,=>  6 gN e.xW҇ܒIeաssg$Dse]vz1!ҩS/Pgo_y[n[!dLFn{HkUNC$s^C !Pr?9f.@$V #X`~ݛEըaJ4wX"QLO{96BO -;{t;=^3;št!fqm^Wd&y:OYK;FJ!J<>S/@r͘3z꥔j31IV3+jeɸܩ%sIM B:l!kM _ 1O2WKDu% KYl*,pI%SUB(Sؾ}]L}hnӐ&Cs;v^"!cϟg9>ϣ @1Ff~_;rȻWlZ]wyo/)ߙ5ĉl~rřǾŴ6hFmkWՒU[Jd~R$KBxoDÑ'aC! =%3c@Σs@15~~{ s {jox+nP}:_W:w~3W_r=`&j}O(VaL !P2ӗzזd~=QHtڧDoQapbUge({ﭿW佫g7 ʚtV3+jeɸܩ%s"nj_-i.5ɕ֥{7E5q`l?z`NBeO>kT'rkel_1b<~~^~ψ){ï1+m~Ōj4Qk况v$R[`drm}!0btԶ=i"[M8w>Q nlǎ~xY:m!SXzߙ:~ȯ1MN|F_1UV$ w5Tjv6 Nedq6o庼?^F(leNBd(闗TĩJ~kLOI}Jf1}e : K]RG1o]Kd/,VL;Y;W1o'6Bwxkhk|/'_F8$Qj3fM_٫/۳^n6ۚ+v6]:fdXƌb2HsJ~nQgLo":m!5MܹwitXDWWWgͮ_Q?]DWb9_sgtP5~b~cl.{1ke_Om?}Be둧OY°^~ h$ZT+rgXFbQEy7x};?,_lC-]7dGUddxs$d%fRaCaB$zrŗ;:8sO!ZG_fc۷oBrztl%2͘5NtOÒJ$woz5VXﭪZ30tB%C>5 T])mW VC<(Cv:\")}$Υ^nF?o~ћl;UI !P2oxw.@4%la~mګ1,󷭑뵏9rZLt2"əF{lg]$7oעBh9 ;yg6zQ;Q?]z(}Rv7X lֵamα|n#ctB-WN8~bcϽv>/l۶m]JׄG쮞m(Ϊҝ?l$[ }Gm qޣǷ?e'~{j/c}#ܗnkO˷< +;),˫|Cͣ"WnY΁,Ė|rW>~4ٝ\48-{%~ϟh2j6~6slrr Fzx{݄Zj%ֺ 41ظ|0@#@@#dxDIZZXʎ! Ӓ(mE%u1 g~HZED~b {3)I c~i0"[n5 ʤ(5䴉ѡ% Ygl~~i>]}CC%ڻAcfZbZl|^mh:ĝ5ޔ!:t_!8@<;B\Xnc,S|~?Tfrڝ2L*%dfj-78s% -5 YP R5si>kNWf$ZDVYluk*@qi XFjј?ըt0 i% AAd]_7mp80=gX 桺e_$a2vkdiGQ]YϚJ)Ѥ'%J,l7ľ@,>>jvRM=Dk H9$loCrjI!)'d,Y|a+ϬP\A"&;lWoH=ຆeq$: &lD+ŀsXbS똭 $2;I&MbյS>֨!C.s? v+h X Icm]+w2IϷo:xaJa~GT4<.s u]m)5WH O24W8K7puTJލw9g0b;-}符Ҫڪ3d. ūgXǥ--"$a7I &{h%fd{NZzo$NI#Zoey2j==RwX߿&*_/0RfoM1y~Vk Kx1#WΟ Fw* _Yt(% }!Sq ueHHk*oH;hJ^1y kJOQ{MViBV {4jچ$UHԭ k"ltiXJ 2;kndnG3gR3oX-/5jF4c4֘}YLtްDCzL%wI ܧn51ՄZMd*3,Itް VծNd$Ye לAέQ7 "K% CK.2Wtn,\ KI5g 3,ui!H!}D`L =Lˍ:XV3 72:q Hq9SʤkHV۹%rgTDUMa 2|1: ^nԌh}( Ꭵ Z"7p XΥU>(]LQ r 3\IdZo#=9rB1 =4;yȒ"iC yd3D"dXkMAiFtNp-&8w YCb 7 !O)ϙ2$^EߎLUz}w}%L9fIJAa\a @)U~:K$ɜrܥ!2a 2DZL--KDUrU.#Ԙ٢qR lc1GDڬ$îzxr Z )ppG_™lW| m~.]Ϛ ^C˼ 1wѥQ>)@ -X m6GCs.fh~Î,64Q<5xm]SI>FjdHFtKhF9 6ƴpć,d~묆3m+{uo K4sDfդˣhZ۬٤cG stvm}o35~l㤉=SFgzܭǾ.FV FZVJMVuz kas-w~nҹ5Nq\x,Fw1w_7H}n^- sMkF9mn&jMlN7 ͯ:^rmRȯDk"):w# 5eq37Rv~ nk+QMO{^S&yo]c=ϻb;Zwc,2g-w9FY??Fdz.~d| Xs~cWs\^` QbѤro1uzv;]NtN|`^X0ƀ)7 8ג;w~kjd^Uk5耠tS\ }n@o!pźIU<_ogsg~k=Fܨp~oL Є0鼏ߘw YL7^ )w"h#+fa3i~KQv8o߻V װ  Hmc~uctiEGW(c~ b3xw$q5ΥM׸t{\of5j0˝crT-J\| fo}+✧X"pS@{ƺ0慷s-=j4q=ho{L4_ďgnIlf(ܯ5{kV&oA"mHcY^qqn`~`~gh ckblClJi.Wc~7v"&:ty>[ô#D|yo9_=5w8 |G,s&:2 QIK<9_<^˝1x5&:hAݩzvvvʵHF WH$X#촯C̼᜼&4[I5t"o9; ?73h рAs[9{t<7̝wK0~g_&!̯o!{t= o^@clc{ 5=ioos3`s@n 7Oo̹`4FލJ7+}Uwh:0h_ת%85Mα+U,C+ag}&:OwϹi +D[g7R:k*u6MOysJ9M$C/7X=dޯxLtL7EVG.hp37B0 tK?InNxw ?:ζ'LNǘh.΁8ۉw';zu{{حL]fSv򣚇<4 q5s][WZMݥu;&k1?Is\DoO_c~}߈nˏwݥm]Tίk~ L4cysVhNe55ݭtYwn{D;V+-CIt4k 4|yIU+Q&sj✮BתRC4tq#g ."Ȩ d E&vߩLػkMj+¿^/X.HpŁcmo&DR@_|g ߱ќ={~~Zy. g?qF4nL>ک86ˋs.RaF-6F5W.ޅ1ڬ,w뵰&N[%x-lsPXL_Wپ9Xk񮳅Wɶb~[b_U2:4jLG[ S,Wbz%Yh[MX.78$b,S81=sϷg:w`«L"h~a%y[>e.nȻk]!m;q grohEͯF⻴&E"Zcv+v{> kdYWkp n?~"Ã3uԕ 0ޓ K_Qo ?>onϏ}+b~üO509瑈frLMj{u_X^;hsQ\!AʠyJYn9wƙߖ7hw5ٴ>mͯDx5EX LZɍj;h.OsXa:uv5bd{ͭy% J|Q' ި7@_vd}l7o{Wz꼝0S|{Wniiw1R&*M*&X,tB|c vPJR{L~l:m<>+/L;cӮ@`ן̕f 2Tƙ5͚yռITX2XL?W ^I2VdJN|QhcǗ/W<2g9]xڦ&p1}脰N=CZ]R;ܸ5RDJ-~b-&~)XHOkڵd+D̪o][3P՘ &(i "m$m&7t?1:@C2FWIR92C RSfʴ1+57% mrHUv[kX2-e#bZW2A_RY1;w70H4U!I$lI-4$(G[V ˤWnDJ COMDgFa~t 5b^w{̨\1~tWjv$J`L&5Rfު^R@" D!1${ [L4 KT( 9fYUVC1%G?;bC >2sAטH$:(u/=jlWM19dMx&qU+0rvW 6z g^:uQ^YG7 *ȐIXadmMIt&}c4ģ,|*O 5kVa|؆Vߐu\͵q q7dU;jtݍݍ\285N1Ldz\t;^Fv"w3vwчϝst6DF}eA|gK$/} +,^Ek.4K̰f1g{X'_ `D6]%z;6dQ'Q&4w2yu5zyq bo?&C=/ hl0ɖE!n]`/$>/5C#’eVYd(paԊVULi2W]9-y[a~7-e8~ҹ!7@;^ҵQ:]3E_H&i1USãIzsTaug1 hC d(@7s/1 _1潎ͶD9^Ns~cRS.6ޫo_q@Ji$^I$_c%5lh@EHׄ2դ &yea5]<`65Tc*fç> W?[2|J>`yJh9$1 ΖHmXH-b|m{c GH]Ȱg-pvt1e2!R7 5 w29ه>-&镎`Zcx  ˡݘBJeQ}48[WEK,b`9zi}mj%ǹYDK``hD7_Z }~+U1cL;s<9HV87V3)o$i?m6b~6V$?SyOˬt1V[i 0.(%r\ L[qOK` h+o-&ܳAZ 1:դ~ڌY#9!h 4ݘ|LunK mި~lh'}60n٤wo:ci;5ڦZ{LE!zÁ6.u^==?k;@d 4˼OYsէ?M5"K`:]wDX*Y7mH?+o<5M{t9xs,OM]S7pCche;[uY'3wdu],֫HVFQ^>-WCX "8e|M|H۾@ rXǵG甶oe߬n}S31FwlYTMvsL#t[kVg9@v  0d zE&Z#RjV"i~s~YBk\'ԠF y?2o0g{,o6ѤmbPv1]W]洓 _̍RO8F7u\Z[ jRc4w\jx}ȸo}v;7 f-I371f|5^da{t#- |}ng r|=/P$g~+W0}q]]͚l꦳;)i2J[jhJĐ`l%nrxM#m:%Є.6J*R-b%#upʌXE:8C|><.~Q~qgxP>;ıM ? ;⻛;^L(_/RYK2qK;D5m& %F&qwr?kҜEyrدKw|%/B:yyK|}| I* ^SŔIVӚil4BB$_³ 0R~)_/iT~ !%.8A P~)_/嗴-*k}) B&_/K%BZ^~rG(KR~)BH{\ }~</KB!O$\{o/M(KR~)y#_1n|Mm^w=2+^ˌ3k) fՔ QV9Kzi"/[;t L(KR~)]~yⲅC u]F呵nGZ|&ej}YZyϮP#O]^J*9dg\inyDK/!MPAx 6!ayYg[+"=H9%IٞCj^Cl4}~=I9>UoׅLh:2F4'PֲmєmusJZEu'egLnt7~I}ţlNsF) Q?om[8)ғ3uWFP6H9~oƽ仛//K֗\+6"W c4r͸Av ҭg+F֐" $.x;e<9@M#?Шx[Esq\Pk(¦)qYk`M@O^yW\ȷި@V>Tޫyih7z9#w(,rV~Gq\V\j4ǮYI"/kڏف!$]^^922*>mQ2mW6SlcYީ!`BR~)_ҚE{'.Ƈp XbxoV֤eﺋ{hL#=x/buC5k/3y4Tx>C<;Yo,0e]<3^Wfy_gʋ;ψfl32c#޹N26fM;s7o|3Y]M~䣀Z6R)ȃiKC^o~f2aҺ(c>J<$`P(KR~)C[Doeev\o{*(a3#.֫vb+. 3' 6a3;B!rz,5(_&eK8D}y{`U~|aϋ)p9p-B6Ro!Uoȸ~wNp^o,&FN~eKL(_/KĀ g "vQ.@)]zѾp#6bHön#1+ _ HsؤnDI~2^o?=:ՒMFIĔNyf9e.?+:;ۀNrַLt{(E| mWBIi{!O >Wa. , /K(4 H9dS;IR:}&q12ue9Uu+}#1{FjUA8aÆHڤx)FjB~KބH_qcrWzsw:tCW.Kms1I9N"k{<^~Ž"F!N9ˠg݇A~3H˩)f{~"m) Aˁ4Z .ϻj}7YQ|C_͗1.]4guǫ.♜}އ.(tiΚ_]+[F3ǟ'}T>ܺe:*&K/!Dϓ+A:<_ۉ,؞wz~-==.a9,z>plw|tkVOO=s>!/9O_?O<&%{M}2TFB|x4eL}/CC3bgP..yB-[>HS&|^[(xeE.Pِ'wۓg'їLR~ B!wa3L(_/K! gk%^{>P~)_/B!>^=59yKR~)BiH%F""`/KB! 'g[#L3/Kڸ= kovde&SNd~jFgF7=j ,~tsE jH6%Es`/Kl7xa.G{יZ*櫬)eiKOZ%c#v]Xϭ,T5+m*E@Gs;"5nLR~)_BY~k{z36_(>Dzmw @:!|x{Ӌxt2iMu/KFa' QsPZHM"hb\hoLt:yo; rysA񻐜m_('w8>i3 Xdj,ڡCva^SMy& 8֖Oۥ|.R(tEaīC/'@~3(C運'պ/vT1s7"(!E@R |ٴPΧ k](soCHSRvM{ A$s\Gx6 `/KUEwC\pE".E HK79ZDZ%\w.@HYֻJ>@Z}t'c镗ֲٿ4}_)ҊkI76^!H҇;uqv! pOjF漺BZ> v޴g2I~]}@< -h$)E1u%O <}6Lz&vpi㼶5pŸǕR$Og'K'E| KR~I g33_Rɱ LY9{cA7~_aϕ7iDR$&$T< $Dz֓+gV4j]daK]R7V]x6VG~ɪY^1wɸ}2YHa!7l/~'7;qI-GaLR~)_V$]< ud䷔"a#9*5_( o ʗXmP~^i@~ qKcgƃum@[ :q@U;Bq7NpWҰ! n A\봅z;'#$NQ8IM6*KR~I;C5 ".pڞ KV-$H߻_P; ɲlKH ъ φ|WgGPE]dH~7wxǧoLȧ?eY3BsbeqiYu'?tUz/m{p\l0:LYgjm\xNo> =^ouWL-8:ٲr+G\ PiȺVL}ûK܅@:\e%/1Hg+]}u̾_zcqC="]$/K&FNv$=fa<$:K^96a NϋY:\JC(_/K^6E mEߡg.Aph\pYWyBY{YڊOj8R~)_/!rQdImW9)_/KR~ ~w]<7i0}mɹ-LR~)_BH $󵝝d&.oDuOAR~)_ܑI+gSɵ*kʌ,).㵤y/f<疦Ok_;cuz7,Yi z9}wV&tKR~)!3xP Sx^]Biً\=GFht_rwxJ33?-MrFZ˲;x-*nbFJJ< t38iCdMgY R~)_/嗴O)[QD7mD֔_Kɫ0;)Ef޵ZZIdb3Y xy.@R~ 嗐dAx퉨^.uC?/=Wf^є cA?'O^] Fpe?!Hy81.<giKFw=ҥ[69w߇m=H=F9xR#xI\gw|+sl159{i4zHÁF[yl- ߻ؾc? ڨUͦ?M~WQ]O87sęC}PR;X6;mE今:2뵃U nڟֽ."]kHg>;?/l^zm#w_z3KR~IKﰫ:Er\ I󺬹u(#+.E0R`'m%\<7 sؤf Y$7q_41rGw{Ӯ&(| _-ryl MC.$c!<ڞtj{9ms74z C 3|]pGS|زtogԦ)OKd蘓" ެ<ϥ(_/K%-A #9㙋|EsA~j`:" C+CT}WN,\xhO bH@j!*<}FV((.׮[@2^<l{)ssh.̱\r_w!oo)9Q{9WC;}v8g\hWэ{A~C`ԑ/]ѩGOԓ$>"pAR#Y_/K%R~Ȗ3? aOO#NS=-CVqn5Yf՜wوCR qCd =8>IԵWUi 2kR~5MH1zs(p\<uɯ.Av{̜'ir)+tݨk)uc@MsS'.~6M~'\<1T2dCLITuCYUNjf\<~/W2M~uDʼnk|mr~|oMR~)_aYk}_knv`'tW/kskonq:ǖRd><Diɛxt8nGYFVII*Hԙ%v(Pԑ>2^ʻaĝΣoSImo`;Mտ͗_V@2!RhqGH.Bg-`_/K%B^.ɌL~VTpxKR~ ! AO^T)oo&’KR~)BHۃΗo'/0KKR~)BHp^=ҠR~)_/!Ҷ7Tœ'1F%}1wBR~)_ҺȊ kgi⸗tk'y=n[Zp͍qSH}lʲ,#k_-+EH/7d wOOR~ 嗐a56KשU!,QWrr_ee#̖]}TRډCְE췉} o yrDz!= ,KR~K$#xn֒\yu@ mF>c(eX^$ZqpmڻMdlJQ˜_(_@>ͱ%Ro'(?רɿϱ}/VwлЅ]4PW(k9">i5"ٙy˵_<" dX KR~)~tB.b.C\p1} 3rCz"2ҫ8"%컎cKX] q @㳮'paۇ8 -H0I)#W|=q2PN#T%slÓ_C|iQ @4P9US='oxB2v^6OS*] 6#Q*YgٯcJqYzj;Q!>SAA[X6]|&.)W lcx=j4P^* j{س(~Frad y=m$ȯ:ipqowj1 7"77H׮^Ez[%_P~[E_JYu3< dP~)_/iH|g~ȯ/  QBa E~CVљ5R vB+ U±eW; rtk: Bֈպ>@ZO~f7P27o\<}ǔA̺P/'|nC=o, bY~ > LR~)4S% \<Q~mՄ2p/۽B;/tr3; l w{bW] +=#)!KC |'K15skعNd;E8(^Q~wM] g΅qgww@m[ßc 3͑H_}χS~)EʉJo7h\KN deړ_;|LDywx.qru܀ LxjydQOoѻe$6^ESzԨDpjbf$GK)Q~)_B%$΂,"rf#\s 9bss Q9nؤQ&My !5{c\ieY1b8A>6Lȱ.~VX oҏgs)%):4y ZvsIkOΩ屍sxO_:C$V]3l3Go)ːv`_/ŤWM_6gdz; <һ^l|: ؔ$D~v^K/嗐;a.}w^we=}⌫,~F1suo!帬֎@~s G=̬/*%?o~\+>0˯gI}mEt38.3 m/kzY/ 5.`&k!;]c;nMwWژhqҮ9#c_Ap%4yDR.<$+c ,/`84o>嗐gVėNPHNayVǛ.bC4"1/?" (@'yo=嗐gF57CsCm^2ux"Qw:3t YGDn;Z,;ׁXdZn%"\k߬ʿTR~MuXKտ7>^+_niտ^Ki'gy4yrѽ7r x$y'lj;:Ɵ~ /R~w=_.?]ss@dg_Cng2կ+?Hs׋u;Y.?] =Z/Q~Et$"~O_c(q>/w6[A~?Gu(ui?ѯB"?g~z9b)q= >eH26D&0ߥyĺ`.kQ@%(Iϫ?WU=#=R>R!ync]Ņߋہ%y&]*Qz##B/8f7EY)fQi=I_Cwm[0Oos+C`|d ߖQzQ~I k:Wfy(c']8,?&eL/Yҥ.粬 u5eQb68y^%H[.Tٞю]tY>oV~iw{=Igj76pܕp@g[FǐvM^"͖mS6O28wN KH#Cef|ПP~Aޑu`+U,{"2xOH~Kz#I&2` Gz}|eGK9fEem9Cb)/r3CznNnu|2sP~3"9 O~f+K-5<麃xu :xÞM/mi[Fh:e241:4",5cɎ=cBȳiDOGe8h)P #3VrE/~}_?,C!% V~擌U )Qn/2vj+gdk"E~#6 O*v"]W%H¶#W{M_IL{]Cyy7t|}Ʒj?XG>V峎"0}<!_+w+ S~_~{"çeԀHo^ph-n/y@D. `24YYJ_MuCqTې #v~lη}w]` &_'țίҹNqnHNewߐg>׹"#l0P>>6uB^bAR~,"2}9+]]'VG@p=y8vל^7$Zͤsr,*.G!A^,6_K^]'ZdxqW)𹍣#B,\P~dVbPPR~Ӄ sg "_kѡkMm嗼PZyK܇B巕N m!lRluOݞ lR~2U&g=o˯?!嗐[WǞn/ܑ4Plp+mDWOP~)D~eI)yS&<p~)_$i3 %!܃O+FOg$dKLl$Kmo|_s߲ozKXJ& pB+oDåY~=?dr_B"nLȲH!䞼w,3A/L7OKR~K@fSIP^F>Ȅ҃*mK5L$k'g#z\nt币g~)@oRykOktQC$( oӧ'KR~)w#}?vdY"ݬZvrm&K[l_2\ l丙g~Ҵ@.8rM";XE)"~H";֣|3Ԇ/K@% )i4 ߧ*PgϡWmVf䱑Ye4C"_/K%_7(\TM+Kg&Kqb+\KL^vplA^ xX$m8$C_@<'G1)R-Cq/ǪI6i[l+~VWL=5M"*hty?[r _Czrzmoy'Tr9.6H:ƻv({iҶrj#M3ibUgÔ[F=^!]<.LZҸc%݋.~@k8uο)SWiGdt$;2#B(_/K^B@pa/B0\x.O\g8Ў9|{LmY ڼ }FMwo܅tu>ZwI">BLB(_/KY~x9..;LH~;gG ]EWh?~`ʳjW-鄰 <ڞ#m3 `6r̰So ҧ702˦- {4^wep7 FTϐyI`8Hpޅo'KR~)乢3)[2kq̥į3?L;HR~FbB:\(xOs,£K7+%֧ǼPk=rϠ<^ I#-;hZEvOwC[NP1[rg]r[(-ڮx}- t8[%&"=޹ן# KR~)%(" Qϻ$KR~)Ҋȳ4Lޑ>ЄKR~)BiG:灣=fl?!_/K%BHoopIjw?!_/K%BHk\)2z1Dz=ÕR~)_/y*J.^ZF^O&7 IHgyL~2وkBH+  P$3-AzY$9ÄKR~)ᬚI# gF *AG)Ŕ_/P~ y&|-#ϒ QҎȺ"đwK*%J1R~)Kp x/5Pm#Mʯnpa!q*?gj[Gҽlqܢ']8V~+O0eAJ/|!+t\K.|5_we"Z3fSl2n}Iߢ9$οc{3HǦ),ډkӜWv28vץ|&]ԟ@Zz~nmqM|9HH/>si<1pAMX8-L.x ]ڋi'4+ٍv=7 m.X)ĹPLlmrNfεI`%%_cHߩrB17:ҥb=ۏtB oy3+CPR&Oi:x c䷈txxBysY!u䯫 cl;SWYSل;9Ӧ;J!ύOR~B3!mB*B'n0l=BR~)_/!2j+zn]\ 9V!P~)_/B!/KB!BR~)_B!B(_/K^ @G8p<6#.^9˦N!KR~)%#4,Icݝ A糳4WzN!KR~)[R/dV2BR~)_/` GabyB& sQ8•Y )Yƣ0nzlgי'SV~ssıuOcqK8N~qYԓ M-3I&ݖEޏVr||UQ7<-ȯe؈ʯwm6oV,ӤS{G5 XAMJHthyBws%pH8eۮMVH^ e=e|J?BKR~G]>ɠMz(S W{XssҙO8NCufߌKv%i8A:o;o!PgES.cW+{M+{v̋/kK!KR~)2IE}R⡬qG"D<_YxwcJ Z)N9.M~CF&]xRW;֪WfJٯ2, &3c;8zg"S {en t!X+#+.^($Y?lα t]xe*mF!KR~)C2_RRjn#HV6 "h]gڱJCŽʯ)Ұm⸋tt2ہ7¾IG/;0yoqr'¶=(>|칸W9wܜ;f:ԉ]ڕ~ ZaB!$rɇ(/|P~mh/puKWIB!BR~ B!/KB!BR~)_B!B(_/K!B(lQ(?9:(_/K!B>"U^`/F" _/K%B!*%OR~)_B!r'*Q’o\}PhB~c6%~70;MiKR~)B!"QX«(l!=FLϛ(w4 "W2#a{& ;& 0 y#>N!8LR~)_B!E>\7nO܀>{9g\܃;,ޗ\4HoKR~ !BHy q z;mx,GZ4+q\@)_/K!BnoʬHh%p܌٧32TT!}&K㇝ux-ÞM$nKR~)B!$I~Ϥ7U{~7]J=X=2Jn4W!C'ԋMR~)_B!r->Gh陵Õwݞj/"KR!vvN+wu>mP~[C~ݢB!,ATW{efe,29̶}W6A#*9m2;X{q .^HP>EzP-c[ j?^?>o-To^]m]Ͽ_ >VO_/- ??y=O]w~w?Oo_B!+KYu~E>uf;4z"o#}v֋_× aœeiJOUht{/y=g&/竟g??sϯur'r/׌ܵ[> eMm/Kݿ:HJ `WczsK!wx+Rʟ__yw7}7Ur囫Cb^N.%~c嘗$iHS~K~& +u,H;D~w\(B!_#ʯҋ++EŸ Wa AWzuOJ{3ȯ|޾17 (#Ɔ|.-i_W?}3D>B!l⽏4+l}QMztht2\Z^'2vߗ(rs/D}>+Cۥ~v}z#DK!B(wc׽S+&"̯ svMZrQ/ϹP_g%N%Nxeז {l笥('wq=> Ik?3yk/!B6!rmgɟC p\ٮA>^,}~WA { =\S,B',ǾꕏNz%+)#RZ2 sMH۰f_B!B:4^]PC/!BPR~)_B!B(_/K!B(_/ _B!B(_/B!BR~)_B!B>Q~tC}G64_o~aMB!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!lߔIENDB`grpc-1.30.2/doc/images/grpc-client-lb-pss.png000066400000000000000000001561151370425124100206650ustar00rootroot00000000000000PNG  IHDRSpIDATxYYhP4i, @d LG aQb A#$qELnµ{s]qMƹqݺ\5Z]e2Dof&xso{vSW=Z{9ڿ`iЋ^G^s|>/ys[kQ;⡕",*FVg^G'ǶxݧvJmJF ˟>y-#[z&urzFYO3.@*/ l^א^YnU>‹e5"|@˵ 5(IaHWahJ X4}ތO‘?sÐ QY]#OyS7 85IA M1XGj"Yq(JkWG+"7ۏ@\SEKG~ծUfuڋO{cUV.](+#ёYSjZk.Tz_emQS*՟[`MD?ԦYՆbV~V_>S Ԟc[Ss쓄4 mϟ|_sZR|Yh2eш`D-d]['4/? O!N"q`" $^$s\4-3`Mq{$jpeQFNULV[-E).}nWkp-quׇk%*MόDڳ/Ep_3`?]$ռ?U1y>J6Dp"W$[-!m"88=yJd+d˂M6EmO"X%tEpQfώڞN~Tvy4K+_@2`JM F4ЀG"ؗ|  q5K-N?mG˒[{2"X%\ΗJ@i#E pvЉV5$/* ә_+ڠ/1l /'k&|)"x"حZ&Iߛ%8owqe@^KnmĶ Cļ&X5w.`c9r_WhD0"aBO+ 2|0-Z&CZ`_OU >[VZ}"3%*8I]\@ēsOOW.O+ vtjY|j w&D?wJC:}}")۟C-y{.%I}cysPO9yS?9=Wކ}v|UϏqlUS KM7D0--E@`"D0C#q`@8D0"D0C#q`@8D0"!cf!6C/F_56p`D,:/~jvJ؉ӻ!5zL<;NB!M΄?_{|ME/?vզնg2z>8߽@#3̿|-hKa`{ۜMq B#g\g7'Doz?:ԑe}Z:#=_rnD9f=>vԮV=VOW+_rsSD^>ɢюn+ :}\܈`wo >cq{mPrԖE{Yy%^#{x=ݼW#O5 ,GU\>Uvώ=@{9n2ɆsW^],黮+?=Yr~bPw Uk}KwuQ+6ۘ7f ? QT,}OCVW>N?#鉶tNGvxzK"xz+|{٦#c}P+,lQ6W[Tqw) fizv0+ʇ_׳@ϙs ؿ_kk $(5@k__IDOYkS_^ O{m}  _9 ]:ijP { >u zUi<)\CiQūY *ZMnU}iڄ&GnZo/U(nw"jHP^Dڏژ>Kz;v|h3Tq*%]\z_>KսZuNY~|l3E}WG}WS?= ßWMvzWMz+^Wuwp[ྕ@&.I@}V<0kIāq Zy`9܊$QW;zN5'gD-l (|?CS]p7YW<8yg9۞zSMz%/cV~`}q`QW>NiDO9bߟ]$urhw\Y+t-f"حnВ(LeIdDK2R (%zͭyD܊` ,TZRZN5i&u/Iք^= $<dO{%Z$p]TJl)iW/RSunouCUI8n.V Ao:utjDڰ79Ya5H]S?Zc'}&&4yӥ~ǫg/ *a. 4):TH:K$ ii"u[&r':_["xkeVժ/s_"8;$>]jB& l&^3v0վ4j;4meQ;M_|n v5-j_'s@ϋ@_Y4@7 kN Dx/y?50T-.+_nWړ2d*? _B'1 L'UW*Ճ*hmVB>]8f"X Sm\Nٗ믾GqԆnwF*.fUSl\FKc-|:SEێNQPRW~`ML+v4a\).'Z-V?60ώgGhSUZt_<,  3, \tk,j1xPfu-k(rEW=Ĭ SB"ZpG_ҠMie{Ik6/wHO`>M\ocI^4x_4+}+YƔv/V}oTVC _ne-zŕSv}pb-j;yEOh1ngU?![ƴwD0"xFET!gCS !gvO0na8D0"xQ`YAܪVò^^"U_F/tkD0,j샞|"bUK_077zwv-u9ϨXJ Kiٔ.WݟWxl6~5˭T`g՝K˥x`߿۪;(!*l>WUW6dR-߿Ow9_zW+^-/-W~jt$5\uFٕJi#j杯4Td뿻ANe68N~|ռ4UݱRl`;O&hgm)`QC,U.j=)uX{}) fy 'K3Hj>Vq[ YOU**UMa YZƶߖRl,_Pqs |&nX6~Rj) īZ׹;ӒF UfS0*'|^RˇstG\}F^J@ɀGŘ' \oZ,+p?M,#o90cTgtovWYG¦:PuGfl@;eË):Yx5\aM[iެ]l>j\.V@WY{ߔj6i9&ELsZ,Je,l5h 0ZYu~3|T6ի.U RuR8+,nrWQ&0w^ÍVS",@em]Uwr 0O}zG~KG) \J;{xł@9sY|e>pǶQ' =7L VD ư`DR-y_{F=LLC3t3dJ#|o3%Ѳhw&_g)GfdΞ`({e<玞U}$H[zM38O4AO }]VmsE`Bk:|宋(3xKi{Y]Hq,a񶁉2E&;kؐepՍF8w>OSE5e׊ s;霜fqW4qY>U;y^ POUfybK+ "=88c>/f]mi"HӤnV]?d"qo[Msz 7nj#vEgwzܝm2y7cMj|7wjB"az$6PRo=Y>S?sV2mcw6nkUIugQP8:nX)= ίK~H[>h~ !&nXSr<|0'-c&]xEZ<+ Dl򮿛oev^31z"u ӡ.༬tĿ/Q B0„Q񚛥m;>Wܡ,žG^uY}47NI,DġL2!1d戉 &L``[fdұ*XBsҴqKKw,{-M,}v4K A4-&ޏZl{rܝn\Lu nsyp86/ҍר}an~X0,W DpoHC[\eiVcaabOJ]^EhN]2buZU";=9<ɒ繛p.&`\HU;Fm\>< jJ|űv uÚ Κ%)cVd b4W";y5X"==y>/g/#ϧ[{cC.B;'(:lOzΓV&|ݒ}~_# 0O!C>Ձ+G,Dk&;`X2"+J&:rѨgL ,>m RlHw@6&jZvDJӣxs]n!V92ix!}] LG3az1`eA \"cOv=lzCpH̏:(1~e1R1-ygcY .:I)A:gmɈ(\H<]7w$+8&P7? =i"/5\&>j[X?U"jj$"/-MX5?g,o9S/f}> ks΄.ϡyo"WYG,/-f"py-m 6Dwu=L:\6p4խ9'm`w!G? auΩs^a1.N=:!0y{&E=X|Dx|hj<[M|ÜFL,`"F~8 gY|&t}Kj\=W`Ou b2l x~[&bYDoO%^-X^ԸT}PORPDaXR',΍k϶ r۵e-/^.[C: Mܹ:>Zuk` v򱹝AEqHLNnljg,aD=3t;S1lx8xs,&W;j7K*g 3ѡ6Wdam4\Z Q0MvP/7[X=fPx͒aK4->KR6l1Yd%fZ[hXe=c۷Kr)Ň8KI,7``A=k:w^xQsѦFYIpphÖR&$\39s=^OMl Ks{WY3PrboWmMj#=bF퐝Y:FVz|Z0q0,KޯgύW&/[tu5O+nYlo?ANAmIBT^:CbMّ[*֓[{ݩ5HsA<]j*zLv]+eaPEJݿI[R4j&6v.tՙ~)/&ZI#!kb kyVhNw:,dBҜJҧwh V[}"knITFO_i+MVeIZl{y.n] 9E;[W\ E7Y2!;5MZeJOޒ&( {; ,rlԁfH yv rz'xAOP `-\{s3?D}v} +TX N Jw>Zso"Uwɮ6r*ijل͕V[eUne$U kUҵA0]e:&ߕv]k᮳kvM&=%XaTҭi{N{-%+' .rvp&yw2-,ab^GɐSM ;CP2pag2\DDlx6Vl?^-?gVe/Kj1۳Yyw35[e\usX*칱cZk;OWfZU۠}DB\B{H s&pysń堅s%-oW>hDDDQT'82vŮZ5jAb@6!~ݮ˝L"x9n]eRIul=Q P20a]371Y0\aB%|}׬}[;-vbj228l}eMFv 6mϞK}EB?&@t?*8XopWs=*sQN,LJ(|c[.0}ZU -$.ܒx[% 69џ+Ah5eOԧ^.= z8 svJMBz ˅ snE "tsw21`<-v|*^Wxy[L+FRʵS!=eˡ]/TRFO-M["~"Lv"A":ES=Kx>8_Dx<rkԸd;~XVx`1007>o]&W9L0]2?nkfqs,/-00,r S¹Ҹ1[[[{.D0QW cy\xކ-J*6 KVV#VKfWq toj<'|B`"kWVVӽ"A"3qGi {{6|Kx>{-"Gm^BمU'pU-Al]4!1rұ9O{@p1y΄/Y`w&8ykypS?ﵝi{HkGL([yTr-Q_ݔ:f0Wx,-DtYsqu+᳷ .w8fEpUܝáYD;LI"MtX.W&uo&Lp0?YT6Ǹ )p4_m\T`^iBe=H{ =v P~Mq<螑p@Azg]h;ZKPFq{&c uVR)K[*[l#]Vov__752lfmu-lK ΈxN\`X31;B{Fϙ9b<'o-^"a"vr^ B˕R|ӛj~'X;<"]}͗?c~y juO|]w]{~+[.Zy.'}՚t]˷~w^[/~ԯ)"`E [v&3PMO;cD̊`M`ee%WҶ׿@OO>DƏݵO.z,(0mE̳PRhSg-ݕBe"7>dDU<"؎7Հ-`^w#i}[,^ϥ48x',WohL`ǷعvO ЁNl֝đCjޯh/Sˊ('?,Ew.ܜP]m]}ǫ_]k^Ys|]Ȱ'cߛnDz7E"xOK{/F̠.Wg(. ϾlDp"XC?T[оLO9}|9tu_4Dp&7x@~T-jfPн14TJ$,a~MF"fP-q?p>kh^Sd?^4"h9NV6i@RE(̕VETNmcOp<CT\KD_2|5"`D/gltW¸²#_KʲP|L~ڿ HC=%`OkE?remf+:.X*ZJk|5uEO.OL D[s|3o/]{Sr?Qk鞖+<7ChK իS0["XJ XM8jI>T4Y7<%{FsQÒR>"xE[5Е%_CX\DpTwk "mJϷD /D0"xi`C gEyOWc=?<%Om<ؓ+wu_-_]'_ůuU^GVro#c<~mQY=-}_ ??5ħ.2"\qw?TOԮ0%%j%7}dM鉶8\+׮XMJ |uMtWrO{?[F~v=K_7KixUo  ͷ~ ~$eٝV8~m7.UC5Qy˲i)%vFn5𦟭񱿪C BAR ȩ;{[be)PH>S-EiVG\DK #7/Yv>RxEq?D>?3Mӡ=.eu~[?XFwo՝XKjrYf)^gm%Y gEB ^ޡwn`Y5*\r:+i&~7}Z6-CxE",+R+ˬS+jOp V"X9CTغ?_b  ENTe²JdJ*з}թ` W-Oupe-UXbU=+]_O[|p~L^h4"`p.BZ$`DpNY fNۅ Z'-V:ܚ@VK9O帷w>[?~bC@`"C q`%"jo4T{dFv\cjF L+8UZq$iD0x?v]N۾qiE- UKH?ؓ'^z{^WO~_cuӏ>w]sg5²^V.?rS˛cCmHҥߧba~_f/x++lx~WJ ߽v/"`1`; L aQ ǻ{r{nyUo]ؕ8|ڏM>pD+豛+~x aOK_>S,y[5-qp]韩 ܷ}Zoݼ!+N iێ% EDiZ M?Y,kn#)q_vS,ߢx|jݿSкyˡp%p5 lYVO'rh%(s!VbX"Rs+,.n`'5yOpt2dNV[ 72hYwq]o|CJ E_Z \vV+,'[?􅚘c@EfÝ`* ]7K"j(ލD0R~kn%KuYu` heX{}_ah>ǃ|鲮uZ~`+-uEZK9oO}È`%&uD_a]pUXVW VuC/}n&W}?EdKK$q}\?,ET+]Kl":JRo- Pvѯt{\5Hڷ+JH^-(K[ ~h`vȕgYW˟~Բ:GvMq{JDb[]bZŸkv!ndunjX"wo-U^LuJE8B q`D0 !f=8{k EˁWe'RuC,eN@}̡t,U ,U(XLR@ `D0" @" @ `D0" `D0" @ `D0 `D0" @ `@ `r6Wݮ[IQ"wwŃ~wջopGy2UW1wA 0Ksm+GG*8{d̡̫ mVBAm]ՍCYnn;nV] g$shQ:Pp]f`N@\~[l l>o 2{L-#={`:dc˄=% ;KX$\uvo2Q RXf t5m4TPW-+z,v}KB~wx&-v}<5{y;=V&&u[oPAH7LT}-_a1KE}w|2g@HFk_ykL\eipb]]Ϲg6?2zl&'{Xѕ"ʬyo.ϴ2A6fL|>`]\&t2q]"ݢm\SY8JDű?(CA(Cޘ n#WCxBzZT` ]π OXtx.Z\ u4&Jɛy +لiEˡ{,nɾRRn:dq3  i+:\ښ_y3B6G7g>^g&"x"-gB8 ^lW F90KpIv~,QhE"ҭc^Gj"A;zT_^|nuC}}h(o]kw4Pnq{+[+to w"[Wjܿ^VggoM\z&c.ɠ|9PC{f5QS}|,ab-"xu6p6\ gR}&&9:fx,^սt]~= KDn뿺mp鯌 tק ~cj|E)o 2q?5Z(k'l|:x{Au<՗H:m"aCv?`H{]TrS f uqξ(Xc`~WݹP.NQx9i8hes:xl< `>SPEys=s?Haw~ao+v_+kY;IgpXt>XQ2huжφ#+ocaBdm@2ݗ:ZgeIY6u m/&3WY[[~z-wVz` Q% WE͆R5Ӹ>D& }&_WϬj{>0P'^Py޻ja\n9xm|M?g SY} ݕow5,=j~7E W˃tM`兖7P N2Zz[9Q Οj"VuMKĴ{W?ޗ|S}.+k]Ȗ}"WZ<.Wʵ|+"dHP_pMSb-[S,Q(),_}WxGYtK8+ ntOU{u`w}cz+ pb`UG?8.+ND0"im=~oYlemG˟˟zXq̴NX͏"NWbRrNWj%%t_u:p+_Vh?  $u,~(U:+ V"XekYEx&E[IuDDi|,_J ]yS*iwǯk Wq)JW.\`"C q`@#q`@`"*=ݷ T~3⑟޻*[o_ysͿޮ~owtk*^rw۟Wy oS}I-eWҬ0lͮo`JEPp}ӳ;e:l(lB}Yzw [ ?Kjg~7G'ZPԄk+szY͒-:h-ԫ 篽ft93Oܼʏ>KwY.>v-9n8^uRZl@% 0^u]v}[0A!Wniq:CoVWՂ#g][RO=!-;,Lw̜au3:{(]o 8HZm`0omX(MDp1KSOB>+u+PwچD6!L oV7u k=V*HXHcW2;τs7Zc ђu8kCo (ueeL+SVR%8kH]sds!ݺrdXۆOUͯyr t}"x"Xˆ5 T]RdYl]F'\"__[K%d9 n.xT+]2hYyVX ׯhok " d.f ])#6x1659$@rgga\ 6A s .v>.ۀ ^=o,-3 Re oΧ[獡vܵ,E7G6f`mrdtXǂ:j4 ]hDR>z.lOZؠ|ÕY="x?`iUpq+>+ZL u̮6,۬~/[omDh۬F-k]woQ ;L []wraz, 'XVuƀ}?_pik[C;X*B оbkAL6kG +_O87N MYWXi=hC1dB_~!M2{6L R(j%f76E,!,)1-Zr, /I"7Yˡ}l{E΅:" `뇚nXArwA&DڀjDB0mb|MX ˡfyN_#bl,՗ad^[><kK=i<Ƽtj}53dJP'C4q.8U"=$:i<«h,;Sݚ;dva[w;խ&\`Egjeu)KYK|+ݡ Xv8V˞r~'C]ɏxւgJh %"쬰~ >=v?CmlAq9? #}od)kˣ%LSݪgh6+֎և2@w*%Z2,%IOвu߫᷾_BSe0\"X{9%ApؗaǴ?YY $w`- 2l$'ӭ& W39V((LFSݲzVX&q=qYF%mi'=fe; DDe~"gm+kk{wYf֬OZmR]|"<q`xvBoWbDL`> _YJu:8KRVGI(L뚖;K*|T3,?+p< Zi۵kYNn~ĶJ'VzZ^T槲ΖNn`<[ @YmM6R&4&5AȸS%"Xw:z.5Z}s{,ࡢe=L72v,l>nDڐsW0-}MK9c| ^:tdQVgiPp x.b ny\L8h^로"cOů&*J[ 3r~;f2á KDl^)WrKT?\Iym7Wxmpo 簉!.{+E"x0D֐3^Oh_^CM\j$0%2] WGW֖9%κϯ{F͝ei _gH{.9_(gDsa<b({IwjʎT_8]/:+M!SIgBtP{蝂&-y;ezSסV3=;<{;ooP+f e; ?"x*"xNHW  &)]?)ZKɡYYS _Xm{K4TB"g<;PxI-(JYE,Qe:jChUZW!M,a@8D0KiDBx\UN!|Su_/'+ qO9.\u{z K- Gҍh)6׽[Ts|9Uf{`á~[4L]dghNI>FYY\iF)~j.@Z˝Ki̝P@ @[+HzG~ s̐o%/{Պ6/j)aE=թ&u&{j;}%OH7^gts]Z;p^<+s79;۬Tf NSnufkP7fy^0;haEꒁa㸥a"5Ph ,VW g}]ڐCr!9Z+Xt^WY/#vߘ-ᷢTz]߷h pvt8-V.oݿ+ݺ"o.PWXveyiDk0W9\m$Lm&Trhg?. 1LާόP 0_T9 5>o60 Ipapw ΛXi6`*"ww4 A.%Z ueGpS}YbKӠ}.}O 1bŐF{ ˣO>yq] ͡~,yq,, ^ÖVG; ϣ>oW,B>G ӭJxj}7a y0!3fo~3^eJSl@~NѲ6>s0lQsܑ,ήԸ|`Lv7dB#.D=JDh.vdbr 5Qp8}HHc35\>x-Α cOStZ yNF/ݐVdm`ǩ&&B:Wqybcq 3Jo BˣHog;YVןQplS DMX7dmOxݺ@ʷXcm%>c go #6X?de#[t!;΄T/wV'>[q<%cM! v(-ሕԸԹUۑ~ے]0u|{'ߩ3D` av!-Gm [V5c*"ؗz.y, ZVQ v(/.CR鰅 6S"xcE mDɹ B'-T`ӗJM凗rl&S}jv|&fRd͊oko3%"8>_'-c Ѣv;R>ث%SksR }Ɋ{V6Oy[ "Du[}}Mfmg4m-/ &VdEFB_w$_=~Do?9Ըg%OJ.|?e T &<>[1՗"Totz65 ]"/ҳ;~?S0))-|rL_ `X>€b iݞyzrG,T_J{غs)隦h.H I)#T F] V <~'8 AEdV!fbhk( Gc)V2d1HVp3Dw45~UT}{{ttι94;k ԹZMS=NYDf?f羗O7c+s$QoIԣ)(+9ceƁd)^ܺ!@m5͸aMt=jn:`?Q/-.$wǴg߄ɛ?ȋcq.S[04ڲ\b߆^>-Y}ziK4=/١s#rk _w}\?Uydh^-ۊktۡGxW |D NDFci}Ӈt!B!O~_T y@ד+w[\1Ͼ<tv]'oݴ?I"$x?.!'z3hHrї0/ṈS":S\f9 `B!B!BE0!B!:E[yp:#(-I vC+OyKKnΓU!B]3ۖFyi%lL z|uoY9|tP(D5Ŀ 7Cg,ʕ-)9ႯB!P8R!2 'j8tjz}}vbpψlLrsȮE{muHnʼnDve#" , pjDejϸ:PiYmu购#AHĈܜ{[H7nD𑗏Mdcj1@Yޢ' y7PIB!Pv$O;a0$j'`'0!Fc-#K=, O=D2 I4$67ޑpϧ""T:zaxGehgW%Anp=s; $Nu#.uX cuIL5#̇YsʢvnI4aK[41"8;k>V%SB!Ɋ`nD>!hpX3lEaV89aqgCba!vsjoہDY0!urwqҝ=^PlC\w }V97H߯Dæ눧6 TuMB۞Sg@YLzeiWF}BbQ9Mˢ)]au|h%eKG Xun:5NQ.]hn>CDW!B!䑐h ˘5!}h^Pr% Uɽnκ< !By^Kwj!!b"s^J1yB}H|;B!-[K9'z;)B!c5=Ee=zK?{gQ|{w~O~2v&&-[΃o]J#oY:ny孂r[;VLs.眽-S~blwu_ïyhS:Əa>3ѹc=gw=㦆ecMB"o{T7k7b׊`cEC3)7{q82BmGaHBr֤.crhg*⳽Iù2oٳٴ")|Lr'm|אrL#a ˁ8sH4FL1uy[@\%cƳ{A)l0mP_# 8F;a)xz .z#x~=F #>B<𯄗Pء^7+Mca<#<wNw\1p3=ڨ督Әk{(ow?2&g|kqL{? kBE0!]#{}[h|Q c4rY͡BCkߤ5270Ec57>1bC)s!4M# "5`oʹO4ēH{hF#E;^ܮ6Wqs_$a9yr>:` , sثLT߇lud~ Q8|8,:,ꠗ.+5G#kMA"lil]7o{y[A^ۨ?,#얗EyΦp);yŊ`&^1qM ʠ~lnw |ȿ>4^Ƴ3";g6=X/Oߖy1]A=6>b !".U|%<,׿O{Kh\_ uONqh`m!{BϥiBe $hiX{5PDgè9gmPF:yn:m>K#1}v1m1cY#z`P}>"D=yUخg kU>h Oi|QOz5=/x^B"x{2'LbDp i<HxAc;g9ΙCx*g}=r \11ϲ>COuXyBy8 ɡ'-ywN k.X@#ϒµC4< QY4O$C51=vy^g57?ּoIԻ/Z3ZNJ`[/@5n6+#$mZ@4yC"n~m=6+c$՘t66n΋`W-wQ'}|#Ix޸fȧHۺ)Gy 43{7<{9?oy\e+"̾E]9 W߇ xE_k !c|O?_E@WM#lrGлV4р͡Qw QυOGy&Q DY#MvL~D@,ۖhDC<7Xޘ}h߮'linLjI^$h螠 um*Ȗ`,o'(].Ghl/>:M>L0iI[0 }zt AQ9"Xk"vo`kKwOV[*N/py9Dp,! DsQO{`%KuhsgI}hP׹!/M]A}^N{y =~ OmUyGxxz#$r督g<3fKwOD2"XiT9wD=;C!<(ɣdKA9}crs.k, Wղ&J>c=0FzU9i94 ե>B|ۏ{B6i#֒CuK W˟=7?ߣk>_$if=? QɻcPڅ@:ǽlvOC8{dW1im+2͛4@ƌou1&@]VCwއnӹ`)`Q^:ߥbT KA60ـB(yP'/Ĥ.rW^G"6eBAL!B!<(2EqyB!u~|}{_[yY[._]oPE?'qǕn_W,Cr;;+ch19?,kl3qGۤcQ~\{3m]~.^*}徇Φohy>o%qi> ! jE0/+!-$V-=ܶ[įcGnF"(7ȵn ww݂}9 MʨG]e<ڴ瑷s^٭qLy`lj{V۷.f1cy{q]Jw/Hq"xx@}X@؞`o}^>^w_4u2R^C|/iعH@'PS?DW|Gzۿl;/NҵMLTqUhBLHEUWύ 5ِ htK'&<Z#x]ڛ3SNj,$0SD6gaDs9my#ame>@؂DIð EU(FMZl(CZnA#{m l d rт\IDATx47u5|݈#RPsv 6dƞ އ똉\nZl}f[zϧC*?r9aZ?b`>sHfs;,Svi7B`Ôy\ W'xvRq6%{OY&\Hkiv:2@: z7yv4F֏&IӘBLXE|un`z{t=okϹ^a'v)+ _ 8K/!8p8IabY4mZʀ"X{TM#;aK|J&ސhjĔz1nDDR]f~w8s_ggVnXM=sǂm#m:߿jʖpx;=^̬D Y(k:a8|Y@4|J̹)\}$ٔ5:Nz~:C#?ލGeK1SҬYB`'P4wIoEv=&,g_Eg=AcӊUaq9ϽKA64b[H=F 9 w)ќDmP KEf>D:-HBďBnӌ=z:3Sk[TmCLĉlao{EcʶClX0%怟H46N=DpճZ +F}ZSﹰuU7 @:U?\5{ǡD=~'F_*DQXe`n$K D3%}tN(t=.@!׾?'8kpy^#>>0V/\Fcb`^i} BLE[CPVp_}7B;;#?C_?w}Ή\`5N{@CNZ6#}/|Qy %9s21A4cTOĈvVIET|eMÅ.UǛycAƳYئb$h+It2D[rtzH^zMm ,2}bg(a|8u5SW@y}{)<JXIsj}fԮ@}a6o{/+x%Sw%nyAOnq%sƮ#òwAϻ1奙 R]h^Ѡ6?g+eWkllؙ|˷Pfr=mPg'x뿝u fp^"GM]i?kېwK?&&F^8QzyݰV'P|sԵo}wv~G46~㝯(_`Wonq+']/N z:[˅sT${ܹOQ8IBL^VzeKW{Hn3yX\]TGG,Ubv5?:u=7,EHޟu}`hׂ]s j{?ө?-&B!"?osu?\Y:Ɖ}pܵ'/|1`[rZ꾿wտ7B!bzDok':(n`wχKm 0?vb17&]&/ nޣ[T|xuPƊ/t&kW|[X/잖7kN]0'] v-[7& yCD|G>r[;DO|3׽ fR`w;~:>tuߝӏ쏮b""1&nێ%k!^׸kyʘP&mq# B9_9x${^nnk=.xgd't񇴡XVm6n^凄B >kaN8nxzNp>Jhߑ/WvpWǡ>&N 6\2t{)4h\H:A) wMsCsAY _ lӅ%~Q+c4\nːIę~Cx&12bL165v=l"x e>&(sb^Eoӯl"`Ƨ (-wR$Myml>2;,HCW &^"  w=RZ_eH{ ^b|6π/8Zè3<&s?M 6#ҽR(zqS:YM;{Q''JyvӺ_D~ <z{'LIxo sQ9[ ^0״wm>G0E0!ok܍ND_'p7iaOsuCߝ_y1E0E0y\Gh<)wh1_q$zu@Ұ Q+khh1\ȃ{މmAgF/OǪDASl8|q='Ѱ`mXri`9PD> cHG9/"Nkܻ'O!ue >0 y^8 S6UO}bݼ'qDəyF55:6)S3q?#QWmφy{r i>P~Q-03ss"M&O`:@]{jg^XrAGiy =ı ["tlBs9YVyFy9(Ƽ-Bg+2 *[ξﶽE0!ok1֍n/ݢYnasXswז~yp/JuQ&khH*Kv/9'hpq"xkxADk.7P/|(<Ҳ? {+mB5abˤ؉hkw~V3%sBOo!"GɳH4||"0Dbd#vR[NCw5ϊaLlxU«#}zC"X{\! 5%0pA9O{"n9.єyW={"xѳ^G>!;O^6vNr6&uëiI4=+~",#*;~PsE0!ov՝9߽:[,Kw ㋻ܾ|'5ΏQ& [E#;#0ʕD(KhNt$Ms s,׍xBDDpy^E$O /=by_hɒl:Lyb陱)g%CmX!COo+ʦhoc5)Ep?%ڮC][q'ǍmGlvNols0V߭J4'XOq&ѼRE2o6~&gy"?CDunt,7skw|3&/;<4NթS\o7ԏ G:~khy9c&-Ɖ`Ms:'X?2OvZy>$AHeQ0QCO}w'7>4n$w h7OW:?>GL39Oh0MY{9sh%%g*=1Z \KOWMIj^}g{4(99 :Cea[{KS˟^ 0ھh[}۲tr}KL6LB~;e!P~OZ~I|'_Z!đ1vUXʠc$ \Sg~7:3S/-+J23ƝLq*zu=;'f9۵B>gLy,>奈G6^{k@y"Ǿ{ Oעzyi ^/OãC);v7zo˝O|w~Fv?nt"؅u_v{_k.ޯ|u..E0!]Ot&!N~Co}ݷ}{_ퟺuvºor84!B!""~E:Չ۟+0n;Dl/AkNAѡ]x') !B!*PhN ޸]sa~_lw-ﯲo;?f{U.pbz)-VouꞅnE[wC  C;ѻݜb7uС{S'ێ-Rvᷤm /jKF5#ؒ;v':4WO՘/[KyL:I~A^+!Y|G>maT}>Ep[w!N:VVkøbƉ^"؉evYo λc&O˶9I4]o L!58뺷;]Fwaҽ͌ΏP2:oER&''e"#UWLvqy0]pQ. ϓ1N!DѬtZD=Swy)#_۸VL\q{[T1\D`OA=g[hsݫAjSEhooS6i'N[҅?%EՈy& #ycB#N:-T enUfº\ϽD/ӟnxun-ĥsh7c2E0yD8qpʭk䯠A| s4]A|&8A@8>Ƶ BzCDpaNM><{~O ^ĿkM!,=A|Lv?z 1_Duc,Ay֍ [/Ɲ|ho^gv{ws:qFmeؤNږF0[;} 0{(/E0!D}'?O=v9u]sЮ'ݣ;ıpaoML)A?F6 (A8T!Ĭeτ-OK "XE!WQ9ij{T;kD"KCYTȌ@"Ҩ| #\7[Pn-&ZTئjHq [=5#ڦn:M\=|\WeDjD_"§=`iv;0;c!vq)[ 7k^95iuM @\*760{6/u"G"Xqb9S OD-Z>Dpy}.QO|ڳg~{,Fk/xzW{}osy,oJ>dEp= ="By"}*E0' P)!4A&WX=72 KM!ܖDkګ-NHk6gD֘ߊD=e:v)'5DC*U %7:q`ѡؽD1r-"=û`4uS쩽#3+%# lkuC~eFl .5s r+ :{94ODa70DL!PS7%ztc^CC} BPѰI^0mpI_x.bASusSu^' 4t^r !ߥ+Ns$;"رL{ejI4hK'r(%\gEp i ͍(%GǨ3Fs׍ƛ}QF?vh!|2qQgȃZ}y.ќ"]BBcnxLLȽ H :8s>#Ʀ zҽmtL:C1WbƝ1p-{JڣlJI4T˒8si鞋+DBr-KJͶ3=~ǝ[VnI/|{{ǕbV?P{?cCoBQh:+yy^K=?u1㫑ByD"m?(ծʋ1aUJ+ȾEmKq |ƤSWE㎥M:71/7$B!"" uhG|>#ٶlhA$c)"_ =3Q[8 Z޿B&B!Ї>'/ w|+9gB!B!<t$/ϝ̀^ǜdT0WLg~2ѣݐ`tL{@wĞ[Wŗ|nw!Byq_@swT/.ztK~~tܼ voDŽ;HGs+d37g~O^ͼsOi;B!2ܢ1S0盞HlD-xSh;2c ҝv„ ظ X\]|ȢcU rs2켈ծׇq]˦P6vH \gFܶ޴>&Lz HhlSDp q՟B!p=QD[ѐ=nQH>G=ֆ ]7\.@mdp{q@-Sa@8] J%P " inqm=pnGk gsD~ij mz@*53ԍH#5Ľ <7"ǧPG㰱eJnZ<&[45$Z꫆i țy#Җ!ZwŔw~b/iwvuXwĽѶ7q~i y"cs+jjmFz&B! q#0:vMHa7W48MDG`m tZpNAHOoqiO lPDju#4~țs=އxY@_"&tŝ (CmLy!~AZ6=Fl F=| ĝ4LR>mWq"x2ҙƗDKB/gYElڈlԌߨ8T_- oTl1"뛞uDe7s֐ICy/޶ة+ň}!dB!rX!CL]*[X0 yw6xixGѼvn#4SNň6rZDhBȸhsνܫ6ouS|6d9~=|*bT7K4~ϊt.mۖtt}Kڱ)k>F<[eky>dҬx%}n͞g;gWGG޽<߂`]9c< &B!0ϋۊi`\5VB!^cz*"V[9 zKFХa@{Sr'x Ol.L%~bP{O$zY1o7vJ4wPp)#tC-|j<?(?t˦l!#_mb{է4/3}|ʕ{(EμsMHi^hn^߅0m?9C' Pz!%l ۊ<\G ;7>uo sC':=m#  AaOH/#B!#F^&-2؞Z6%'k~a+^t95'[0}I70#O%1H{K1eN! /#f@_Ҟ|E;m}@Nx/A@2Gv~oɫl=+YS6-_+&Y 0 s\^ҁg`|׳={S+z&PwC@!Bȣ)s7>|gc|iWc^x6+USuBiˈ0%B!R\V%p<\1~fcz6K1J$B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!hy_zŏA!B!&/y# bB!B!oPB!By\+?^-W¶|#mGAL!B!qÉ}}F:>ފTZ{(c8:WQs+W^] WG;ּ*wt(g(ڀsq/ܱZ׃r:|HۖlкW1I]AjD&PWE_M}ӺûeB!!Ea +7~3{~7;9#Lӈ:wqO AQmŒ:J\|8*(g(.'L q2P߹M_q Y }rqz҃W1l(w\]G>CϢW y4n.w!Bc^PO>߻k^|u^O8a=su졑5{'y7+$q\߇WxYlmyqB~QIs~L3j>ځ~Ǖ"xӄ2yoBn{gޮEW<{3FcWձ#Q+Esw} Q_Ʀs=> G/ j)O(E#ձf _Cvqx>V=+H |96 PL+"n<Vx=L*TQ l[;&;MΫÖxv(K!k-nXȊ-0)Ϭm_!B~8yӇ3϶l8r Csl@2 4hV{4z} hR˱h4%s~ˈ)#GN|:{@C߻H{Up kh)C\Hs }Aask UF{.r?T|'Vc8U ”[aU3PS,WG>lzB؈eR1C~vy4VE!Dp/]; 'UNawy  7"ݽ`Ep 54ikр"xya(2@ L#]{fYs9y|g&N05|Xi4ktháwh!̸I+FTq7=Kw ^"xߜOq]{9*^}<%ȧ܇  Dw YF_h:*j&^"xA{%k׵ Z;z >U4q!g<[L(yԥk+ݽj?^\6 9mrǿ/$<\^G@e,B!g[p f|~ :pZv#*iOV/U'1kY;q"X{W%ꅿN5/p%[ҽYޤ?:5wY9-݋|d'9O;oSB! Ĕ/CW%a)APQ-pGm@H{`ț7"U#V 1"XE0{D <016 ise^&qל ÙY1IBvKA PN<'Lrs]794v 2=DÒ :4;7c|g"x6/ L51{"cyD봅c W5EN#o{4͇=_׍`6b68zU}ͩMCPHKsC"(ϜB!_{f.u[hAT$K g])ksH]t&5V`HˡDmz1gMԆV\5\EycGEi0Us~K4\S`}!ݽb2=7&p PwkFLۦyB5SJ86& cKxl},Ç[#+^:Qa5Bu+ƶuoh[{okg3΄J1ׁ{u&^F݆hƔ,ô%PW֕//Ahw5P})t.| I{u K49T~)5SmB!BZ{ zpm4O^S\Osoohάddž`Eyې"a塆' ӯ8]B!BL^W' 1{My(@L$2cGH}"XzL^T7Ly~qOyx1a^| B!\M1yCls:W!B!B!B!B!p+V{ ]Ex2.>qSR{(Ϫpfݯ7yEO}^ ZV7}󘟗ׇ MB!GC^B?oZObjCyb35bD{5ǥ:@ttbuT?B!%r ս1pZ>vT[Qs=8nX"[ 6x'M%єh_OgםHFwiH^c;gʳxZ݇@'=ʦt|mr^C7uq! =.P,lŕF`c$G/8By)"m}\[@~\<=YԯkCy"l.?Ȋ%wr:5z=K7$mD16q }Ych|x}N^i"{^.O=?"vOf_6)*ʳmʳ):=KkJH͘w21CXhEr.ʽ"B=y4s8hѨtҦa[Am4(KSSno"6fOѠn tg F]w %Y4bj3稯z\{N`C2mD𪄇V`#3 46mɈg-z@Xвl|j%S1>Z>1ea` ce[tOxʚ6m7|lj9mD*옄?0 3:m!}xJawkiO`N!2bFg %s~ Ċ FD=#u4shعkٜ?AfFpá&olŒ>TZAYmK^q"8T6ۨ_4b4 :VX6Cw# |l{c$ˈsͳ'TbD7'ݔyaE˸n:SGgB"P[WM\Ÿ&*bac TkC˱D= @~TY["Mӷ=WL=ռ U{W|= c#S~9IǦHuj?\"xB{7j=O6[B=wԎD=u1 B!As^ϊF@4 + hi.18ܣ<$ݽDpňDpIO ~ٖF}g" vkAVluߋG͵ݛ=+ EpT 4F,yF ai0%a,x (֏)IO4E"X@]۲捰C:k.A9v{jcÄȓ?ND#kju4s %B!=(q,QO1ҩB` a8B\t mO x l_kn8.yifHkO^إFh){q9s8FtѤC%ƚ7q%`ՎM!D]ֆRtٓh!Kb6m]9Grs 8WJ6ʳ㟫/kF?jP_U!?"sbʖ)2A:{}F&+{QwFQø"=I!FԨ2B!G멹plg^kPR+|s'B!B!B!B!B!B!By۰ކY}-@u.b[eڭ~'Ō[!mɲr-LNw$~q8_9 .۬ݑZА]lm6(!_ÄB!eq Ou4BU^p TL.H!u"=.]/۷TWJF#,"_!|bUĽ1i=Yl^نޡD !".[A|k("'s:"sVEZϲ+ݣtqY(eu,J혉[3vy^UH\+(/=1]h%SPYtpGH'~MJz.{ODrWukTF]B̵ǂԭ ?"}r>*0eg>`l[G`B!B5e4Ws[FPT$YjF">Sh&=A\M#l 2=C#/:{wkGE_y!Sc;̓6=,[< i!MOI^gMs8 ߵ̢G{aUc9} 912Oin oEpϓ~8B\I|jΈ5\# cȳ$~'Lu0ӦAA!B594|hP`ګ4+Qocaǽt`b/Fp '4?lȖ|*4&N*FPٲB0xx>Ҟ޶Q<[5q=saZ:X= &!C(2|&(Vmzu>L$v*9_iڡ@rs֙;=m P&:*cNHwnJmԎ 6@cSyO4 ;Ț5wizWgrsp_u !BȠЀ@C4G%}GX;#$G$Zgb."xBb'*>MD@P%=[֡VZˋ܋+9}\`MbDl}IH0-Dp1 !vǍQh=oZh|"8kuи!Ĺ%#Msڑ*) !B}9|*J-2 ݋Ѭ%78u}ze^[hxp ۻ*T I+DC\9w"/|Рzi ӸWeP ."U6u0ՁHbYz[SՁumBvaUX uX_k;.Ci~Ίz8թD{|4|Q1[1!ΤIk l#Vnz: uѫC(ۅwaʁ4g%+G|mtNL**H4׿Sg|X2!B!^IAc{-5cCeyx<#zBq/ܡD!v]nUl7u[~k V-nlZ㳫/gHݽ\m]ųxwB!/k_!:'x\mghX;8_@ģ"x aC\&h]K#;ڀ4b{4yS=CQU~`#[dEeCwkKԓ˷?CyʈhwvR4v{O:+ְD2z;8tP#+1{==cO>3>!cĬ) @T76.¿:,!:Dw'FD%'x(N /'!2{%P5ZFgp=Mɘiol8bl4u`a~De gT#0 f"B!~QY4Iz5($!\UFc+; 4x8#VӦ᧍,[ÈXm0X0tpS*QVq&im2"Tn@ K@P&Iԕrn9Շ bC ϼp1"؊}Ku1ǒ7vT/DmEIay|<Hm!篟>R@}/×*1"xYm+K8~f$hڍVh      U@@@@@AA@@V*00(ժ+Vլ99_iәOj^{{ 9 !@O}=b6q}T[?wmZu4EעɅ3!ڈkKܢ| ?,!}3*DZ;|nOQ$ 7GP (7U6aP@y&q$Bp(5J!:A($/#ᩡh6Nbs.Or;tݦ 1!x0an(̗?cwo)Kl}&m/ kQnhfCvN[ӆ NTMo!Sd{j! ۡ5:q6 mqLgWWFîjl%WliCpCS%=YpT {z'7_1rXS[7_tQ_/~K#&ٶON3Lv;k |[EC-ҵoOHrL';F`vV"T]]էܱæYBI\:.ڭE!; ;uM< l~?.5zb?m/dJ]'=.R6]j{nFi_lj㨌/Iԗqq.d }DH;WsNsa= m!Xk!Nn_v{:u]-jSEqp}\_wNi}FF3/- ߈/+n쿓K;)F߂0/\]Ԃ_plɮdeW>/Kv89d2FHv>쮔sJp9^ .˟L/Oum+$6Ჯeiw+49 -3nxjsڌ۟l;_XHyq]xcjZEe3\vg,o3UQYc&h㹃6~)76\.l8pK_`M2nby5\ 5\ ԆVl{Aׅ )?.sjw+i6 Sj|e'z.heT[xs:ArߓKYN@3 ' kwvg3UQzasm|ɱָyd vAtnMs}n{y $MW4)[q˺n4y3Y+XMIH_*Ing§Z,0U8eMZȎ Yod~Gۯ+̕{MrBdm]yiDk;Wߟ)o$2{mk[k+ۦTw}PqҶWח>ޮ5:7 Ys%[{5aeHo3^GC[wAۊiXe~oލBSsf[cbI ׷>/ VyWT?]L﵂ϱzCWu }H}}>6kC O7_ 0zPb>g7heY?4y݄Ҟ;VysP|m >zV6BJ&fZlqL׾lzCᆫ[*{!:d(tmi|Vz+q..vRq]۲wDŽPT mnEQ~in Y].Gk~V[ j}F-k̼P{ߨnզ0N4R'|{n\2П;N캶1gEng.'lԟnW^uu}onoDŽS Կ6v!c'޹ |!G$ X}gY9/.u<.G!5 5`cM[nM.w4%B&쫚rvx]FᰣEȟ+[`$O=_z o\V]> B;[RN`7[!>ZpsP`kOuL'E/>XWYt_M_kuG DKj=}vX~\o;ܾ|Z?lD'V\>VKmWC+gUuq,oǷij埢ϋS4$!xƍ c>uNϞчؠ[-:Uf|J0]힛!So~rHf6lRkWxo ]y;Sjڋ~ښv<b:cBp7TB3M>Su.+U C&\ #mA}e/jeח+*O'!}Bd?WkGntҷcڰ_Ϸ 1jzQ;,Y`ʮ1!w6cI"xY?ā2JiӅT{,$Gx\DjM/vkMBmaHgUϨM}q_[; QR=!8\IYMl?b -pV9Mt+}G!MrW+~{&x1ܾBMX5=q;!;,߇ϰ'W Bp9pۇ;Q;U^ȟi,}ġ/P?uY;޿[Kgy-h/]an5!୨Og />yUB~5n)1*E2ܽ g Fkn?pqv cBp)䷊1Ɲ0M/UV"U4ocޮg?{ݻD>=>{V)v<s}@:+W: .n&5M04q;+ibi: ge:T 8Py:.i; v&WPk=+m۞N]iy +Mt.`t.DŽrWnɇ?uZ{rޟmo%Beȟ嵫j(wֵ5[gZ`2mqz\gWq`^fuo[:%BiOmxTIu_Ӹcĝ$roL֗) 5#Bː?ڝ[:#kS\`=_Oj\||߆ߌg[*_? :ٶWG%ܾŶ߿Y׿ףo%yYRo{AA/.SKחuKZ~gjp/kE5RQ}^s5eC#U赲 ^Qyv/誩PDϫlMR/oÆ]w$._=>h,_#C)*v(g%#|spWr,>>]ۆ>cMYtnjoG!VF8:W\_ Vs㰑8qWumv2DXcwޝ+6CƷM~5 |B%l(ov;Y#v߯&{a]%(o+ܾC(4[NIENDB`grpc-1.30.2/doc/images/grpc-cq.png000066400000000000000000001212731370425124100166110ustar00rootroot00000000000000PNG  IHDRp4IDATxe}9PMW2`vTYEUQl)J)$fEVIhpdMKӲ;=vcX&Dv،IhN t@u&阦;}ݾo>S{s<wG׷c󞣽;'w;6}6{񕏩mt(kU'c~ϼauԛX:F^{|}<^AAI֒k)鼔ۨukRيyo~VLgڞK$߹(Q@}Okz: C>S=_߫NWOTg|t2D o/lصPZ<͝4Xv{%qvxN?g ,bBtz;Hq_tJx} qu!I+H}S5ꍐ#2*"\T=Kƛ\S7~ʿ{׽{TT,e)u tϗb_-؆AәY΁uQmCs]wQ4%ޟYد6V:Vxc8yWwT="iǐY>8q-~5e&7k;_oTڎVQx_~mێ"`&3[Τ:7zn)sz].̏7!ٺ/K7#CRhKQQx')}.[T(ҸMƳTkH쓬m7:m9Sͷ"yE"\@1JS}/cSZoYk{:I5WV ~cェbqK;FڶfeG/Ni2܁aui:GWHCzhi%ps!~M](=9]zoz&QE6Sٳ{g-sĿY-e_m;mfgᵎ7Og{ρs;Em`*>w^ ԆEQfǪ "ca#*8,Ɲ'hwK>zߜY1h'KkNG$yru, F:>9rEL!kk2imLzi95օfvԒG: U/m M}0DDX-g?W"%A;ʨgif;\4:,8Ӝ;N-5TRD cr-K Yϗ"U*%ͣsugB!&>R~"w~On;Hk:]T5QH#::bRvٱ`Rq6&۳쬰4rW^F]U,9j;c 6z6 1>@{;s "˞R}1vZEඡ۸!JCy5e-G!tҰ` *&-P[ !D%Bu_!Ar}6Z4n):T'LH)ږ)2oNl ~+&T(]13o9yo.,;muQ>&JQ6NٶTQs "mOiѢ>Y p;uiO9|Wv_l7>ߨkX;͚X^ITۜʗ)Jp+|3Ց1YmDڷju}VkOԔg인v>/ܲLrR@%ؗMM'϶Mxլws-<{{zՊzTҜʪ"T6lV^+ o,mCH[gZ t(e-e\lX&Kz0>>rCCuL Kb碖1头N^Ox'2QZҦ:%|R } C3Y8z e~^*ƹ~XҨw,ɓ)<^3I0j&e؃(\*S򱼧Ҝ{MȧuY,MԌڰe}lijM2].3$H-˻4$L.6BkJXb&Q6'zWb<~EA}IqtϗZoE}yijmΏV۫zNB_l׏eS=ǖ.u[=zsf뭵}OwtU{5خA[/wHiN?_J!=nElY괢虴YEWɗT-M"J<_VУGB,$՞KoMպi?miZގ [ŭ\KڶmTmh-im9ybdY?[;8/QY啬eFbo~)9H/R9{%Ҧu ?`=Қ>T.yYTJ͌DL96ED\FI"ۨSov m{:f:HXɶH-t RH uJY=ڸӺSvu|FO6T촯 ՜ z:"RBfT6w\lm,G#<ӱ;jz.5nul;{y.mX^EruL+鱅󱹹n3Lmz: ÊD&!H b"ׯ^ B͖K\.Db XH.eʢYC%ǺQi֦#o88~FAufZ$}wO)ڬӕ/k]>Oj朤y6+;N3W7_>aR/h}7rO0,%rɒ-%foΓ#=\g)۹3ˈJs⭼EuٺXW_)8Լ]l6:y׸b6;Fn<[#iMW3To.Ja^.g 8^m׏'ݏȲT;ItӒD^j<7s덧H ZФK>kqK1.ShfNM΢d$l):{&6)'hEԏjѡ%f6,҅,Kmu:KgoyJmT!{JZw,cѮcy2M!㩋s6Xqnc1g-{YLpYXXC]ɮ{%>IT}$ ˗ ,J-gZ9װj@f\̶,9by$E5-2C*mϤKK8i9avڶaG ;\ E"7kQV&G'7Wʹ6U67!Ei{lNjv[SulNnk-=g{D;nIv(G|辰 liKpBm[)S ;'=yg昐 Q2J>p>ql[)zfVD~J;kj^Z 7'=\ͿoU`> .' SҞO<9iG7SG߇|_J&Je%~/-S/w٧zմLy{$gSYJnZUѲf}5`jG?IkԢg,i,-Dk277fL-> rGi jZ^x1E 5`j]u5`I|ɓGi jlФAϟx`Z-<-SOչi jmA॓'O>DKT3B>S5`IxôL5KpyGmo{B\]y?c?c?yvpַtsܧP(W_N8]]Gya@Y ;?/$B_`]]~o=@‡)~sOga$ P|W~ t|b]_O$ PS*y$ P'N? @).o>=QW$ PhF}H0LL9K tϿ?!H02姿/?=S_$ P|SK~`M?zS?m{cV_m._{ا|W~~fFn ϝ^'iCl'>]-/Z]%W#ǟ |߰!7|t>H#}~y{T{! L@$?8&~YY"|-|o&_zsߎ k7ӟ_G_Fn O.@o6K+n>/|ի^ӟ3S)"_!'?'?{ $O[Mr5xd(2'OES۶!*ǿwc1to)ܾҴj?=}&`7ާKD/޿w6P:U;5z"eN~T&{b?mW=۶бǵre*k`TtڦQׄ=Ju]G6hS~5Lk}>J`u{o2AVʴdZ5=7}K1I;,ʬzZo^iڏum,˶+IҾIoqȢ^GC<޿?~WqNQN h~oKh8> +W]KYUquxhM3/wM$`%8dJz5tD$2L%qəD\Kj$)xJ"Bzɦ.4ISV4TS4y5%Xb%e!ЪGD#+Rx+?RՖAp5,W")R V۪u3ohmR0Jmyj?YV|]kF].־zz~sH05HJn#:|\ROm¥TqEkM)2 5E-L-Pw%=*ʎqc#@®T#?sH0 1&8"AI>Gm^ ..R5=Lj*ʻfunmvq R vj+hqmk֨cTԶܿKS̕>;IUuh||~巐`AUbRrqcUCGI"%emF)"it:kQO"ѮeODѨHp徒̃f$8uJ4%XׇW׎ڮk\k'mr,$66I4SB3*ݹm^[ }-!qm)x1+j|\}z]]G (ns6>Ζ\~JrqDۏkQ$:16G:Icx[ZzSk?I`k`IF&t@1EQ%:1)f|,.EE"u$X$i)Q3嚹Qr|&HnJUDT%]kU/os6쫕H LƱiߑ\+ghDRK=^ ' }Ԇq<ѱcYrz_8`Tļ9Ӷ:n.z똛|5GȿO~j}O/r $8G#,P=K9-ezI/# 樵l5&Tcbux]XL6Tu.WxhJp9{qDߵXX2+WO}`MKI$qz"{zˈILoٕ*JДHțuRm{zާc[lraw,٤(akUoEUE/v!:I΃JuVnmz^~fgfQUWWǴSۖIQStqziq=lkUEU?]GqKI$ P|#D` e˧>g`$B= 3?羊 ~o H02e/: S(_NW t/|w}O@` eٯV< ~#D` e˧>'~ @)/_ ԗ3L* S(_>O? gr @)//H0LLwJX`$B[th$ P̗~ @)/ZIK$!H02g?#H02M`$BThD#H02CD3_ |öL S(S_^|B _$ P|W'}Mq!H0(~&zj!F` eJӠ'OO#H0ZNIŗ@$ >ßBMT ^}YFn7 >7ʮ*}gC?C7d>]7]`[,qS?s]WTi9J ϧ~ |%vE:Mܧo1 H0O#H0#H0d!H0 #H0 H0#H0#H0#H0#?|K^: ʱyϭj]iv~}n>wWݟ! FǏ`y7UH|jVI׫ԷcItW۞{WH:H@`#7$c51BHu$uU,m' (:>;c;at=>=go=$ F9~$ Q^u#u/׬R^%tOTgj]mu>]uHnT- Lyl:jϽ=VٱΣQ$ F9~$Z$X25IDooIҔ$0~N$6D0=R-alJ~$xZzȨ_Yжz?~;o}YGd]B2tk{]h>t:;q|C;o{m]ݍHu:o H0rH5(fYJo]E>mc[%&gBr i~%mH Z{13\$3JRVWJ+q%^='NBձ뱼cxM%=Tb}.KbI|ua=rD=d}Ve#?|6'DMiMrCRϩ9EE7JhGOXdRRt)E#=R }8ym+ yvWv:ϔhmS-E;zcW13E=iG<%|#"H0rH5 mZh9!V9n$8InF47Hr5譐hoS.$ F9~$zHLu)Y1V7zm<~5//itNQL$v676+"Icz\L\;-*3N{4`Mu9"UErzҨ={1ߟd㤇T:vTzb:}Y3o7~mZt9E1` #YH0o2"i'ZIp{iS>YK9ܹzkvܶoK>hKkɮPՅrg[)Қm z΅Ⱥ`YkG:ﭞ˩}&SKzXyu:oG3od[Ӡ͔i$ F9~$!kFp%6U17΂\N)¥ص먰Glo-;fޱuaa[k2I'@`$GoTI*y+Sv:óUUYVD95m+>s_/ܯ#H ǏT|"JQy☤qJQQmk)}~@-ʧH0|[JWJ? %Xrku_Jy7??#O);}v?%$`/I\)eo th$olRſ/}`I1kgZ n >o~cL0̘yW~5}n^߰aXkIn̶KKAʻ͝Iǘk|k %nTc>kz ~wѭ%`/|eб^}hJuQV=+?vWZ߻`yIp|Dش`csz.@yo۶zwZaH-jwVnuCV{@_eG3w]?/֏}}?f}ncz^H["IQDKi%X`7o#7'E-osjg~O چt1it2gJ9Xʄ+?"^}ϰ$tOZo6ҽQ^7HǧHEXUG$ڗގ3m/o:<LFzd&/o:Zg~]}J.Ω-ڮG)Bv~F@G|fvFe[vT~}=k&;xޓ?9`wO q$Ke_k:ٳv6. N_$v-=thYMxbTU=nu/Euze$Y<.ž| .T?}[zC%V}o569k?>ajCt_,:8_,ۖڬ询J6IR*g3 {ئK39Y?x{ߏ~L1 yk=󷏍YC$ϟx5KpMnՃq1ܑ|9߳YLҽGqSL톼;ae5G/Cn0.=KEOES:\ʠu#΋B>$lŜ0z_N}Mm4DOVD$im|lR&́گnY:nF#to,C,XS{Bkåb;KjFv1t !U;jvny/M/;}tO=fF;ݓ~u եep(i螽hF0mIޡrF{KҘΛ_">wurg|-X] .S#ֹc`XKwqЙ0y/޶ 6܈ekf>N@*S9Z[j?k7Ses4{_?Ex%_Ko^1=ʈ1|%,ʸ)??#w }^_}k C,HFӅHyRFL*Y SݳoRVY.="iK2XYX5{+EfYsi $IF"b>q\59+"!u@7KߓmNֱՆdC2Kσqv.< `ܬ 6w^s0A$σ+u0Hk7#=_#Zֱ%ztk_ml؈fty2R=frWs-91*zpl+A9n\ 6#rh'[QՃN!Ο"RIQ`.j:wz=5`˯?}cj/1ȖchoXm"=>sc7 qYur=oZ{d?՝QzޣMes zW_~{+~fzqg$ oخϳ$Hfr*T䄿w97߈זּԈnZ=0IN?P3ۥc.$2l(W{32[ci̲V J%q/j53ӚE q\E;aC~A `Ly|ѦG ĜN{7[v: 9r^Kڲw^\#oâ#c;G11l̂A~[oDNG\OK VK9"[ay}N}o;mۮWv:LC#dΈᡌy#}ˎm+9 d9Gzݻ58hղ6nO=M߶{Ƀ /㖛T}t#4=7w"q(G7vbLFі{ VhnU}^3{1'y"5j:=\Ű|)\.ms43ŝj.|,Z5{ixh5:mP\w1qp5Ԝ*om`.9F۔A>>(:YY L67"bɿW 6# qsndq;1<]tiY_#UE8h'r|ݣZf>:A8U~'<沽?q[mxxbӻ^6͋\j-}6Sٶ#/͉Y"ό0侜ʓ=j@kGUwhfcQ' ']Ȅ6)6GXݣrHDxc׸Ea1Tl6$ڎh)Kihj}MsgQ#ͷ+ctF2:eИ&3`<\Fّ]P XXsF<=jhg[6ǥZ(Q(;s\>m}4C>:jCi;9淵슶ɼG$ϢIrFfnJpw_9H7lF?}x= Ң#r3ǭy?S$B̸\?h$"i< SMŶu?70șq3pXROmXrzTC#6z>}C̗RkcGW|ad_ +&:PTlߟm|)GxIJg=b9)VV>q#If3֌|/MRV7ɮN; &*2|2qk;{'˹Num=:US6>3ƺseto\c54 7.+8ֳ[ce: } '*R-&vF;Rtѵf*zY=?)X zx\*H?Zq٣ՇtF^ޗe>mfARpڌmZTZ?}RjcA*RAzVa*#"016o_w F`$5ޑ}]nĘg<"|7#HQo@9=:{tq%'(ڕObK4ˍrWO}ҨoTø{,Y.}m2W>s%\ P]Cydi=Kz4[~YP9eO=|춥6kkcnD]`$ F':4_,#6:DV!W.y `S׈7* F`$FH0u9պ-p'‛.xdW#H0 o`|["X;xҙ0Frm}9+a@`$ F`H{+#ց[(iuiYfֿVtOsZ}Y1IB[r:m=ޫ.v']X<lIzs~v&]M^lBjT]J4FV[!&j1o{^5ѱ$Y~TGk$!)ϯJK6}u@ĺڈsh:U CH}No_[QSț~iPuGN:q p0JUianK"\ga եf|QA U?^?͝ {^RwkIu^V-ũ]B>&B" iNҫ̇$}qFχ*¬R%;[p?o[mMm,\=w3S?)PnO} HfI-(B,)3q_ 8,[oɕGjlh&_ND-E9g4k^"iO?O[VBThL l!S;E m_Ewu@=5|3vbR,$VHpnwK9w?c/zq|s7JH#:.gf c2ڿ:TAtys9ژXUɧ"Rl$vvs4sq ݻy-FaYYvCg a}erudbN2Y_u|snA[ 8b! ej  + *~<wy eJ5ޞTMK$LUҒ[Ҩ-R٫N2@Kpz];ΜcdY"K."y­,h[Z;HNR!5鐄L.vsը1   %Hnf\̓n1 Z^jRB)va$~YmZl(nW"'yz)CwmhlfÔٔ'rWN쫭{<ʽ]ݫNt,.c9E[ud̴奔:ܘLP`$B H0BA`    #  S($ P(H0LP`$B H0BA`    @)  S(H0 S(H0LP`$B H0BAn-OA+@qW` )~Ƨg:w iPlLuXoe[^} f_ԣsLfg2[_y;/{}7u_@)$`Jx[^[%:W±^u)=6ҳ6fUZs^xuK'錸B$/7#u{wv{\x͞y7^_D#  ؝6nߒ3eLg:Odާ$(xEL; !ΣzN2bHۘ$ʦ>ݫNxmGdXHʼOw?[ӸR;uXf/S\jWڮE߿tq>ky#7ދ#  ywW/dw -M:y$'G{KY`-:6ꨊ^OI@N%@zydpY nJMgDGdVBzaHvJ6qM1Ԧ6.&. v$kJ]cdPe׹EI;!FJyNj$WլcFIj{gAl^eVǡ}j::s:hҐIS]~65RǮͼK3 tҹk1H0L&qȏ"Y^]\hXHp{,IfC9:WFB'm(O*IeN^_Q cnCC"D!K"^!c&>E=Y)qet8(<:Ri%EV.6=)=Sך#gL[դ[( ICsT{o $BAIIteE(]"RfƢIL,G*:FwH9R-Eu)Qڧ&7D-"z-ۘZGݵm_%==\!˥ 6ӁM{ݗutR2Q59)-_jl?;%mr*=JUR'%w-Wۏyo^ubwNG)  c'%8$D^ȩ9k&=ݻ.lcTǾ Dfڗpvk,GNE۸jVuif`[SJ}L:g33H٤XuJohOBQJEI'dTskBא0O^L ɏ Oաm|93m+RU8c=!OU=2iԎyr1m#aDX6r>+50ЬI$B H0#!ǟ3P(W~"#5Vnc 2G9ȷ@$cpmf1KFe5וemv{_ 67=3y*VWs>RT;=8k0,ŠSn#_-n0va^6^dG6ݸ:t7g2I=8]vL'5gC7}~74vI2E뻾덴}lIUQQVpɼmr=\tOIlƬ$$ 5ҫ:S-IRbZ}rXgX>nk[K*ژRWmV"2:,iۓQTL=TǴ>׺=heoۮ^xu&]NIm;.Z3^^W"3Q]e4T[kjt~sE>Gvkkv]w}cΓ$ٷ{1ֆnף^:/Q;䙱_i[I^,Q$#} .ZNG#IoH $YMr^JL!EK(K$!ڮu=K=Cj^kLSݓpF}st|&cz߸v iג$iy]_IS]V-ypCBx1˗9uQ!QN#IpNs^Z::3`沽7<,Iv 6t%q q<}E{usz]юb4kwݥ:W<>k,wtj.R%Av.t] +Kַ"-{[PA U$IPaU{ EEP%irrJWlJ\LӶ#gBDJIҙ%M v:ff} G *7R}YԴ:"e`[s2EAI qL#m%Z+#=5ԷnsLiKnKWxw;!R37 ۳A;neXo;v KH|]w9a|cHBG!%49?\Z<]#r${dS["6UH6#}.duJx .YnT{HRgnOKQۆpE>gr5y"RMS~ʹe $)^(8T<iO>6XI.c:[=S현=`k;is"${{jDȑQ^9*_m /_weGPHZۉ"OJ4ybkf/,*ѳb,벉K>K1zT9 CFJ=r\ؐ  JTBF&6MMqi[Q8&nGqKsE׋w(gM_W2[h.ցaQ[S}q\zwu_Gq};T:̩󪛏7^_] s 4RBhسx vR%NF`"hG(Xd8?v*"dFOD$#D<:KK^l^r|& q3~<hL+ #$_B05J&%1ФDtַP*^^q]yGi%^غꕶ4Kt|"ʋw/֦J=j+:yO.v̱DnÆy>9z{6'VB-WX^δy Qd7ܴWRYMe kv G>y񎿛9&NlțD/Vb5mo{̖#<Ǽ>ՙS{f_kJE/U$"eG"u|5E?{'uyIuǂl=ݷ?Թm簈IXufz_`֢s.k :'<.iQKOkSz8_c8g~VVPQ>8ux#su)h|gq3>+14t~$ngZH㐐H7oRvBCo+CzܣH-r!:i!7)y?.Ǔo7'"k{nkRmE'fr|rcz/s7`}բ䢎ަali-g͹R!;M$ 1F9n"ӛϴK q>V7G]N7GMTףPD_"M ~. U6g lJ" 躖Q|N:Y8[d Jmg`[t4Բx<uov ˤEl=ew.eGK}[T;]Sul"e~nՑ>&UMm;JdqBY?})yugS:u3tͻ01(zo>oSlZh} NHcoh;xZrmrԈ)YLx44ot8Qnٍy^.m;ToA$M#ʩJ )!ZGdG^'a)2c祐Rtrd/G[#e9ͳ9(YQN;ˍ~c_OuHzҶk[g` ^.SV f)tL1ˎoYϕdk8u=h^}-6V8cE\ؗuXNzǩ(O׺LX%!͉}\r3:ВkQJ 2beQ&Hn`u,)6gm)Yz,b 44.7mJWuY:Z IIږn}JSqMɘ%5FS{}<8dh07҄m9RwsKac_l2 gJQDiUpn8<՚los1+OTN,ny#1p+-ɛ}&^5YT].e;dMvLl=hM޶1zj*'gmSQ'1E u"Fy Grt8x帮MS(-(>gƒGX/:n1 9dcǤ pc#B=wjpyScF݈\f8f<;O{q3)RbYϼ[͖i <#;)mfC~F+txN3>KcGhN1 ^UhTblLu]ikQJL&Z;xxR%\Yώk'h&9?_ޝ;8Woƈy͜nׯV::!8|զ1~McT;(y1B/p pkGMNΗ-Kճ_sPE/'TQ@mmySmc}0k0<rn@.JeG aD:-3bbMs-@n ۖ:zɭZR 6>$<=#i% >Z`*H|Vi\Jg'l__b\톯{gϞuvoA}wh rm۫>wk[v\<-孶U)]H58SwwߑDk#$h!*>[O< __rIoJ| ܕ0,O ֹecq>Ge{Fnںr{?/CZL_V`TK޾;tFu-n+Z)eTJt\O$*U7gaz\QRHt_R^kϥ4eMr `6{hcEBeyRn#7]wJg:Fku&,CJz}[%ZD}MFȨ:5;MڶmJ\SlʎTeNm)Ύƚ's^}~jHu19k'Υ~>ΑD5jFp9j =,^C~εګs^WyqFb_:˶IsvlQuW:G,Z:za[z5 1FD [7FY=$s#d^1WvQ]]TL*zg|E_m37IlC8O ږ7J8֫.E "cơ}RH"e/u]U {!"PmF>KNv\T}%C!{p!&vc"ikt죄"'$^o{m]t:mkke?K.dH)ږG>DlD$CXy}(o۞Lu4ov;XmLuJҎ+VbX{׫ WkQ|Mκ>m[}u˶s` iO染5n<2>Fsd3ե܌%<ә\_!oߥݣz]K|-s9\yCy8[Tw5ڪlU'_cuy]SCsos\ݮYԝ)kZ[R.:r;k~?m 65{fJ4p=qq[nvc>F#JZ*{=|Y)6](K7E6ҢVKIoo 僨Ґ4&n\>E6Vu2mpL()KێSb[;.BԢ#TTnׅbypꪧ>Xv, I{>Ugb{1, j=ZtH&}ۏġ63d_9n=_Gpfp:&ꎢdלeD[[)!EZ|мruJsNusպ{1V2}Ɂ]oSц5Tn7z&SxҰ,CUOФթnrs0qCܺ2?:bΙlZ}{ɻդryv n9|6ڋŽi앿:3̙0*d"8m'w]mUBڃ_xcLD O^Hj܊oP ԋr܏thA _;}\Pc܉S4襼@l’jAw E=qZ+ewlus,bLXn^ L5y,ETs6k_ꖿ7Rm7+yvkVV-dJʤ#QycM랉dڸ[n䔓uz-oȯC,);cD኿6IvͱVOD Jx:e}nB&gz d0oײ-m Z[ 6mri#QIo-k]m]^5iM(WsEɉ,S kZ7 %YOcX[dN9*דwA̝.s{Dy؇ 0wcw1+4|K묏ZUg.h˵2^Ys6G9+/6E8+R.U 7rln^t(^KݚJ?0ߓ8(oYZ{qgle#XpcoA@P^w]O֫lk=s^38W&JԂPDvc"k٣dDo+݋ïWBf}W[XQRٍHHηkK~۪ZG]`E'uY z[Dng]d9|rLh|".{Zs"''Ԧ)jJe*·xQ "\ L"!?r܊ t-aY<KikXc)`%uDFkAȈ+H1p!]MgyhQ@H+]M1jbBm k_+$222*|# 7"*1чnym# :h:,iu!Ӌ)dI2+=:e崉f{ 7=qRv6؋B7/1AĬ*ۺ<+GA]A}XQ+S0B4oڻ<(e6.Cj^[+qH&H>%=Ip-x4BN ru"D"=k"xuׇh#Go["٤˶朵&HϢv7e߯8_n 5qN]md;.D0~f,`@H$D0"DB  $"L"`'?޿݃Gzw`D0& &SGr9xW\8K#g[Ҭu_ &!I`D0I/;R7f'_~y^]~͊?PM"vIDATa,͚{m縀s_sBK"D˪5F< kEΣsEkfzY^Mv~8|iWJB_~,I瞨^h֖+!ߜM/~7ET߮0=z6M IO$0tDN(1) ] Z$%ӗg'> "$B wim9K=k_l0zmhu4KdUOerI?`묬 9o|-kUQu:o9{nkUrY KOPu9۶~~Q[>Uy޾KO_n'_P^v*0kFʫGmCͯܫW掬k"5|&L걧co[ʜZ??1>W;K[ͻO=hKMp;χ_ + $"%&$*F_+Aen0|s^h6xVHgb|//%ЄlrOB]<[QTyke5+ϒV>P=||)//렲Nr_H9~T70e0}+Eխ9y_Br{੭tjOOikwKo6Rx.c@L"j}>X^ў#dYW[: (K֖fZ[~m~6F\ZYKG ^>oWLDY6iQvo240yW(74k]޵®o{渰coNpLeyu!cVjt'2^4&\\N.G%@!+q>x [ՏyNLbxs<2om9KYIOEU"?A5tv9}6ެ jWW@1&KgNay274¬qQ[Sp}cR}FNTc^]<kD0~Z"xQki}M[8Zq֨sQʿž>7TimNABhO=I@eYkZwvq¡we=\z_W]Ugm'i Y]sk}W՝!YU nFu]}y,UFZZ{maɪYwDzOc z[ wN~{0rӋ)"ph[dB]z=rNXN*s-+&vmz?̳x]mzY>Q\X$zt+1=j3Inbe׳Migz$驋`wv+ixpGݡ^xeŬ,_7aWߢb3)nT0S-,@ȹ҃~ ?;le[JMB-:!kýgs+][KA/n;t7Q0> ZX#s/bwZ뉋&@b`K]{ɯ3OI;5|'L9Yupy&=b [ֲ+ Zp?I7~L>~U~.zb^TE;snCqrՂ1uVtw̢BrYv,0nݎQZs[^xϭi'Z+]:y,R E9ӣ Zϳ[ fMt3|gv+y~-ij y}0?ϵձk>#6~JZaݍ5ҋդMb8'rVbXRۼ7C1mvHSG/ӰZpWEGg 3,Vp1Q I$'c Zh*Vׂ4w2qX9o£CX ؊iG@4,n;ʷv'nU%tlW&m{ĩPwV b\YFf=@^ms+-ePkdznΓSl7SN Xǻm׹|sEpZun"C޴Ze$W:fWL;FiXoϭn;V{q^V.*;q1sHuq`7OsqʾTo&vɂ9_H6pk s ߚ|͂AmZЮk='nX@H৶Opᵈ+ضas5Q Gz`wg 5}XU6,fQB5]B5y+^MXNWK @6QY X{H|Trk7R/[zU !Wbw:R?Hч-H[6>jM<q]kX!,׿Zv\\[Gج[&|`nnk΅t/Ήέyzq^c#1"D"}l"iakQe`>"=03+]`>WkZ;YGns@H$D0"D"!$  &<[L>=W[¶9L">"8=Җ9n!.~`EpXvO" l9_5lzɺN_ܗw]WDR:]Zh^\|yia1*3 I$DGD-70м-祅[?щf]{ǚH-"VVa#gm/Ys '_,ߖ积uwEIZ/4_/8V^{'>`"xNim-b-BV,ڊلnKrEdY~_B]fMNt5W$vxPwP[L"P7w:Z鯻472~IoIкmV`.-˳ ʠuExuyC>"w~MHg/<Hˋu~t|Ik{8-iml9bx*@)υR|.^I$3(=HA/њ-U&f+볯՝@\ejKdKz_o$w|ʅ,$Ng?K…@i[~-<:OI. zSzS=OzbY칙eɍڣS|Y@ު|@,JֿEdg&zW VbIQy+o۲[t(2`]В봢NK8/LJwlsҙ (7gɽ^Zhn/=?}(/-L*_as/,͚:}۽6xgJn/N]5_J/|Plzwͬ:ԗ]pHmP~jt|=>丛=97NV.L[_Z> /EM޸6{n$Q֊ą#_h6v->YEĘ-vrsg/-g%W;n´9-G~2fמp=5)c"Os !YdžbRcO}cn^XU8Pc~2y9h̕'rtЫlr.k..v8T =C*~y礤yxI*]suϟF;c:$*,Wi_/o=p:l@酻\S.M5f5۬.WS5+ru*׭YfѾϚ~yĐs_fu#_]o' }E|b[u,sE.e5wM5YES!7R뺶j,~'\k8a kwq~p^M(b\ek]n;\37pcnW[G|\TSƏe<ĄȦ[XRƁMtz^VYE1Y4p7b]7sZXE*e]& osb6}"E&6۲}f_67y ) ^k7Z{//zwԝel6[by^3z}]3^GEx&ڃėaE4EF(NZjŵOHH-F.r'nԢW|9ʻ"=C}-$>"vf5f1}beakuyz7ūye=\x֫jѹP6vmv㷳Xh9aMc,C^Uu6WXzo؞u_6 }MFX-ʵE3t*k9GP\YL&ڻuLvJZ*ošY8] }9cFP꯱ZuY^m-;жn;-rj. Rz߻h04ҸiwD4_Ǣn4+ʭ<ȭ5綟`7gcbjo^Yl{wŲ[w3UtD hwmi%t"JokAtkΗhֿEbGdS9Ws>_Gձ,x.[WTwkm (rVG}[y{".Zc˛ա2DbD`c"f%nm~Gּzh;_ݔ}DVq] Z^}hگ[Ϭuwlnvnh~X{HndQ.oAzmfs\sȶ(*<iI'OlzMxx?,62FL<ڙQjGQ{w D]ןŃ}<+Cۆ `}^~ĺmC$ CW[G>E-&积V6 p, ʣ΋rro]OzfhJPj~W$YZ.ͦg.z3/6;׮Yo(v/4_< 漶v2k^fSuݼN{ Eչ]Y^_uW=_>n^[Y'TWgӗ籶Xmdݓ yo0}GS]]~_^]h+,Jrm3:s-/ΎlRH\Α,7-Ys=nlԶEڗf-e+TyauYh,͚S7Dxc<ܺ ϕ@/k\P;F>hk+W_|? RxL$JZaK tElIVq)MUߕ`or_&%~%M蚕/c|MkuFlDFP7ej}4:kt~s.cx^K9m)tQd52E|h󌮌22<Mm#;AJ-Nmh(ʬ.ˌ;jf;1½Ea"2Y׾ATyShG5`)n/(qF79w;͍N}+m.ܫs|eQ֌b'02I~f]6ڦj`+5okj nTYwP%+۬DϪ,vXfĪn\eFo5}V' lP^;׏;E`ĔϾD齚0[HҤ93tY&mgN/dfta,mɓҔ5UэHg03:qWh>sk}5ّ]fg-,w &l#f;"Mzȟ1Nyu,FyouX,sa"sF_ݔVL/$>W|\e2颟B}CNF˘ntV\5}RBe@/FoGL9,ZFyV"NY[ufz0˖+ܜf{ng?`),{,ܘƘUFڼH @UaGVi 5/inJ @!ck/G;oζ2@ų8Tq fyfQu9A趇 B5d`t󷔨\5P;2) Fy̍Y@ctm4I.@i0?971N3G0?cPwP] +BxA/(վmtdyb֧5t\C>s t>u6.O<M]Ҹ|:I iBb4xiNLBm ._+l0t@.li\ NW |0YRFwH\nb1 1 =12s̲s4X;FI3f_3F%cpL_1B[c XSj5(ѵi373gLN0ZLl0R}u>7dXVEc'9&^rk8̲,4iPPw^L2i<٘aՙDŽ2Q < 9d)iF:omhzEOtЏj~kn|GϾg~[I &sc\`7}~(K:<(ط̏[] nQT7f̏Y=sl8잿l7?I,ybR[Mz@`Swx&uy8J~C^W{<U9}w| -pAlcj5i}PQoYsOwgR}_ް"][?#2s?v7J2ќI&2u[{1Dϸu6Mk5%1@1{MDq\wY?|&&x'm*S8ZPӘɦ9hӶ>nkFk1/ԭ& /5a&j9ߔerB6izũf?ϠN& !Sr]LI&`tFפs.Mi>Τ䧷mn;6u.1ލ{]Nfc>Nc7p~0LTnoQ i!ḫf})}c?F<2/FS9&g!oݷ#ùà!sSyM7ft;b~aq7aykb_m@up!0,_߁^IK$#g#p2X:$}jIR#0HmRK32Hbۓ2S9` Tj֍_sm_%Mߥ a92nɽD.:5׭7i:voll4950ёeygWVsf49 EZ>Fԝ=3cMsޚ:[r dI?j wX)>cLı'"hg:]T`~5mK5e3;m^SY?ܘ Yq}qׇ1W(>FQ^u T/Kb޺O7 F~yY>b|y͎Z̏[htA[[c^@/Lj!\EǡT>oa&N oN~{?R"I/n{m[L*5 R}]ѵ;-Sf҉Ha!nܳ't'bR8dtmtٞm4Π>l 19fp7$pnb媏糍p5WֲV;'Ӛgyc9fh5gnFsuRi[Cg*{aX*EBQInΥzzu;O9Ɯjt>"L9gzhD ]Kq/D/M.F׏ZCF׋qNrҌ6ˎ:iƙ;_MV htmVsQNE^C4~sb-Cmѭ63xM%Z4Yf## t,I?~?ŞaJſ-u y۞=߉ǭFR~!tMs1A1I P$r페?10f&Nsg%I TRF褏ul;:[8,{_[%1/r5C?0T\nct+WQCAl1P]F(u;ni;ȉ... .qNԴ3c`|d24uaLf'\N3YԇGNto4^Ag:ٚ4Պ>|fct1=d+m易43Ims\0nƚ~2aLoTL?)_\&o&/mq Ș(FӜQGLLy3``';jYcNfY^w~ǘCs9E'4'=ao&۶n25xǵ)s1YKkZzI1rzϺׇȩA^u|#k"V*3?7nC\at}F't~O2'OmP) K_<%ϔ99sͯ&R}b l.F-?B=딣9G_TG9]Sexɴub;-6'S56uD隍Aۼ,֏9a 48f f7Qc۔K340Z45nN8fV401jӓ?~4MsQ1ucںˢ^9|d>l}4Ɣcq&NݹMo5zi[b7>]__.:͍Қ!a΁w]?o02R{[kߢڷ>xX;W&ԥ7SoN%v9*M:eƦ.73iB*}v c4qdR5}tٷǜuP¶m^hr㶐FwLIM˸ q6¼o_[ƚ;-?M3ڸ>E,sf4q(a"烘gC3is`6"h2 }\ ա Lu/qWHך&]n<@튢g۷Sgftvڈu]kۑFlG?^̵;Y>\cΙԥL*"4CRmpbt2CrkhFSJ$k1bb_8HQ#JP u]d W}3ז*<;!:Smk WЈ,YJhidhB XG>}_eL׳a;d qnw2TlwkϝZor6i8焺1R4xiu.FL~1s1q*L3:f?G[,Kft5?F8|I6Za2e2wѕ9&"m|FW9YHfE0՗7M({l~Ykl}'WЈ\GMp~+1?@fQ͕=s6O&5`zi?uhg lLEj2l /=ic+*P!Y]s˶7@AYJ5,K&PJP@[obg&LmF7ɬ&W[Fߐkt=L:0[]kqr?k6?JTj|hFNj]J F8Ch*5/nDgɘ>E4M\?)t:cԁAz훜jnˠPzLsӅ2$ t[ geR1P̓Z♲v)-5z8o..kr{^ȔYQqqXHʶ PRCo,HFuvhX.Qjp6ƫŌD7]t#fVfg+ f*m]j"|D&Í#mɝQK<#}ƌЌ,3<'eiΤe1:̀[ |j &QJ,MF6RC˕4Tqgטq-.1Sn\hýOcn]_~2-fʟF ~=oFcwYSh*N7}˜vTiHƚK[a<$w=Lo~Hot DMM2#@wiKN7?`t|8̃u*5jf@axVj~eZhZeT]9T TW\hߊP;uooPU=՗Vb~Mc*5"N5)UTjnSJQ|7?@Ţ7 [ ,"W'4Cz:P"n c.,W~#|iYJͣ&8z1l uTj P|B$o~,{LV\~~YJ )R@YJ/O:SP(@qYJ Q3{z2P0M6_rCf̘12._n\5L2&oHn%w-8|/| t]WXy`u̥ͧk7!+|JO|B^$ܓTCj-߰}pށ8e 1.)~ʙJ~7X*7 ԩS pA:-]@o6p}oIo՜o׮?.]mk˿ fMu\Iϸ-|[TɿaO+7ᷨÊԿ)&}8Ǖkc|x81O%kٸ3m$uӯǺ^-[~FJQߊ͏*^8!Կ g)S ΗlrQJ͏F< vdyY#4<]TeM5[B}upnjEQat1]Tpy&zc# Ȩش,FUZuŕAwH}p~+.?B(̏F0b}icOB}p~+.?B(8:TF ah$k#'LZ`+.K0@Aazkֽ&6`5cʔ`ĉY>cFM< -uZR`a/},#.`t+&vVϞ4?iFtSP+@8ٞR篥 ;jUkcڴip!ݪ}u=ǎ Xm''‡L֌nlo~[?ƍ9#Grwղp]\]lr~Kdpz[zWpd#.`tyX/\95Q&> zŦ$|7sfx{~˝dTMFy{vδiѽO3ᄑ߂R݇5Pp\~yL=#.`tk脧!2,w"WF>W_mo .:4Zハ\uUPT'h|ct3;2:??=?7{]pa0-o >_5D,"r!UY+{5ht >L}w\idrWyJWu[t#.`tkgҳ\9Z.sk^ַ*CDZ 74Qڅ9Kktu^ۍ{G"ߦՃ^c_|o󐌪;.kȮM)Z{+hnWR;0ѭqWjY*+_*Gnts&ZיCzWTF1[<$j5jko,w~w]yt_pK[lGˑ0zSA]?eʔ|ktW,Xл==M{"brEd*C]}uQWQfX}' gt_O~2Z.S}\y}=8kVԅ[nz4|FCG; w?I͝%? Ƥpos]|+d<{m[Q]}53̮ $XFiӢʑ0pܕ2EJOdW.[>IIpC<݈jmbr!բMZn>`Gfw>r;F}S4USOArQ5ڪ^b_o+[[<$Z2"ӾLyVgo-+?a0lt0>YꓫAJ$odl4w곝߮ r6tϵf5\]#:F4x^E{dj-w~Q5]M'{}Y[}3&Ji K/{YLϥA4_曟0B]7zxqdd"k!=,)_םnFWIWB3{#PSAhtNq}d5=V}z5f$[<$j62ޭعs^h5;{Dߥ|F P6^2*5aV$NUMse[ RZ TU8C2>5{/ ul޼^sf|F !A)[ CM]W u~˝d4Ѝ̭h1FNGzk:;M6v~{1%mƌ-U?@&[<$nt5v-\èօ!}#<]qEJFWMu]`ӧmA8IcyHFbt5({=)N65fy;F;|t ڮ*;3:C2omw \°= ^ "|`ty*T4GMi-9Kh)MUs/nj*-w~@4{G*9vm:4)w!.Fw5E_ ᡦ2yHF%`N64n|F A" }C7CM Wl{}!f0**Q=y*L2P:_~BI⡦yHF|3\#!̣ At#Ey-w~ufh'GJ0 D35?!.4kT|F ѭ؝?Q0TڱbEul}n|o9~So#.`tHmMu>|௮`ܰ0Fo~J_g˚0FJt3u9?ӂlkֽ;_K]t-#XoR|F |tw78̵]A;/#?B]袊'Rߊ̏άU/+K~j]z;M6E!P%^L!^.B!B]hÌY/.8!MlpheˏF0<{nRߊ̏^[qS\F]ۿ`ۍPߊ̏^G<\at /M6w׮?n>n>(g)ө oEGUW\x,u+?B<L:~ʔ)q!%7 BU#03B<]B!0E!PauW0]4p~Vd~Pn:3Az=b?j4M4^mQʢ<ԩ+[=o~эe˖3,_|ҥKkq0Jq[B]k}`/ =gݑ~Z&]Q:?G7X"/^l}z2Ož ˧/>>ճLu]P LPeru~ÿ[]L̜9s]mGNƏ:ˆ .B/,A:DdbɌ3=0oFum01x<=|T~\[ cULHnPeov]mueytQ!aƬ`ǢQߊ̏]k>hNZ67Gi`ǁce1+Y>hYRs]y'_ Zͮ9)tZkLq,ڎʹ`gU^mCe˥{;Ms闣2:sׯՏʩ(ڟt}`ϙm~ct կ7püNCer4CX.jmc1vꛚF곻-caIe1ǹ雛#/)na˗/nyrdRwʫx;"BUdd%y"2kP|IQfktwx'-s.FUW6ݽjuFi5o.oi&Z#Y7!MpWeQ'I͹U$.#h/AV~alӎUӖ{Ϟ#OuF&~k`=M٥ͻGWߞ\g o0o;(lh·:cL81ae5'v.26b9lokYh7eWtuc4e^/p;uw1B!TReEdNu2Vi*"7vL̃{"3g*wM5v(V:mSFV尦59}{WئF8L-5Zq_6hB#kUn֝WmmG^cZf+TS0"SE?m$N2N$u1t4CZélRV1jڷ521^5FsB2%nuNWwc v>0褺.B!jX>b}tsWf0%5_+F5U߮5nkFkj%;5N7HUWt}t _~Slղv]beE\uL3W9;ڎD=)^6׀ՋB]@ddWeQ`/MDc4Fw- *k41MMT.S\SFx#M].BJOh [Bk ul[͖eld\ɌMOKit۶(U^ta)+GBѕisf;B&t [iڡlq{MOԩvGTws6׀}`L{jQ.m/3oG9F7˾o{1ˈU}]ݑ1֘$ct%MbSwf~A0mڴvurҡOFB#ӽD WllY_6Z)"hG3nTRQO-S_T=,;r1+'m^j5+hӒ"v~ZkdHNTE@]>k*Յ "u $'#=SMMjSlY5AXs MWYnm[Zul},ږ:bug]5ӖU_h^O;?͡;c mTTf 4'KC0dcNO&ج}h(E0e&?L0ڨ1j6nכ FzbϪٱ/vXQsc>H8kq֝kMS싦D{\nyݺ3#=;:_~sB ɠ(7Ỏ"x2+~O?*3&]/9Fdee2,~Wf]f~ġ1>Ք92 jnS`Փ 4U=j^ ĽXȨuOhBeL"Ѫ#nۧ؍N˕AWy]# UѱկdktR@Wэ̮F6 <)}Zʹ=[!jD\O}mt1 JY'9{mG]6U6kGQLYN;֟{3ͳ7u}Q`tB!*d0r9_u֊0i"mԁN0}*-w~P~?M/Sޗ$)z3EӜxĚ9|O袪Ц o.8!Guk?qMnW~1dZo ֬[8DiZZҔheƙwt_4ζ_2SG^if$E'>]B]5Usa5uVuʧ6]8tIMNetu~y_#՝Ǧ#J2:?FRLf/o5 c G,[~΅  vm[ϱZGH۹nNiFGim+L]+v]PҪvy: 7ڷ"Ȧ^0e@hV[O)zѴcYo??]яWqʄI΃ߦwe6<'2?DYU̕ʳgl_MUͫm3>f5ٍʘi[=,4AT.TS~*gNwց=GM+WF3Tf>]L}M5m6(ji{4z$0PgL㼾'BwȮ77MdaF!7}D|oop*ƛ92X4Osο0oToߙѵFF7q82+vk[-UDQu ˴ٲ<>-1ղL#2LT[G[X.nlSG.l=ڈnw=/'T&g6U$oeէr6J FSedzyqq .SFm4SQLEOCب2&ugPO[#h݁b i[\e>H2Y4]Mg}(Wئeb7|fL`kֽv6FӦNBYi]kj\sndS&5NĚ|`MqeF&=++A2yqXвv]2eFwtǜUѕaGU-K&)_rE_*^2ho1ڇ5Ɯ)ʛU]\85MN0EkCm8':^la5SVLoo_ۤ9]yj@v+ !Piwd%˚(gh1222g$/sCde50ɯ-Ww(2mܫ^fu&ՅVэ1]5m,Iokt]/S\FW.Yf0u_ G!jN2]?m3a+ErO*ѵMWO][v %ëhF!LSn*̭/Ȯ&:&$rzRԻFWeRmQpi21[l6C۩q];b.`t1< !&č=}AWF׌nzkFK*J*&XiFUe5WV6etGZq誯s6}}饈;Hf] it͜u _펎6*UNY5\H|Rs L 7=N1F0]B+S$ݿredlEvF:MQtmٲQDEIYh~,#g L ]:NۯWGV$;lk pʴe2zaѐ3[TOږkQ(e2J]ճ-ʪ21YQYӨ}I>կEk]!xUy";VI3G}XMs3ghtPQUq4V5O @˘gιlc%:lM2ݭmyddQ1J͜9s]mGN"Bɮ|+s|T$7j2˝GӸ4fӿF}Ҿdd4}']7t6"-CM[X3,^uMyޝBַIF PQfsRyش5G#*LcGֳ؜9s]^sB.FMDymuM2N5Udw~ZLuߍ[f4Me7ԽxRyMq^s8f x7kѽ9,P0.F!ԭup_QySsGgR*.#TgP ."25]O0-[mŧׇ-GNf^{ecѱť[{3>04o :7MC]􎇃ٻ9FB0J 6hlaoL]iu?]/:vXtIF=>}5z t;V~hj"3*p]E%LwV2*̹dzt s&ۭfoK4qQL%L.F0h)]sV Z>U/G৷~2QWHdlo}<سjbb>&J'Ws#DR\]e92ѹ {<6ªv:T]FמCW9vf{,I͜ct_>SE]".*M2P'{}*aǕ1&ίGiT>Seլ\Oms\bAձiJ<[Lkϡ+ukDM_FD&}Fbt1hZklIDQ'-;ɲuaj2~_j`HgatH}_#~ܶ ;j=sg7毵Rbz B3f (/PntZ1k\㩴iԉWD]5+u=eT$5P&]8ٲmҬϊt?.݆Lb_zasOz;j7H&1ۼ2-#ݺ~S$Gyu,2:9yt00I;316"2 kgW_r]/O\=q?u*7\I&Ʀ^PQ:u4jޫeVqu݆Ѿͫ}۰ٲ@NRy:++s>Tچo\m_ily(:˵1F0*Xh LeMe{Gz*y|ɎmM}k5rkf֏:k,evUsf[+i\v4H~ʮyv Tv*і]usg?sj"\ڞ'Il:Xo}־5O}i|B\Lo:w8LEimv/ȺOۑѻgMkpWѲ{c+2dta>Vݧ2642q$۶eG=n~˨nݮMoFb9sНڎxF^Q>#TYëϣ#T9J矊Me"elSf.UՔDIRV5ٵsʪ2nScK,IMˌi}l9UO]Af2 Wٶj sGgr]StG3WFPSTS~5/SjG_VTmUͥ\=klї{"%#$k;6}(ucl[˥{ mZѤՌ9):Qo0]T6{⿊.B(7K?L] Tᅭt;2~4$S*cQe*̢; TL54\s)Si#2H~q08FPQ5,[~J2v;v[ne]<UY Oat0jnn@@W]O*o.,=rd?kn msoqSQFJnvE>EfOנeBeڭ{/=h.bt*iӦ͝ϯ۾Be ~o*.1ϵ~B5/+ɥryhj3fąΗlBg OLkg?I!F![]j?>zhB]"Pꩧ_ N)^|L�i#!0E/"5'F#8S7!.BՄdzy!0P(NZvyB!B]0̣B '!0EU&귫y5Z3uBws=E4;3S!P EzM5t+W8xY!0EՓ].ܺbH6B ]Pc{l/7D͐i!FB7FKS&B!@_[g69!hoX~еuB(yhj3fąΗlB .|WaB<]B!.F!B!.`tB4A}B E?dy4}zA!(#SN[yoϼ !r -kec/R?!0e2̣ByJQܓKWAy!FBի[>?qzA!l8{ڴicp!]JKM%F1!4"Pꗫ4m `B]"PUWadtm9+ ~<4"F0!TMex5-5wgn9yB ]Z6?qMhϵ^B Ϳ~lsBY'=^x;uB5(F](1/!Byt0!4 E\F!^2o?2=z#xS=kZۂUP!.B6j~={np+{F\ es頱)XbEMۃ;;<t<|p1E!.F!PAMn׫\vY/s{G_Z<=ܙw56FFwO{}6hhiGGn֠ei`e`}냶]1!=NZvyBH#7)2G>ommm4Ӓ6_5i rS~C] ?:!0UatG! ~%͏}"Ԫyr\'5}oί>j#}{`ͺol} y#B].B՚ͬ9E?Mo"8k%<]&v@5hPFD}qjy'_ >l8lxpOк~si7ll`'}'0$ϿڣRSM\}}>rC ]]B/,>&:)J݇5~ۊ{0=m+d9ui/"PK}r x(A1G"sк~Sd<n#HNKyHFW:TUvTo+~̷y!ThÍE].BU4/SZ4?`&j渊k2EU׾yUľi=5꿭eqMmӫ̱ׄʨz@M EmmH*Ҹr2+-2^.`tB&trĺRDMYDBی5FMedzdFԄZMդK6MzͪiYu45 mf 2֫5ktU:G*)*k7gkoGU>cEU-)5t\*۱~MKZ5Oevt-)zȬڏ5](!7~̆= P).7-͛+@as7M[UVX$2ljU~WYNi5dzWe#?3b{<6]ֵz6eeLeĨe7 Pa4Q)U>*me9TRFNOam$O))R4@S--ѵ&OIT\RbЩNlXlnw3ᦞ:^U̩>+fctu}5kg-W9l#,ct`tBf3fw\2uSFln #gm:m+)6%W]XSG31kۜX́~u>ܼn_Ztޔ_/+dtUNE1:q͚֋[w]"PMGy_^(ʂS'5nլVQ==UD_R_UE|$Uѵͅu?f-sJtYu`Ѯ^͐316 gtՔ=8lc[Z5".F!D^aI}6>s:jgmIJF؟^BECQmTk-Wg6qVgQ]EQ:-M~U,>zA;Y:誌i6GQtFWekiu2v;z:G:۲NTfl.`tB!ph4`v#kNFJMaZɸة NFml%krUf ;qP2qel~]؈3{;o{hӽ˲'1sΚl.S֭ݼg^BUmdjeha#|wced l_ؤ222~YMmWm)}#22:.K˴Mۿ{fm=n-S9TNæ;> \&Bݫ[UD>3:SIF` ]ErV=ɨ.baEV4X˪lXV| >L; 6#.`tBtv3fE#1^x;Py> Pyt0Մ1xψfj?WrFT}ĺ#+k'NEsRWQ1tCU*F`ktS%47>gO?#O3ٲ822Bat۷c/y&҇>~M+ebth/1of ک=/Dev'F7n:M2:=i2hF!^YZO2Bat#_1+X*9FWAĩ/7VSW}h6ݩ3g׾1LU{]<&!|_[g69\/}Z\׫>^fWPG~2w7vۊοmiɌʢcM1L.MQ-iUDj۲zMdK8R1Ǥ~4 7MҶ47R\O/F](1/\/fU}bmDV[k" &^;g6g+S6XѺ5oh_n)߷TOJd՚dd?jж=h]Oi ⑪?fMKTH:_5JӾ(MҶFs SytxZ÷z^4*]w#'o{;z ݻm_OکT(1J2z`ۮXJZ0IM2V.)ѵY/0PfWDW l46.?/r5o/qOZ^7CQa.BeG\24iC8XzpϚ`CGڲ@вv]OC]*ѕYT~_ͥ78,t闃6lmxpON9t6֬[Q7 ܷ{}WuT ԱJwͫ&qǬI*sct0YH0ߗ6&SM+c1"*Iv!,J;*+C%C+Cg{GƳ`ޣ]g5+ѕQ)j`Tqw2*+ڴ}Wccd uL2>ѫɱ̤YeټkT}.U]kLl\ݩt:Ν;U~՝C/!TOڟatHm&錮폫m$FtU.Bҥ)h**R뚡{E a:ܙ^Εͫ"XH+'s.S9uu/f6k2ԕW.'J&Fss侰@]eԩuk7mW %v}tkܫc/M&Wzw]]P%IS dUMF涛{B]3]B+]w+7Y>|<ڗVRUR9et `9oFV޽[Vw*#R:Gh,FGK#ZZ8"EQK>H$>H(b`hӭHlH+ABEb&:1d̙z9޾}_ϷWw^{sϾ|̲\5/f7Lelmftj5>7W 2igm f?g-G7_j#ĵ]7ock&s3 V]s fCDD}rMmmg}ՔMT7h7z;_ә^8m'&e9ˇ4Y1Y'ca:vDkǍভCFwۙGe<.-u~wGiC]z7Dz^']o\qϜP/YFwO٦&7Aogn B݌Alu43\hI]Hsdo;6[ atsY7ZIcnӟc3&7כ6U+f#}8[j6-`aju&ݱHkM>mǽzesO nCC#묤zzzt띹c}'޸:Ѱ:+Ob?'ƀ&rٟY8D[cL%T335pygi|1oB۶%M{SF7vM/ews1yP==oak_.Z54w"bvݻntTE]7OcU:^LnIgso!ׅͱraLD429w۞vMm$utl/{S7/ u~SD. 0.Kt[FLn뿹ىH_L 0.K2mҪqIirmS̉V%SSSt򩷙a%"F+5&[wnC'[$׬aǝwmCKD]"Z6]u_6- KD.Fh<, cB %btB4oݼo߽/?Xܴ;f;1DN湃u3=wnero^-w=#ܺwY׽;Nys70vΖ پcR_y?/E}ɭMm~oÞ]"Fwm)F0GGvM3e~v Vwֵ<7o>۟v;rq="]?Y|^]{b{#C_xg_v~"C|ݮuu9t.K{[~kGWѭ-#gtq{6?2߼;]hҤ7m19׽K7̙6 tX/C^~p̥΋7l_B8atѝ} jRj>ԙΔջp1K~Kͤ'7uKSl˾Dc6nOߝ'ה˗r۱'tcLs[e<4'J7ٺow&wƍB 7= ~XzLAҖntc&X.ϻ 3Ǟѽ_XĐ?nh 9w.ˏ-)kl_taKyۣm7*so2W]e\hUܝg3|6<(33Yd29Ns?F2ʥ2~~n_LnCʜWQg{]Kq{UϿ9Jݶl5}qO_A+X%Fw]ZwMo;qgOyC}v~ǖ;Чu푇zy'jV)}>x'l?zy>9=ǎ-Y=]xŀƪhƌF7"!5evs:O]ڍM8Qã=aѹLtړc?jS޿ۄZ;xgon,r!m!tƣAշvE+mIcNs&כcNʦ=DJl9e=Ht]igQs6"^S?cƷ3L__;/g] Ӻ:Okay7M1Φ+>4xrW1C1>R[SUu<tC<4bt3aR70Cۏ1+ńjOLZ4iMqMY]S$-Z3]/-LMMUgT%oܭ/z4vs({Vfx$s}_0:-6G.hrErs yI/`t߻o)ÔTQvk2q{VRƠIl&}w9nRk-os'>;f=S} ~\K?|ҪsuڜHqǽ]\Yw332rk˂Gځs꣜~&FwqgƄ>qtf|je6&KOF&tDq}NmwM$/ 2a.O-SSSt]zE.c:$:َM55exצW׎p6[6f]f4F7+מ+rW-3FkRZuM}sm-0ji8/_kR2L?B1"16}=xrf̤'19\"s5?)m5=#C`tqY bΏ?嘙vpe[ԯ+$RޖKtj[kF^sR:^g,v)gtW~kLkI9ڱ5RƬEJwV|ۮF9nrLFeҤc`k]UsΝk|oҊsdYӆֹkn3}ݘ&8joR2]Mm0&jguXwEu~6l8 w޵y1btTFojFu,c3ѭhh҈sV󖡬sյr/iݦ&uFqn y‰V[*{n؎ķ4oøZ7e cTn[ne\hm9IH*”d"1De|[`Q2M-ɎNT22xMTOEկ@߈j'JzҞ7zfֶ?]?cAc:V^d{>ig׺yÝmeױe&Fwq#Z鲭b[*]FDQ2~m^RTi{1dL-cTɲG\iIkn>_ˁlOy\+ ,ZG4~*lh&:n\R6-!cѽ[Wr`뗶 .a˜&)%R7I1>mkE*LJQ}38t"RNr"ϙ^v2m9w[o+z&˹"­n5n5i5UEP淩m=fED^dTD o;S/sw,v}>%43YgTn&SxqcG[ǘc|j,l u=Q~qpwG,I?fI[ftQ1xڟqn_5Vt_nƔ:~(/M$Rcv"19;xE,fFfFw~趑ۘƘFU2%qe~b [OG} DŽIebr"6%78D>+" =Uݨ2e"s ܃1)mvMUR/)ʵ:樵z+Ue*u*8}c-RW΄U/*=N/bd36~;UϘzgL`t&ujonČɯf[vF۾<ӾL4[-m(&Ҩg35i_nҝ%F-SmOLOCmm ǰoLOy'n27e,J}\ꉨՌ,>t5zN*jݏfW"=lDT]n^`L]KaR鰉ZrGI.]m?G1ٟg,vweiZ}FwX u_ٔƉ٬0Po䶩XfF(k,Tj}1fbCeM$}m[j٢ߖS3qڱF7mikDJv̆79wΗk&J%R]Q2kvi\Ook3HiS-~ +R}3{ot+ttDQQMt3~OT7eb8r"~t&U^6535!Ro6S[ck)扸u]qW֬=ː\|bW}}eN~n$ѝFJפ]KtΖ پcBO>VtaQjgb}CqtѭnVݘa ]׬Y<._xX[沮o[~\[>=2s35Q}YYh#ܦXUijR[XQJfڈeU,%BO6b7kɌzjE^۟@+&r:FҠh|U)&J4b^iޚN>[jya5}i_ݛkXu}gF[W\nܸQ\2D `t2OE}[CDJ7Nw-*iϕk+3D>F%ξm'6}>v K{J%N|LkQVz9KD.2D+D~ӂq_3.ڰB';/ډֲjr]^* 0Dn"IALg[>f\+8dߴѿv>x֥~+~f6|?]"btF%btu6{_EG68#:\rz_OYKMW|hw~ ^󒮍iJiJ2w}?-/DD.F]Td (6]m\)K~?]"bt5ԓr5wD.bnbrRvwå6F' ϹGkz]} K`fE=elF<\m\IsLNb_1D.1Cu{LMt#:crZUٌL^?8'wmܴm_ҙ[=o:vʹ'vm<\3F?ULn?O9%5+vgr7n(.`thny[tLDrs~59Fwonf`^$]"ξm'6}O]NZkYɋƥ._Қ<ոH;KI]"k]sMcFL<}yݕI0]"btF}2[=oEDKctdtwWfXNd I~)p[} 0D?uy͸n;ꄗCC}nU3Cw%"FXLMM~ɧv;|1bt3>7ta9Y^) fifN:&7k.e'~z Ltw'KD+Q]7oذ.Xvyf_>Dr 9w~֬̚?nٚ,CF7_m|C-9mm}I]Y=3kg*353Dd.U1moزMC^2Iq!v35111L.ds/W&J6Nƌ5:d&_uF7;[_~?} %\.>r3ׅ61m]Ki{D?.⛴cOzKD.Frm6xs_̡I/n>W7fBD`t<,7qХ03nN.1'k et@(+1eL*C12`]"FwLQLnڝ6KIMt֢61T֬M?\䫿/C?Ou0Fw 1KD"*^ְnkR Z6fj[mc&\JOs>f{֡=:AW#w{{{Qu.0ݙ܍7> ]"btg!jhgkc>zٙ~mL5fxywT8fwT8KoYKj[]2KDK%`th;8Oâ+EYJ'QJl%"F`thu71&M6&H.1KD.*Ե;oCD.K11~,p|]"bthqt_LyÆ p!λ6!bt%_1:KD#t-w ~iLnD %ZEwn-V\Noz^\qD˒Pzy1)̙c}Oz~5D.-6_tY=,Й.lUgw';&^?W/Iǽzl/ܰ}"}| 0Df7;>CgVoyceq>6}jz}G+ޟ]e1DY]`]1KDDDDDsW2(cr7n(.`tV%""""bt0DDDDD.2DDDDD. Tk]""""EVK6l>55u(,;k/""""œute4^{4JwX +['C]xWVEqo4'^}X$gv\|v'^sw$KθztVZ~xygؤ<3W~~}UbGa>U;VCO|^7ް:Ѹ:R/>Nj3;^>\/9gO<^OB~xygؤ<3L2 L Fiz޴9^ބz/?_NX ƌ פ˵z̎7mw,r$ |= Va,Zϰrd^54IENDB`grpc-1.30.2/doc/images/grpc-epollex.png000066400000000000000000001466531370425124100176670ustar00rootroot00000000000000PNG  IHDR IDATxUU?>*OIQQA1$%ECE$'& XӓDH" "9A2ޣjԛjٜss9~{眽g}Z{                                                             "AUTrd"  c}*d޼ypLCCYqmDI?ܛ!=ŷ &ߜc:[Tߑ6K[ǜe3u7Jcbw#3H#T  "ot %%Ԍc@D8ϐ{\DcccOGj3Nd-*qHH#&^B@J-{Zu jڀǯhq90Ǐk@ADj`zzjcl=$M0xV{e2Zg̘#2"m&/m.5S#6f8f3]G=AQrF&C "$_ 883Bk F1fq 8F9MО&ޜprM ̵N{;uZ8 wls G.\p@F+Ad16&ύza#zyuC@bz82͑V Am.̑. Y ṛ+ tuǵ&H:l8'[3G.7=uABg^GMzy&rQcHmȽ7˹JFu2[ʯR:٢p]cmU\)Zt:YmKO諌w?& %k1xg_1r;Q6#nd౗  "+$9Бc6 1` ӄ!(S &u>wdb cz$BwA6 LƱm0$'˵$\,9~!LU j嵦hftI$ nH!1 .s&1r-y>T>ka\k|Kܑ#UFMB|B3Jxn< BUBtzN, th*|AMR;ҫYHL]sȤWi>{k1jQ:̵oY]E& J];W$YG}̒σͺHgo_(ƭ]f &j ғ&d1lɨ@~EgZm]^c@!LuibokkMtQ ›ĜAADNȘNbX6j/*ۘ)ZOvxfyy^-6I9Jε:1X;= az~Ho|('xyjF*xy x.#7 !mHѫ4~ixV{[B$:ś'(4oYֹu!{JHoqOvpriDlM͓Zc@~[/kLvW{yՓFDVf[k@ϱAA!edͮ){-!~VmOz_{w8jޛR B %7d=LY^p\jxi[ B;DzwZ<3bһe6<]a^}n#t{Ew٢L sʵ[{_ Ϥ;5H_iӞ%&DW.!Ma2v̑c =J{|ɅLLW[ ^  ʆN{JN뾧d,aFs?M^Ƨq!3g$7o.IVpi^ &!:5B{Izk h|Mz=›X_%lkH/ J:G4QFرh5= 9Z{bo9d7Op:yn:=$N֡a&,V"IfG1~e4QA璽Y^k  R% b\1 Nom?K2r%! %NPNf}?:hO) . '$2B#!+Di.<"]BɮƳ4BUyYNO l/Agp!vku3˃^ڍe.{6n= &{%2&VYr9*3?ZY/lkE\jB7_$xdT! ՕzDn1N5ϓޡeMrs1q߰AAd)jmՙoμ,8C8<6ӸF^!vKLCO֯6^}Ki3㒍AڡÐ\a4ɭ^S:lB$۬rMuK-&JAܼD TZbsI:qg*zX&+q~e} {\Io?`O6aZP޲ӎ0EWww=zz7:Zv=8~wYc4C(u/^ʵnm=c?k k (uF=mlvES i,&FE#ۃ e2_l kr1/#=S ǜ^  uR^sr@=2%3,Ap03:PNcck_1Ios O-[GHZ_KAADxF#{l)k$$=v#M9C8q7-Cۘ^\%}:Kk(~)7^  #[}8ͤb9!FQԀZ? $ZF*[ؙJ|BN2lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAą+*DQS**b-fvKGޣAD)G:ᐣQ]WQ15o nD4c!ۊTǂAAbH;fu.{AE`6xYmv# V:$.  ̫ke;/>QM nDBAI 3**zUT l]Z}&nԝt1RÓVA7$jbv** Lˑ9xyۍv,d[X  0^-,ufٍrW9?k`݈hBAI (ڳb^Q&l7" c!ۊǂ$AAQ!Q  ۍv,d[X~:cFʆ nDc!̸۪WA&d $O)<.!m (/ $9 "G){ dX&ۍp,d[Xĺ < ^oM9x^z:ך-mgݮ;L6uWkK~Cݭkhh8+ ҋ6q_*ϳ }$uuugZ) )Sw~u'uI_gAHbZ c!Bulf )ݕ+(du&R6)s^3+rQz/νj ٮ(%Z!Ti")P-(-UN#uA*V\k Dبv9#+dv&'B !Bx>rv{Lhyeϳuɫ>:2u$I^N$R캊JJ ۍv,d[X(~)_"HoEjѝNv8$ خU&qbn3ɽ  oDYj>/5jL 1nUwm׺(Iz^e Sݫs o6oFi5WTtDbP:CBmv# V:$.} ͚l Yْk12U\!eZ1 [ rO 񬋀f.gi=jҫ${M^xEzt{ݟxϝ3p'J" -c:r?Xۘmv#" V8$.n"}Od.lW_kA52F Nw249iW³;<7hݙ"kl;IH^eB1)!k"Q.3Izzc;mf:6`l+R XeEv 3%lv+kbģ GFzL FyѲ5Q!Sgv?LloGz"Kܥ5zAAA~$60סJzmBja SHrB8H.uO5ܓNdzubI&?=5D͚"YI!)ɺNד]8_%mMK8+CHQWQ1@l7"ұm~PcA og ⫄tA㻠a>é1YDSӝ[0IGQo4k+9۵mdC L;LY-6TwBwz+^P_Q1őM3**zDTRk:6f݈BA)IRn~Hto\!1}} vv^0[=l鉟 a>#Pwٿ|7d;OČ_cn_r(?yt%+׿tW-]\*[|u^ߧ<G{?csy^R̙魅rP(ʆk#gYx^-; u6`Q V8$.Hz BK^yMC-6`QoA)5I/ARJF67mug](l%ڱm~PcA")XߙzsK7{p+-^8߷Ǵu 4$J5f]P( XA|dnht;ǩJ|^Gz9$$ BP( I/Io#FԒR)LlfeYl ۍmEf[vHRBZ3\`r gR@$LDsDzyI$|xp*CYŒmҋp^Y$k ЪL{ K(< -Y4_t$puzHiҶp+َWOVx[ . / uIrj0u'Nn3zպ!HC]I.GNz,S7>+3^ɢVy#IF{LI6PZix8 "wӌ@uVY`Z+{ Η2wBzxn23 Hzv&(oc9ǵLҫ^sw]kx5aFlGV]Yܪ_RBblG_<@$/3F=RYv>\b R7 i:l!Xh n&]zzӯQ1 =JmX}&F+SC<#r$#$il51,l=mIs/}) 5*a.T0GdUw^\N}qLuYlCڭ2{3ncgwܡl-]X ]FҪC7>ٿup0\ۣ"2qx?ӼON<2c>^^4vHہSUwŸ$^K|+VD;,m@_[#7Ю+4.X ]^?^i+JDY$cc*ܓ*ü 0ۀxm'˦OW| r"p$AK):fGlB–ycƷ.16T.ne,D[[M:LEuye|1ˈVX}x AVI}g-NTI/9g SN?]aH!0/>6 鍾;$  u[-*Euayꡁ#y'9 zsw?Z2 `?O^T[K?H* R1hۺXCһP"R7.}nѢͰƂ\繤kIz z!SNCһM[mjkl,x,^_X7SԦ/I/%땢|c7o7F>6qM[ǡ;Lz !^mEH.)}3 H$M/Ŗ6ٶ"?D:I/xWo_ԩw`B h܇qN^^/$OyÊg7 O.( ؏!oHA{p!F\k 4Ǵ{Z2[:s&ʉ!s ~a_\p eJC>z^=Xvp:N)WҋVԋ ֬VQ]pN9ƍ7 ,;ƌ=2#lRkDӁzCAtvb='JҫւHs2Qʄ.ԉ#]t:'IWAK k'ݤN81fs\ca_6qn[ǩ;Hz_J7Ks>͙ڊzw"2')9ʱ S JuH0!C}mks-L?wͰIq/^ < oz}k59BKKX^ZA9orCSM|ic鼨5ݕGIz'Qר}2v_v⊋.rq)q_X[ϟ1c[R|ln'[߻ZUʂ^̺W.T|{ѯ,XP/N|_:nFe9jT e&2O^*d*0=yxw Q^)|6}5ud>WHp& 5u*q<Yo;[5Ĩ\BNtxy9[GfIk=± .#2.҆3;^Re;Hz+=$~04:@sكsN?]r$uD]s ?:#ݺ=SOU5g7!A>Ym ~nAg|_x#8xr x~yQG99/| ǡ 8eRz^P}S{;6&g?PM+&^THkC\:;EB~'GAzA: jBA:N/RJ9hWz睨+k 2ʞקp]ﮈ3ǨVM^e nwg Hr4dFuu 2^ $Xy!fuѰa>E̹纆񕕮n_Ξ|'BW $sg钞WWp? 6FI//M6x>thqỵHB3%W{6m/qfv$(f(N #B 9Šw!&+ww;z[ɬ27 d&}$n1<"}79Qcƌ9}k6p)cAR!v-Jz ߏ;;|"o=M[kOC}[rۀu>:< /0I{:k+YqGs1EމQXg^Lha=z+l]V ;pE"+/kDjؤWBe$K$8CHoV[hҫ0oWNW5QDVfw*[Kzk EIK]Ka^ջΌxC.s^/66`Y&nc0b Mߵ"C*-dWHe$6u Ѯ?>ãJqIo]u[Ó >tLΤу!m=Iu ޛn+ u},X#5~'=n#A'BA{Փqr++׿3 @zۦI$c/JJ ">K"ݥ5]6~ֽ7=>')!w~r=ْO@Cp/h ȩO#Yzq3fKf7in{iLusz^{)xY 3ӘRS #^R!f]`$Bi@`d錶i[n-x.3 <01d'7+k &LҡNqW)Ÿw&elkGu`FGqؓ7%,]E[W iY'dV:Z$yhe$ + u"(X3 %xqyA3 52ڤkԙUAIzβ +A꺾 A, l $hk qF{\{o}Sz&0e#opISy B"NQ/Nmvޗh/G$D_xar+Ͻ35qոqI/%ٺy{zW%Nli'a\,ng]8ž;^yzǨ{LuAI>AK cժʑ+{QѝL`7-PJ7 zi+ߑᦧ7}?Iz Raųj^_c?6H[|)S kB_#s-h:l-vz0=EFzXokus!Aڊzwu7uZe/.{ Hz)-V]rI/_/Y{VV7|j^$N3z ֹN/d*^B.P;zq9A' "}%' !rb^uA!%T`̘1#ϼc6ng-_["x2I&4o\t'`[$h +;z)^ .3=47 rO'+׿3 RRD[$,9蘲#j$1OQںغCһ=n+EeW_DͰǂ\'bǸo(]d(AK8G TweHvE79m@>ڶ.n/h,4ۊz~y`CQ:m 0Ƃ\w^}$AKIqF=1xp$/fzzc6hѷutw{cn+EiԓNR?>12 g;AK$tvkpjy?sXn1s5 wLXkuGV$Kme(ںd/d,D]UԋRI"aQ7Hz "3f?J4|Fg,tғꠃ~Tu#ޓ/Rvu}Yuj8cavšATگN>quT_UEgautsoU={v3Ϝ_Zq|u9 6/~Ƃ$Qp 륎l/g>{r~**+_9UwHo575/ [nJ8۲?46Hb}j[6{ꨣ!R7֮Quu_ruȟ}[Gڞ{9.^`ߣ'^.N4}5[ gݫ}$Oy9ƍ7 Hz)1w;O]p{K礿zUA?o gExп އS}]υ1ltn'5쿻}}a]'[>YzP1B߉A}4;e]p^ Hz)EdjDFdn GYp?a=:MmUV5Y|߻?jџjcg:uӞT&xMkYϼ﹓@#S_^lc!uĨHo+ %`o6;Kly}+zwYnU;{}Nq l7]W x6Ӯ_ݓA& c|'Mz_QI/A$%s + TW_nz5Ahkev;k5uzīެCVI<թg=n%JEKe1cƌ>5 O = qĊϫ'%wH{>a{_guHouS$^BX@8|);a%r,7}@KDN>d"{>8B]R-!^.܂hUkѮ+}5Sn/'u); QL$!ylߺ>7|wQ<1# oEiAK)q|yjߍMNՌl6`=T~O+77Y977meOafYvC?ԓ&wd&xg%c!uĨHo+j ^J36&̀G !07HLBZPɝ潿nck\c!<މaRJ",y11c &K!^Jg}z+jJevŻFp+t_8qa|%jpi%C!^ CԒNT?_g$]9nm>N 7-϶6/%V^/^ Hz)q!ꑳω,iņϺ/$;؆TI}fD>HvCN q* : 1 oEmAK),=4G#+I =)WP/A _}ByԿ&i$')d,%鍫Em G9P–npg^T/Z]G}K8dW''5 xc!T߉:L Hz))LĂ;q]^_s=,<.u1a1e?$Aެ" !.=B222k=AfdlXH)wb)^ꄿp^ P-ͯ8;P66iSx`hORkJ 3HlE{,$sc/^T) Eu c=I/AR(!FY~ӽ Պ[?deAƺ߸KV׽&rKݞ%-N<őDN^\߮!\?m  cN4d5K$AK)yjTŜZ@ Wu·qcE il|ڀvC՞'a3K:H1s p?"(G_KIXS\̱:VDxq3SLտHz cƌ9}k6pjGDrۏ~/l^?YՆ 1 5a%톾u?OWF~.e( D;=:%uۤ(BX^^hQ$AxRl<[u0Oc/<' ~85 aݰPG,:HjI#]4yL O=v,̱:VL!aEѿaAK>9S;jǘTkOo3k2B,\ e4akYDi ѤP? ~Emw@ ;ҜA'vߚDAoit~߁gM:ývdz4P/P/Hssu)I/%Ճ}r_lQtwp 0.;a^LY2u{>7tMxmO^{{{3Xמ0=꟩«б:wb,ؾ+mcxIwPȒ[XPg5597>L5ًz,S镾FKI~/(fa|kz=:^/A4hJ a0ʔaۋ ?lz~I&汐:wb=U޻ տaf$C+:ԃ$ .`L!T:OQcQAFoΟP&kBxp+9 ! qHb_/~yu';;+uդYn5{ݐŏχ @6CK_CGՑ ߘ*eI㣪!j‡s5Xi\! ]:ߦb,ȥ.w%a^W6)2[8IxWyV9KͲ{o-mu'f#\ݣRґ3knYo.2U{q\yQ_SsܤSO]:gg߯?o2v8O\^d:!I:$QwL5&:bʕ睧=@5Sr>wرj_\ Pǂ\bq$>!\w#tX5<{I. μf{g<~z_74ޙz>kKhn9M'饤K.L,]={uj}7^]u9%,rՊk5`JE(7GЁjUQX ԃ"VҥZ;1O:+!Wݭ^dY7mqyz3^4cHz)mgz/\;XPeG;;L-yY L:Pw?+ziX QIƂ\ėz;#aQ^z۬I/Vg>3Pp{J=1 sM/镶ȕf ]^q\\KK]SVٌWZraKn! >X]9|8 ԝʟ6SiRp[O7-D91RԃDYz:Wz0IUrZΘClAf4rfKMza\Iw cruHyf}c@[ku+:9fdP+IƄHa.i)o5σc*#ϼ*(^^e?1緍WO̔6X4@RdSwB}4nxmEc?~^챠кzyOAf4a1 Hvd[m'pL^35y~ cZ+4#V6E߯Z/1&!͕p;z;'Kmr({ȳ4Ͷkjkac̺̉B\J,O%{Ag|5"^YR?s6Xܧ ]|jǘȌaaFu|ۀH pNq kԹBAcxtzPgN?󸍋n>ׁ CA/t7bO7=6l]T@;K[ d{zwӡLvuc[`›r!fs#i+Z2I~%W}O қEIz I/AR%KN:EmZblƇXd~sN6nfTPHtNx:#{4WϹN}A(7fʳ>m Ǻr娡984@J{}!?~5{\t(, Rq!޴A۹g)X:E7q-c^-Ӝz߷n@G-gԤW_;c\־btj;%AHޢ< ٣p˼!NQHz B?2TO\24ҋF+53{X~./ m; P0? | S10`x3x_ Mz1)Arw^:Ca^:ɤCC0? |tgfw~Cܶ!3U:hZI櫓_P_U<_w;1isч$蛈Ԁ,L|3/4pnt&tgnOl";:wᇨ{3}2kCz~&zeail{ք.'Lk C~s݉GF,iGAzmO! f`Qb>*!!cz`h#,[Ǣ.ҋd5NP2M"ѷag!}"4tWt 2BɐL!1~a^\M1 q;žGLbG{Df".<6Tq|7 SIdvѹ@q}Ӂy>w-uZp<&I/ G,0.`àab~ŎYbE0Zl86T>08 sjs&SI>CΜ^F0>>DOCx;S=K9Q(f1ZI/D/G?" ikzw&v3{dvH`C>ܧ7i ^6GIzckIzIz) ŏGeѢf]# vS#3!03SoEz$<ٌ׆ ü6&=rhk %X_t,aPXC^!D$!>vy4/6:.41&a"BuH'U؉2P}K"3.ތgF2lo#I2+Z:YּBVD&Bz^lW vP['ђ^!S;@Zd$Ibӑ& {5c_D^3b/<80j_}62ҋM{p]_^,|xam - 5[  Ezu#qQ^\!tB2Gg!tUKeSg0M[~PkwA"O!ӘEx1UζEz͌Xdp~YPޜhһ JR)RBˁude$CP#饘5[682,5^0ƬLD\AcQ^1h#_\^*/ҫCq,ű5\7 I< bTuAm@$鯿Cz/[&hGV2?O[aQXq.ҫ} d^^GnAu :+3;|EC^xKoeFu} Ƴ<U_rBx IolW.kjxKDI&XoK"|IM@MGm!tk5I]ze^{R~.!m;$j"C/{e C/}$1gM2|a;6a0 Da_|,^,-(B}k5Aصv3A7xf t cIowgu»j+w^ 1^IDN/ooWֶcHxzWmLl۪ޅ0"5$%\j oh(֚R|nǝp(TǨk^RO?R ¨ A {^k03Izm38*+C4Σ,lkzαBwf"ƚAINe&"Hz)1ȫB-:w?K=Jw_K4@a}s;~\$AhCG~c(8G]K'ͷD9yXF]PH{Wm!=OI6kIrvHuB:M+dV$pa^N7^6Yk0cycm2~wH&hNe|ס[㚦Vy\uAze]愀qd2> $s|_Qg&#Hz)Enp9#sP8^(ȯ;=¿ksar ANB29*ʞ*لr ϵYٲh?ڃA45pPe}oYe≚J"fVkWI5G& Fxxs#ɪ]vUAK)0o9*McoIvKשYkY˷8Gc?M(8ƂBz=MeR&^JQ:#3>~~x7Oi(őjj%pH%GNLI}FWDnz@KKAz+[7 C(~ p3Ϝs (n;gSd~բǷҕGZ==zύ4KvƂ\낤 [b7&(X3J6y⒱jǘЍիL:&!>_?+SfaEQu5/қO?R r h7AK)dwW1/ta~k{Lc(fo^c)4Ix':톓uߤ8׹|A{nuA>AR -~D΅ Wpf;]Mh%mGt1j$KnV{^5dDԵѹw7S1uԯA~3W>qjm=I/%ķk{s5>^@x}at8S\q k_yc^}7 52p퍋n߽x54_3YG>kI/=^'G9<A19 >n9R=3[S@fqO軸6zi=9K~e꺴>Q'~Gq$tmeN|Xu<"tnaںdzb>nawDg٧k7NI/썏W|I=~Fyg$ f-W}<.c4h#D¼>Ϟ-Wz;f{|kpV-T$_SW[-zp8,ҋ!B}ǨG598ݫ['{ǂԚ!2ǚ:u>YQt|#=`c=#.R=xԱܽ7ukE\|I%G1̷pU{]W6ԭN?W0`쀼[HzIz RM~j/l|yw߰t ~6S0H`$`rxo~$ۋsp 37^~Wãd ;Awig~})SÞߠ3&M^Mk_&z"& ^X"zyMO1 .& |,[|al1ѯ 5dJ%GЏNd;Ed&s|p5~ z p:L1f@M'HzIz >Bœw֟j| <B}{Lҋ6` _y8YL2㯞UKÜ<{ŞuGb{&ҋ"Cr9MX0 O~SגsХLݗ@n1>cRYmzbN }g|aOf %^J;C5 q=I/4ןaă (H7 |]~F1*&L:1_xxbS'6 @xTMvdDL%z^{nvQK!$[I!!Խ9Va;ޒQ9=NE~>*$A5)4 #^cds$2Ioi%C!^JH>pDA›_6ahU3VcZ1rM3mU9OG :ìl Jz͉ L/ҫI&8+ oIt1#!'$Kרc\&Ig;ayzL݌."%^ 7on5ee!8F0aj m8tkYBz͵$7cަ׋Dzz 6E%AV5IIzuf2pLԤ7WOokz]6@]iu,>kZ֩ dz$cAI/ޅ6AxY?om#EzW("؂E+E"pXFcR C6ҫ$/rK!2!ӮmED kԱtNW4 c;8k_+&{")~:AKKqojyMUQ " ;߿곿->h&ܓV }W,ddSZF"QX󠺶vMPo9L.aizEAbWЗs]V]Dt'_x yy˫C5A}MJAZݴEb׋Lz o7EwZ!)^&]Ch3)׹0l ǂbwꂤ K m^`Ú4ɮBI̞~ @yHԂ{R\r I/ARJ6|F%#_RÇO+gcGR: 6S|WTPרsA_]PHz :nAPwS?'yp?a#k^[}=O#<5w&FoZKQzz 8aJKI қos$&mֽI/Bқ]rܴ^V?(ݡND"(X3Jj̻Hz)JYG>GmZ̴.aRDpY%7\~Ud(AKI`"l[UMšr&IiJpZ 'sۏ~>~9U ܧ Hz)\DVlJbŅ@;"e J$BK$ I/ۀeÊgIzV2'_$AKK A^Xmo}2/@[DӷSVxATg .Hz PIO|W8PMeQ-R¯pMoJB'ҝ8ND>dGE"ofoPHz}e~LF P'Hz R2R59axcS($e;RJAw$AK)Y]3!1CZMz/HoڀvLޘBzQ+?Jҝ8ǂ0W~77n 饔`- (l3fo~QI{W- ARPq'IztI/I/I/%$/EcoA1H$ (kr og{Ag .Hz *Mw׫'.Y?_?7FIRPרg~7c! RX}@KDP[M-/Y8Jn&J+PHz9RҮ; ^H k C)DN^ RΤwu7XH);1SNArK;Son˫P0z(C_(IjJ0N/Hz(QF2%~9Y ܧ Hz)e,+}Q5/~m@Ii1{3AKI,;H=$jJڌEOwؿHz 饄"- 7>IRPfBznzNWK *݉Y$A (դv>+l(y="}-9ļ4o:Q+?SsW7nY AR"/[4ՆkB/{_QM.tϒоIkJv۴G$´%YBt'NPi%C!^J<vzn}>};v['?DwN,Tw~t~Vw~jt Hz)߸}Zᆃz518P=<,[TzI-弄|37ޒ *eOSM5#Q3oG>AM酼οҔP'ugْh5z "夷Z^zm36xP$aSBI -7қ6o˖WOVA5/ JYqcG|Iz "8 L#1o9~ Qߛκ{^sx.aR/JE}O Sw*wUj eԯbEE\ԛ[UI/픲mNݡPw 'V|]B)i->AKl; uB!%^JH/  R,CI/B!PHz)I/A$PIODBH^ omtݜ -(`sQl""7 r;9$ _1HrI# 4 $`I  A8F99Gzv{jZkwwjͪ5WͪgBHߡ@`Duz"zi[Hߡ@ "z!dޢ}gK//tվ߸hncvm~|RtG;H}.݌/ E_ۭ̕R&X;7^x>E !DB8E3?U%<.lJͺsUˬZpj|O?t$<-,BKP]>1l~o_td\&XϢ# ^hǏ8*D/d=3i3XWwJEU2\!e%frt jk`#sUo'|z>;ԏZUG}Yv~ Km챇Z,?DSy} ׋,kԵT ]$D綝3Q( za[PؗbV+W^.c/΍x5_xzUf5Hl!zǬXjޝy%BtMhF׾zpUwK?>)iiVD]`]UH4]M.6WmM`J`wӄ>۾SVFѳ4G|'LmBDM}6Nh"Qѫ{V_OڤüR~.ɅpBAǺvA+DoēvM&iRV;^}ӗozZ&y z!nIܶ4EK^yW#m檉yћO+AmEZaDFDo '2^Y4gCwIQ65){ջ~#CFǜӗ'.sTdK\ɪ+Y4a'OT.QrhgM~ڦ6vdcN^kTKd_7s?\ћ7s*WdķY^~ן8;n{ ы:Hek0_O3z@[3KW/V 4!oBQ5 Y/r`8߶z\<0ca+D'|]ero}~}T~H}@߫o&:aկf9S]ԏIأv=)牎%`X$_<kϼjm׵un ,o(zαyhrD,(qMYVK,q͵L̦{t m] {=vsAn{so6o=|YFΗ6@=g+l|׿GD"zki"*| Q/$Ԍfn婗\&jf%l@ݱUO Xto4:ۮzou1A=NۢEP;xem^elo[u@Cp]IlHhBV 9V*KE=D}# >YP50ۦ\7EFfU_>WEjiU]tMTrrTzuݓƺO홢kݿi·7J%&g~gOį%AOTm&@ټ5lWd3z+zӞSTUp2J4NִC{Wgvw]*lm蕘37#{y^^z^P^׽сDȇUl2z{kͶ.[ro+z+.1ee=75T]pB/z%TT@{I]U&ڈ{p# ^8HĽY:eɳ̢2ĦS6ýo^pry.}pon=;]IM^Mxl1OϬxZibyahTѫzzgɥY6ѻx ѕ^r1(D׿@-\6YG%K=XY/V^hl1\rYVmӵW`F8KX,^gβDK\G4Q=3caD%̽7|m{@BU%wiJԬwM4"zmHRaB/ =% z%?Yir "zsEob-WUDzj@&Z-zz$|Z蕥R\z8Z֪lWę~w ta>Wssձ2׻D:[ڻE粲.Ǟ>@H+v>yKe^[Ǩ־taZ_~iI^6T{eMEmVo .7K_uzԼhMfIDAT'_4eעޚE 5]BzY -U6QuLbgضy+w@@3\3U,&4ImgZlv}x+gi0IX  (5x }F-׬:g]4;)zMV;ڄFE>wU{UKb^ĎOu7>S楡{[y|ZESץe[dv }>b۴KL<ѫ-UD/l>kq5.lIHJ:jJ2t[\fp?\""umr>suE:^}$Z>jzLJΕ. ]KXfCSx rVT6-kmeq49` &A| Z7޼_~[KL شZ<:{Mm{ՒK(i _Sg-9&ˮ:iPKLm'$"zwGjrHDM[RHD/ыbeY4v˲ڭ0ոldQ`KepDV3~. 5h\H#ы腈ޖ̶+[,SIh]֫ [d-W$zI`uf_:~R@Bjު5\B傭fb57tD/l#'*]m2I{}‘umL ^2N߁ skتu^vl;}vZ$|Տ`k9E?]zBڣ|x!z@mӟn8c.b;[+RݾqO @1qѫ^~c-!Sb;"gVo+s/Gs.?O=رi]dܳ;{Kno~rX`-U/_]j΂D߭x%zyGBD/#6C?;kѼ}9hŵk Eyn|?xQѲIӢRԛ;w`>|!6wycP( z!#-GыϬGKk=O{q(f_: z!l`%vY;}$Ĉ^;)~1' z! z!7 ժ| o =@Wl}Ò&DY腰dt蝷ݸ_]R?_7:cqḨ}!^{+v|SGD~4ABXEA/kъՅ}TTDKZ>7/Sh%=501ѻMa&:L wH@D/C='z8ћyGBXEA z#{#c jVʊw/&,{6z[_OX]lEέ:XɎY(3l߿X5kE.7$ TzkGY7KǏqT mns!_sB, MR `i .$0kjE+/?!u]F.#&;sq^{w'!}e阡m우GB-~f`͢+ou<wW{ZKQ[4 /窯Aw"awH@D/&w1 @~˜^;<m5լMʵŠ]WhO |_7hN-&u{(1+eʹKU ;͇ǜgx.y54ciw/x3숲껳OMJ@xVYFM ^Pyix!,_1L+jX/zZ@7k6W]Ͼwʒg`J ]E߁^ '^koC6ay,ay%5ޒ|[Yk xI{l xYyPk=+>^.*>] 2ȧP&2p/DQT:@Zb*Yuڈ赲NIxؼfˮmֵٚu]r^*` TFZv v !k/DW^{;oLg͚>ys=c*۾he̙ReU&m{U8޻+\lWV9U?CX]]O5[9myF]8s=F][-R m*}]Ujkq_:@ӄ܅Ģbxf`|崙./MVl- ۖL'{腰;}،uz+jRED&+$"lL[+|D"§LU@m%j*l{#u9*;'Ϛ L̩>:~ W*JCDk w+JPW>o&ǽ598?CתAz%n}GuH.?VKp+:jwMT" -zO=KkX4K*D-3{kO%Afo3E;1ը_K\U*;D;q՜ѫ5#~AbyòB/^TѝU83g:&z%Zg|G\΄shZWb}{ђJmCm?aiCܫmպVF ְ&M"uͶܡyZɫ5I@Kdj+ˮH2 d3^ؾA?}(^k޾-<EA6 z7$g,8P*+B-S|OIeֻĖΡgY;%$UHcķK̞nOii=mhkZ{E"eu2.!+\)+-gڄAbΣɍQ9TNcn7ONID~)ڛO F$zEWyɝ%8 ]%$-qꭼ$f[_Wu;YU'/}gϮG} 0e}c$WG';oѿ[SkS5=;a- ![/z=; Dm Ģ,^0+4EDoO,[NӶeYL[pYE/BM{p I,iT s8iۻ]́u$V54la8+m/5|b^\IwKrS^N_c ‰ߴuzoL酰#gǢWdk/"zHy_M2#z!,O zHb5;ĭoeL,}TsM^-S7 3!.fv5J,.y^ swS 0,:bmߙX7L,3)K989zJb-z腰M.%Y?hJhD/, ?~ẕʛ腰7 IJ9ܟXi%yi`1IԒu8aW$OMpb}cMA2 NHjIl *;l%%{W$VW-^[lOzyk%re-յ97N@fה$(s-g4KIڒʽ:yD/,[=r/NwMoE9QpMӒOBS e513R2 h;59~H+3 0!~yJ=3I4(`]R|ayfAV6k5\א8ȉ~=%vN={b:&vvJͫXZHWy`‹_>_6 yn^fӬEBn9suaMeNqy~j腰ۈe,Su ‚/VZ& }?]s㌜^؍D}ph՜^ ޿;^š_G&Mz92P-Îg ʶ][);62xpi,lCT v/bSTغ2p/pmܑl1<~iv#xNEPR+lFm` mIv[Ik'k#?|v-kj]ëUɚ̧vzDl,]!z_ߣq|W`ޢ'wˈc{'VG_?oB~T:Ij ɊkvKWOy'Jl\E߁%mDMZSU~uU$ۦ%rˎID9"d=ھdIz+Kj`J=E`M ꩵ`ê:_SNsM fpN~jDgZUVEzT;#J)zoHL N<S{`ٳA%^ܚ m\׳Zᵷ:v{ ZO=xQq`D.wX܁W ݿ;,P1:Ȅ`bܒl1a+Wߵ؜`cruuOց*knF/:W3\i,:ꐈLW5'u*[kVT AϬrON0"ROuXۼxI!O ,ljzvm0.BoHm0.`G{ Aw߿qM?~CkòEcO*o*}ğsXǖ@_}r9tIU-ʵ^ OqnW]?|G`Z':۵x)wnh:\mT /z>ravU_״r:,'wlNnPX>auhBW$૽:Ujw vߵ6ZOt4;w`DovTjmbbOw$BV1}ٜ &lWkƤ.fN7 r'z?iPH{bɋ˄c:D>,a h;~`E7-~VDQLsY5wiZm;ܘ^oMNeYmv< _s{EҺ^Wv%#A"Q&MGwy? z!Ӆܶs.ebWtT04AOZ&z%$^J|D- ̬Ӯ~ȵ4,!Wa}i^/qn"Z~f^Y,~+<)IF) ܂Ժ^ݿn++ c.qp8{>} ;2mZx Ivi Z(z;4&تPx1Y.j&zMxzWB>ޢim#vmU>xRD/_'[& (%c&Z]N4zE}/cŻբWۺF/kY˸1Lik|r?v u+1O!za/=7ۣHVjw= Z1qѫ^~c-b(kju}lmKµ ։^nkEhזj%v;meF‘Oj-;wC#z:^D\uMJ腰T`uV8?_hJy^NtޱM=2Ue-aS$,mt ]J|H^HvZWkj:hbeܕRr,ATR%j$[,*ʊ:,Bݨ,:g/*Bg^oC}־j&o]u?vˎWRN N]:_vu.tǮ! D0_wK,2A!֓>V OC?p5$lOw-o)kVEIMP G` Y ݀D$W/ŠMFܨUqZb*3+ie,trB>%\g7,f#jpK)q]J{BWㅗ/^֑>˞ɹrqdͱjm$Ln {dklD`kj=:,c[[Z׭y;[uZ~ _Zn͢;YYg׬f5E(4Zz8;emV^ OQVPC5fyUG}Sv| >4ĥH~!멯,a=d2> OIu,uW;2 i5Btl ^oܿ_rE§H*izѫ!#TgHZ‰Ge)ђ{Տ,o^{G=Vk6Rluwi(GK ZYΡr})ۯJ$Wq'ߖN;KYMӋe炏}"Zzϧmbqr)CCV`7MXTέܠg\3p$GkײV6qsH#zke$Xqb}TYiØbY]&%j]|Dx$+[# ѫ8TZC: ?ֱ. KE ^Oθ#]8"Կ-8c(ZEڐXVw& $jbn}v*+IlnJzY{Klv]xYyZ6IfI'`7v"J8fǒkYM7MXtK!tq@~?8?_r&/}uպ{׿=9Bܪ~JHmz+tEOO'ʦ|2[ Y%"S'372FWZ!"U.̶]yfBGl9D/]{> 57鏸iҰ~\3x}U+Ofb _z4g=Ow뫞o5o~oiU~[T7휉B anM\Osirp.NC^5ճ.n;+?} w.sv7D?[{~w.ae|~`)S܌ z!lOn6La좄Z) Wd4"z^ n6L#MBD/`ĉWڬ#eM0ҪǼݖ5~n+EW,_}K z! @P`<{T5a?+Z3|P=]ˇ_XU '&B7nܸEW'mJ =yD/ P1}S/'/45[{{{ǢP@6Xy{w7_]#EJM FuQ7M힧;ӿ} aT)dtf ! 2 < J5*^3wD/d0Gc Q7$ȣ@DoF{'Fы>)q^@J='! @:Q7:;E腈^}wrYsZNbW$~z-G"z($*l;wI.}G}ʗ1chKѶKfMt5e,~c_4D;3ߌVBʭYtf\b~I_2Jj̰\۷O}ߵ1zxC^[$j7рGuDoWrT_V-ʅf{%.uٲ^ 2zwc1lQ>baBGʈW!g;W:>0p1YO9l=H->'7R{sӷEdon:by{d- rY$4VPBrvj)Ї?z@G G2c&+0ITU>O賉;Y=?䰃#z!ػa޵Bq@+MӻA٣}_Ygr6%밶k?_zP,M: z!^\I{kT`3@6frv&D:0ۙM^tr K٤\yYɜMC#Dj3[}UǓDko*31mۮ1kRID/,`Ė=,q(^ؚVj3432rʚyA\O_6kֵ츮?Kh 4eYAmk{ٛѽN}aVsI%,+D MZ\9kY띪V.|NZa94)4k"z[k[Y(%\ۛgCe?IjVPJl: 1'*=S/N-AS7Ka*‡y>‚w][;xw+}͵;kR+/4ы`"X85l.k64Z/h{k,~6_l^Hka<&0FnG (ig_[e,N+>QZwWZL^}/{DŽ+gBKf},КJgb001ЭHk#^e}F[.iTzė:͢f3y;<9U~g6i'C1%һ$綽/Ο7 ϻO۳!OyZE 3b4`[$~8[s#SY3l|YGm^*lqW3Ł ~B؀%̈kօvYvqLKeqwD(NXV<&a`q^Ձ$ViYnⓛ0h8g/xr]ZrQ)}P{2yިYȌ)zos|s\u{5eY}6ICu[}GuH !0˰?;腥f6lS/Q aLD %bfo17S$Vf( fc `7띮1t2=4\g4[}޻k *XX}Ԏ'zYmrKUQXu[N^o#ECgs{U'nt -Ͼ XsĬ=O6oyM칒fik'MbE z@®0λzp jo^#e"Qv'[ӕU̯m9,iɾNwfDo{EY=A6)6vodVbo KbU+g>NW{ oNkOs6 p̠}d^ =5jNB> ?'yac7;Ophi t<+wVښz1U^*=׳2/=3$uv޴ uWY[e߫S+h:+_Y[|mz+tEOOpkL -j`K~RfULoT+ڦAͦko_[2C>s{wraDokiv_(0;!L2c &FEχ~>b^k]Ѣ灵Y5gwfiX4y>o2/}cΙ(MT2vLteU4_/QqKX*MX0Kt#YYi.[fK^hP^Ke&mYqMq枙lƬU/t=S3qfF6Z~¾`}Q}V2]>aP};7׻md(D"z@BDoMҲ+73ʹ{Lkfm,2$zeK{KIN|YTWYjr xY*': ˻JxX" YU^ԵV2nvZ}Y4K,,{b}(s׽2gM3!糝(6Ѥ~N\[_FuRשӞ i]yMU^}ڴg&T^mI9}՚0/?D"z@BDoMԠ\C/2*Ht\<--dv$AO.AvZ e#k(;騔FC!K5k <;Md,i٪i)0O~L[.b>SזֽcvR:쫲f]{ڱ-D33rEI !E0BP`uzQ( zaFsBx z4? ^Ȼ 2۱{$pVlRLzZZiqRsY$V{ z!*. %B-:Z^˖Ucn-S] 4Ζū%CUj@ ы`"@k~*}BDoU9Ѯvԗ~ˢmyr%:e/U=Ԙ_[V^D/^@"z+˲^xRg-nyKq5CɕY7(+zzԻ 2o!5>ò{]D/2h)w_IP xcW؟&,-8|?t2׷#l+swV "zH,꩙zeT>,,|i^,,>KeY#z[I =Wы-wD}'z f}dCE앻x8![> zHUsWxUV]S/eeYu?h1+ ?oq-]ܗc]#/&闊Մ1g{g*z%8uĤ&B-z-ۻ WAVz'j[7Ooť'KoB <{skw61.ʶ LLJk5PU^Do-hlj‘=- /䡐ve?'z%%$Dd:}&ψvNrik+N/^`M7oj^ص^Y]^Y5@3\KI7|ȕ&Me_Į&qVKZĮĮUQ4;DeQ+׻JB^mɵD/QW)g}o񲵊^ն͖J٥m}xcD/ٛ,zŸkz"zyKzHcP*EޏK٫ z^8#r&(_$W0W5 UUju0~g3!͎K|rqޘr uDovjwVV6ѫ-˹&wL[ы-`"XƁŴ*H0DVThAC#WX/j:k$-cvuuNYU/Ez0\ݫDoL`_MJan+9QߩݢWIѢ^nd-#n /'hVgm\+Ø^"5*z=5pΪDӒXB+ _w'"^~^-wåu_:E[}‹':,;KﻴIӢ^C"z@BuRQ@W_HqMhjITH;+oWrG,.q D/,If ]ekTvegQX1 ՚Zc=+q%~5W}9زU7̻pK!z!lp$9ӋB K6r?3nltPkjfemD1 ! y z@3 GL ZO~3XO%XΠ{1XBOKi"4OZqᚁ*Pu:ܓӮO ]uIJNUYk' iYWZWVre| -{$+ևf kI$~sТe}m UWv.OP׵Y;Y%΅B;Ok?¦===AZs}&RifEW˚*N t\e+S'YRMJЅN`mt|mpi1OJZ]LW;]U.W[f)P"_\BaAmL ^خ̚}X,fek~Ymga h˰;],~3&&aMĉGaj)EOלsoN/~Eynf?XaPFIENDB`grpc-1.30.2/doc/images/grpc-ps-pss-fd.png000066400000000000000000000606111370425124100200200ustar00rootroot00000000000000PNG  IHDRaPIDATx_l\} 31ӽLr+)S0)ӰIy`eSZC*flqalZmꔆ$))[eqhG! ^ `Px/>zЃ}7-3rA3{k7GPڼIkM5uȋt^ .gCmJTw F֬ "*DL茩( {켗דIP"t=[%4]9ǀ[er6hiMw07HT1ZZ>RZFI?uk"^u_w^w8\g5B5jz9s8mYjnk o} e^Y}?^ޙkΎs҉,8d-jހ]u&E-D\$^Ӭh7]KEQti* sZq _i7+NΡxӥEϭ9e^ݶ= z:T6eE=YMpe"9n*"xΪ0XYK*.*~kkmmI7lۦ|Ȣ:opafOrWTp} J{ztjٛ޹4kDʡ!#i_lzE޽ǯP~C}DDoTADKwP7&RV(U`.T9Nad] %nM0r*- cʪ8Ƥw48? yvD5kw1k[ciP,YiRQ[{=ьJߊm*f;}54&ԖiWEN;Һ7kꮼ-*HۖF]1=o0Mdӝ7n]B~?o-IEڧۭbYQ@]4klURtR\zͤ&K6|%Nkإ_{ezrE$Luv^$q9wrm*vI~ք[1wjZT̔Y_=Gݥy^kgYk*ehi> 9jC&<l *gs.!Arrt:^b+ߤ3 zEs2ñGTjֹFGCw\-]ZΓZkUJ4{DE;Dw8v[gGۄ&^};2Cxۛ5 9[;NJJnjčQDw1AVTZvN#PG n횕WUvLF_)&լIݴ/3 # er+)c(Vr52 D8$S4PO :eIpٯe٠a'j(Á@T6;Ǎ/aReKƴ3b"f`Rec؟ Ml,xRe=fD $Ƅ(N'b[@3nL_)g-uPf>CorhBnt܍_y9 KĘODO\BX۸eA1ڽtTݺ`2a̶RIk?pWd뼖q? z7-uP((2ۂƬmMsԝr":Jt_N˴2 ZjZTYFTb76*a6h byɘ(.&ȁ|" yyU'a7 ΪLߓĨC jQߛz~MsN{kFNr=:ώ@mZY ^ )͚{&A&qr[Zku5{eCwg̈=h5Njړ^ڸrwiq%ugh} "+k:Y}ΰ#+8y&UqzǛҴ3z\XT1 z*q}ۤۗUƝt-EUkZQӁuz T:e⊞YUZw綎vj]sqٽ/to+zn5Wxlۃ[X'UIm-w[(ܷ2:s߮E-!l%C[t >95û˼ R٬~<ܿE{:,и\Pq3W!ʍeG@Jl{:B'T<z&bν]/߫^;OϭN?[!jE5cԎ!M3mp@TW?}ڮtVBU᤾@E[`w}-Z4Z(Q5"K#*`gԮcϤqIsD˼IP.`{yЩQ-[y4S/zNWj't?[=k{.i=.hd]?^I(E"Ȳtzlz6IF{dž*G-&}]z.Fg!ۊ(yYҿgs/8;{~ǦK;]4Z$/F.۝[ALz-VT8"]~^%~CK?횏RKk}PYtz4YOC"U% !r) |Vw אwΡ|/nyKZF=aVDZ3m vѤW1|϶kR IW.}kiXɶs|mQJn:PaEh)𽳙EU(Խޣ-EUNa{ǘ6k5R %cwǽ(va0T?*@qi <l) CB{Prg[x'brfubjxIjMkr_ )15-O}2HJn[aICjw ݁Րkc]ճwN_dQ?Μ9ض l ld t[8uu9//psfuoQkRC MzLuP[)S15k+"zъjhـ?E!'SчsZ׼r:8"9}3чG+1. fujJŘy|8&ՍA$Ud5ګvߐ^ߵ?Qmm%]^[0s8$c6z?R|?RTCkǭ]l[m;؞VR~X:Sy}l"\zO.!$r߬Ȥj[N t.q*v.OW mfDh[2Pʜ _zWAUmvmׯۿV~G:S6c .ݷ.F&5vKu.إXw$vQBKKqp%WM|֘͘CE_Z eщܗcٽ&~v!>%a IȃU'MU\] <1ˁg&(7ђiG+5(3sEcWjecxҘj"z7SIÝ%1 I]JjJcc4R#Ǎ9]g(l02mBzQ]%̋'b)uiDcCJ@Pf0fwdIukȗ*8:GTwE>3ח13w5(Yὗ$8[?m2{QR"F4g1S}Q׵єY(M'b?@ ø0e 7yy_BTOz`ewvգyCK˸K^3!ˤF]םZm|lqdr#zCX2nLZV!󃹴թNc}-b4!,Zth}ADWT*嬷_AM Y<7-]Z:]V927frHS.Λ%.OTTv1 z*-OFEڮ3Ĥmt6Hyvj}6 I߬1cI94cb_s٠yuƹy8afh2/U;ϦWJ'n:hpњ׵-ZAjfI1JB$-? YI-R30mcVx{z"b_>}~{ִNLn4+}^ZU%ݒsnORN;٘V;2\0tqEd:e[H~+ZW+_WfuEjٮuwY_k/95ecSǷb֎YI`ky4 ur:D{p~p줛rwػ:(wzbϞ=nv]Kljbs?_Sv[}.\sT CQsg:Xh&۪vR:"j%0YJ^ӎLy2aEESbs&UYp[V -Փt8_Obȑ +4#fmOqZoq'ݠslktN=҉%.iXrU{iCE2YQeB>yMlmՃO',~e7m/@{Qwr+-F f~ 1-n/o4u(v%⊝b=ݰe5~Ib4+LxFo{V׫d~i̿om~O?z_F{n_6,曵lEu6Fk3q:H'~&ǂ'fV֖k w+󷭌W=&.?o\=ٖ4gݢm/ۜA\ǾlߛFFui✫5]IuVTwݪ u&QbyYvsݤ PH;=3xć/>HQGW-:yף},ʄ"f}f;3taQsJ׼'q [ ^~յ1C]xC餌EUdqńǟn¶Xq|ZdWQn84y<x紾m-9f+mi fwM*eq~(ETDr~b3_EPO}k;Q, & jT6.8U;eX`{ӜwZ\PIrNSgHɻƬ]UΥ&jsWV_msiSZm5DwTujhbE՞Kh+뼷u8i.z4gq!*Aw&E/=ZKݐK 8xq@TU+;IƜs"6[TEzxtbhZ+_Icvu=%QZ7Wr1v,h?A\[dRc,Gc$ hݣA6?F]Ĉwܽ5lcO'-& ;Q{&ooNFo=&U(^6WTy$j9+;V>]Fd+4YjL{A\DJJExVL;ɤΔ[ʸfu^W|el-1cΟ iЩ,DU|:kngޚ \Zz&j&Q%rfOoߌz#)ӧ P Qqd@j% ɬI͚T7:G;pʤZΙT6&]d+CNJ O颓ǜYZeRKkF+Qm]oՎgf­zfzvtkV9EZG'ULnSu:gRc[26:cީEz,p{ks̛ r{_[JD;;džU=~wzҬkr̫J[D /ՓdʻIeJ$dLwtth&=/]*c*Le>M7$򃎠IZiU4ɨi~~ޙs2]ssTΛ-Ǯղj^~)+z6&[ZuO߸smB]w}?:tGpOl2.Vb6^D`v@`֮Z \QH*kq"8Vw}.:P濦[]U ßԨܱc.[TPE.QD Pz*6?~zx ݩgUԨܑ.fU'sFTQ%*#~?tzKg{$S:v GK67NQ686S_DjdC_,U &U@T "2SVjYsQDX 9x7n/LJ}Hc B~h9mL=\BQȉ`YGq:5Cz'gV'J_ IZif_F&E|$N̿&{BT+4g|EdD*5jǐr:0!ț"XCǟ|1cڷ?dSNHM7ݔ,ce"fo=蝄8WjjcCa[s2zܱ#wfc.9UZ/t >סD &[浾Uu! Q!:DU(qoFcIΘ%/߾g5N?|OtzuTPTM\9pDL~Uxv2@eG{4ٚ&k2ReҙDFZto8jaMNӖE H~~7cQ{R|3FrlZ\y #l|硿/$N/0:dnK߯uʍjeGʪlm3*QujWY0e ڡۤo^7yQCoK>.g7NTmSNQiu-kOTlw.kwvɩOfwCʹkʒ{キ홱Yu"ѶM"2 *rkdPj%neҖGr8N+ƛHoaɿEY=rHI]DJeWx`2,"e?&H9GЌ5٨~Eﭜ^ߨHj1wETKN]/wgUضYfNO{t]֫ f+NTzuz'y.8yVq,^1kQϫ0JTwi9t*ų^L{eڦצ?(WQzկWoH+nk7+px]Jů֕CicH]9|][ ׅ;˱ݜ݉9e;R&t'92*?@mPʉDl︭$cAKZRz-j9۲gO1m!N7r?"ȐoNgfM?:ǵEv0J.3sU+۝T2Yiv.!׎3nWX&㵨J`e c.aH,loUw"% q6)As+Gf!-F[%}?Zdk>]l_N\3)I7R׬D`jf=4"foƆEU.TMf7NT'3=@M"1udӺe)=hRc7ST,N 5UL(ۮn`[cVN˫H ih"%w{:lҚj[mm8PK" Xƚk'f|e8pSEF4QW|kx6꽿J;oג0ǡ}f|DuY=_RB ]!ƨnƍQk ?0Qg[FTQwIiesc,(nP5mt' [ @lɤR98\uѕiKٟ|*TvW }N^v3l'o'DB@oT:Iܯ.;ZRdWYD"TmK.Gz9fZ:QSմ߬ZHi)EUԴNmAT:ʶ z_9+*u6Fk cJ7iiXqgk4J̤,u/ec]Cc.zIHỵ%R{y5qK՚YsG' FT$*&2qޤ%^y%zzif;>NsYtVהPTJ;#z.BIj^S ]`&U."kIKЈ&RfXIWB$ʪ+~خnZ<~n2i[jC!?,ezAP̒,qc<=%\_O~Ote5Z$JJ\K у*ןXYЗzݾ;^g%O۫|!}uϧ݄g:ޮ"סdzKȱ;6|&+{}{ rε0k(+QzUi12TZe\%؝HHdQ"S+;I !tgn"R 閜J1"RMiY=fMirm2KziM=iKZ ,˹Kɏ 6~˸߸rl,ƴ{#$ZrH7ڿT IC2F$.]oTZUst)mtH ]o;vd]>DJ2P!Ӎ55C݉d9$rĵ/l?S;lr]D6!2NMd*-(]}e y-ǜs"{);N3SȘLGZV,2-wwrJ?Sxԟd1) %Q̐IvL횜([o)%hU(* -VD %YJ9Q%珨e?{h\LgXSQD <ѫw;VƩޙWg{$S:vDrq=IY״:TܗY837+ ,UK?}赦U@T &WzPIPn* Q␱~>:=U#P,QeUbINtT%S~AT $.!bStի_*lDzw},Ӿٽ{w ߬Dۃe!Ϭ *Q3DͿQDxwhd]^K\HdYsQD Jo=ԷVB$U@A`_bw轟VddD}pQM)Jlq2o?|2)҈* A0 *A-ξ!y>l{wJ'߮oG?}ъ?Ov$'}ڨf * ;?]c˟QD 62DRd`DUؠ:PI3-uEUT:ĖXO&*6r D Brl a7'7;{YKNu"QEm-Uh-ۊ\g)CԔ}*AT@NyᇬZY%~6Q V1UB"'bG"QV|y?_s/Úgi`R VL@WI{"eCK"%) N$bZ.-F2!}=]%D.bz !žQ%B~dTj*xNE1-UϩĕR(6st]2nϰuEUowwtf_o揨C>TCTn6!ڮ~h5׻A?OeDIӫv 鎼\orG4]J~.l~,>4=@ u:ΆV'^;z.Z;c=bwww;߮%%F#2L.q38Exf̩Ƥ bP\w 9P7Ժ<⤓w '-ՊY"~A?BTM@T%V䓈gGjef[K^ve.jQu[Ī] *C*1>y _]o; `[Ts̳-&ڦ絠ζ;UdQP̏ Q@Q]Rq [)h|b&^k=zwYDucSTL ?vΎN獘Փ7=-PT[*  ֘[w11'Ud$vjW`q'o;/po-YTMj\)ڤf9j+DQ%Xw}b&dWiET+yXO#mNR~CBzd]6|xfL=3iYZ7@(/j~ ZWW }z|ΛTYW<̻ˎW,GTku[~}x I'ybVm6[ݼ՚UɎϳ.Z2lK#cZo&\MFz[WZ^Ȼɻ-&/iYWW\]n6[ͦ^ ;cSνFWmZw;WJlɔ~fE)ξXG+бl]̀t%=hm!.'*j.p_jU،zw UlN>achղAZg<ѥR&ryvf>)Rڬ!Y/> 3ٱǎ>WW*;nޛ>TgL_t#<.K"cZ T$tcARIv}[|!6}"z%+Z׳|F"PXGج{N>u 9/@TQ%*:d6ۉESJoN.QD q"Ɔ14q[vٞ7{ú&H_,l Y}U2̾ޤ($ۓ~X]_Ooh䙅3|B#XN:nn/U֝+>1V-gY%uقQ%{7mTkk[OݺaeDTaꔊCozUhљPwMZrB-"fKhs.="PQ%~E矶kl҆剨&!,@T'5JU X 9nQ%BŬvM~5Q-+%6K-Ԙcjc'Rj:s]Du@ٙE1u[+:ؿFM;z˕Ji-cZͺm߯Hi=`":-GwwwS.U `hYu#&#%G$H]ևvY=ns@ӉLHFM E;e=dzhH9|U6@Tw뭀s1yuʸbkvͻvh{eQEq9%sN{tiuQk*on?\[W=eY zI߂9sٹfVTgocN`w~V5fT6E O_:4{n&(#:-0]@RfS9U0z+D^}b]c i~&"o㐗NOΥ^ӫqyߛeY}"ׁ]eVء8k JרJno*<(OWl8>t8۪Meݫewn͐O ΏE8:y*P7c6*Atfrg1M MCW1{?gV sV@2kR]VE>ˌʸJѶ"U"H_'9BIH%+j Uomv[E[jEJ4"j'Z3:^ lrM{JCT}]/TWmDU DupY[cBQҶX4ƈۿΤoUTb+r!9(qk]TǤ3#ӅUm%jڣ4 ЩMzՉL85[:\cty4uꪻQ->U@T M+ Mܖxq}_`Q AGIEY"[hQblR4'1;.5.$]7^Z0d&u493N m븎 Nmڥ<ZTOT+m ܩYT N`E -";HäZC/Yn {ME5[Q4tf5zFLecN)E)gSUtwww{f_A DusS7fv-k^v\hIfZLQcT|{[ U YcReD\m*"E܎ìw6懁O +{$&]e7=.NƜO3 n0rק=0\v8gRĸ:bbEr]Qʗc9N:+@cLu\My۠aǖp6gǾwMZ"j2iz^nLpBvLю9zlݤ'@Z弤wJndslj{YvĢkҏ1jk)&796JFg@TLO=vgnz |?)_+|(o+>^:-DS(EP˟2*-"lwU-"~"""ަm$Q҈K:IPWdVK^)",-=a[B)jK۴V&2KًoE`orT7%zjekgm+b*{e򢿻5b(º*3ʸUiY^twER%dO=bwww;߮%UVg[ntͧ+ fA}^w6ZtǗM2 j=3i键6^ҹQفE;!ۤ{]_՟Qiyu-lϤ%Y&U;-)Zgo?=bf0߬%ՐٖUAIӍugYZ絤 W?ۙ 5Q-]Ȓ0&]'UM$NZ@.U<IwbH]kmɔVV]'UTۓI9e`)/Ύ _?"O_G?f_Q-CQ lB#]& m~6^mKGjݘUie@TK_II[:mXBKb\(fТoNveoD]w^G"gZ~~G0lLslEgz^ފ#v *]F\fD!RNpdC@wLiECYdԏW\HQ}3Qob1#QG8;L|kYMw4qqBۙ&?lDu n>zrmI n2P$r-I|c;҉{NK7ݔwKɻ}- ճ6#xu&5'KQuMLj2$ˈIu5O_ߖK\f pX2ѴcTj[sKDUy4^?pGPn9|g'2"?-:zݻf-Jک2q7k[4M#)cIVg)&kǥJ%j/Q'.oI`R먶9ۅZوW}ޮhccV_銞<ߣ;J&UiH5R ' !q&Iu9=HwI-Eg&}c@T(6FtE?y/:yף'*)ޛ]%z~{qz&#"(-҅w[5\*Upq8;ҵ]۪˲; \bD(~P/nV?vU DQPd&\%;=3xć/M95.T徎*A*T<2NU DU 6yH_|JDY™aYQ%QD QD D>GO|Wy&Q p6Aƛ<<={ *A VW><C?ؗ>zč}ޜ;* jBd3Q?ӻ>o}m_O#+ [} ^= ;&:;>1x嗣G;u#2yB;oW@T7QpOVGzK;ޘ})&.W=y|,z{WtݐL1v;=#2™aYQd~ףn)Z`wΟa}ыUUYK}z,)\KQDu,uwܶ¹ًoEp?Սjȣ}*@e?ԭ'_lo&߿K_3y NJ0}(^Hڿi5LKPI[W{Q߾޼EU"])ߗwy{+盫8֑+!f EՆW~YCݔOHQa/>ܣ7҉~6)76D~r"I+')"%US{vi$@׺+aE۾mo$wGDss.JGCBD Or\'9P?jvȞ+;5o&=Š,5$?ے*[[wear{Ƥu@7hٳoVؒԳNʧ+/**݂]Q d+{նcT9w,(wtGWWETe``U(Q-"|xƘQ/@$1KQz]՞Hjrժǯ h % Vِ1~w|EUƱE{iHQ=u BTޞӃ@/0)gި6JP|DUXZm1r+Ǔ 6RTel+'ۿ`GNDGEoM4FD