Merge branch 'ignore_connectivity' of github.com:ctiller/grpc into ignore_connectivity

pull/5726/head
Craig Tiller 9 years ago
commit 9768457101
  1. 8
      .clang_complete
  2. 2
      .gitmodules
  3. 2093
      BUILD
  4. 2
      CONTRIBUTING.md
  5. 14
      MANIFEST.md
  6. 1629
      Makefile
  7. 405
      binding.gyp
  8. 823
      build.yaml
  9. 441
      config.m4
  10. 4
      doc/interop-test-descriptions.md
  11. 2
      examples/cpp/helloworld/README.md
  12. 5
      examples/node/README.md
  13. 5
      examples/node/package.json
  14. 6
      examples/python/helloworld/greeter_client.py
  15. 36
      examples/python/route_guide/route_guide_client.py
  16. 4
      examples/ruby/route_guide/route_guide_client.rb
  17. 999
      gRPC.podspec
  18. 707
      grpc.gemspec
  19. 2
      include/grpc++/alarm.h
  20. 2
      include/grpc++/channel.h
  21. 2
      include/grpc++/generic/async_generic_service.h
  22. 35
      include/grpc++/impl/codegen/async_stream.h
  23. 18
      include/grpc++/impl/codegen/async_unary_call.h
  24. 85
      include/grpc++/impl/codegen/call.h
  25. 3
      include/grpc++/impl/codegen/client_context.h
  26. 6
      include/grpc++/impl/codegen/client_unary_call.h
  27. 43
      include/grpc++/impl/codegen/completion_queue.h
  28. 6
      include/grpc++/impl/codegen/completion_queue_tag.h
  29. 97
      include/grpc++/impl/codegen/core_codegen_interface.h
  30. 24
      include/grpc++/impl/codegen/grpc_library.h
  31. 465
      include/grpc++/impl/codegen/impl/async_stream.h
  32. 152
      include/grpc++/impl/codegen/impl/status_code_enum.h
  33. 21
      include/grpc++/impl/codegen/impl/sync.h
  34. 23
      include/grpc++/impl/codegen/method_handler_impl.h
  35. 23
      include/grpc++/impl/codegen/proto_utils.h
  36. 2
      include/grpc++/impl/codegen/rpc_service_method.h
  37. 6
      include/grpc++/impl/codegen/server_context.h
  38. 14
      include/grpc++/impl/codegen/server_interface.h
  39. 20
      include/grpc++/impl/codegen/service_type.h
  40. 72
      include/grpc++/impl/codegen/string_ref.h
  41. 27
      include/grpc++/impl/codegen/sync_stream.h
  42. 14
      include/grpc++/impl/grpc_library.h
  43. 6
      include/grpc++/impl/proto_utils.h
  44. 6
      include/grpc++/security/auth_context.h
  45. 8
      include/grpc++/security/auth_metadata_processor.h
  46. 10
      include/grpc++/security/credentials.h
  47. 8
      include/grpc++/security/server_credentials.h
  48. 2
      include/grpc++/server.h
  49. 10
      include/grpc++/support/byte_buffer.h
  50. 4
      include/grpc++/support/channel_arguments.h
  51. 2
      include/grpc++/support/slice.h
  52. 4
      include/grpc/byte_buffer_reader.h
  53. 6
      include/grpc/census.h
  54. 9
      include/grpc/compression.h
  55. 24
      include/grpc/grpc.h
  56. 10
      include/grpc/grpc_security.h
  57. 2
      include/grpc/impl/codegen/log.h
  58. 39
      include/grpc/impl/codegen/port_platform.h
  59. 6
      include/grpc/impl/codegen/propagation_bits.h
  60. 4
      include/grpc/impl/codegen/slice.h
  61. 4
      include/grpc/impl/codegen/slice_buffer.h
  62. 4
      include/grpc/impl/codegen/time.h
  63. 6
      include/grpc/support/atm_gcc_atomic.h
  64. 2
      include/grpc/support/subprocess.h
  65. 4
      include/grpc/support/tls.h
  66. 48
      include/grpc/support/tls_gcc.h
  67. 8
      include/grpc/support/tls_msvc.h
  68. 4
      include/grpc/support/tls_pthread.h
  69. 707
      package.json
  70. 707
      package.xml
  71. 11
      setup.py
  72. 108
      src/compiler/cpp_generator.cc
  73. 6
      src/compiler/cpp_generator.h
  74. 14
      src/compiler/cpp_plugin.cc
  75. 7
      src/compiler/python_generator.cc
  76. 244
      src/core/channel/client_uchannel.c
  77. 211
      src/core/httpcli/parser.c
  78. 0
      src/core/lib/census/README.md
  79. 8
      src/core/lib/census/aggregation.h
  80. 2
      src/core/lib/census/context.c
  81. 6
      src/core/lib/census/grpc_context.c
  82. 40
      src/core/lib/census/grpc_filter.c
  83. 10
      src/core/lib/census/grpc_filter.h
  84. 70
      src/core/lib/census/grpc_plugin.c
  85. 20
      src/core/lib/census/grpc_plugin.h
  86. 0
      src/core/lib/census/initialize.c
  87. 2
      src/core/lib/census/mlog.c
  88. 6
      src/core/lib/census/mlog.h
  89. 2
      src/core/lib/census/operation.c
  90. 0
      src/core/lib/census/placeholders.c
  91. 8
      src/core/lib/census/rpc_metric_id.h
  92. 2
      src/core/lib/census/tracing.c
  93. 4
      src/core/lib/channel/channel_args.c
  94. 6
      src/core/lib/channel/channel_args.h
  95. 4
      src/core/lib/channel/channel_stack.c
  96. 12
      src/core/lib/channel/channel_stack.h
  97. 258
      src/core/lib/channel/channel_stack_builder.c
  98. 155
      src/core/lib/channel/channel_stack_builder.h
  99. 32
      src/core/lib/channel/client_channel.c
  100. 12
      src/core/lib/channel/client_channel.h
  101. Some files were not shown because too many files have changed in this diff Show More

@ -0,0 +1,8 @@
-Ithird_party/googletest/include
-Ithird_party/googletest
-Iinclude
-Igens
-I.
-Ithird_party/boringssl/include
-Ithird_party/zlib
-Ithird_party/protobuf/src

2
.gitmodules vendored

@ -13,7 +13,7 @@
url = https://github.com/google/googletest.git url = https://github.com/google/googletest.git
[submodule "third_party/boringssl"] [submodule "third_party/boringssl"]
path = third_party/boringssl path = third_party/boringssl
url = https://boringssl.googlesource.com/boringssl url = https://github.com/google/boringssl.git
[submodule "third_party/nanopb"] [submodule "third_party/nanopb"]
path = third_party/nanopb path = third_party/nanopb
url = https://github.com/nanopb/nanopb.git url = https://github.com/nanopb/nanopb.git

2093
BUILD

File diff suppressed because it is too large Load Diff

@ -59,7 +59,7 @@ Each language uses its own build system to work. Currently, the root's Makefile
and the Visual Studio project files are building only the C and C++ source code. and the Visual Studio project files are building only the C and C++ source code.
In order to ease the maintenance of these files, we have a In order to ease the maintenance of these files, we have a
template system. Please do not contribute manual changes to any of the generated template system. Please do not contribute manual changes to any of the generated
files. Instead, modify the template files, or the build.json file, and files. Instead, modify the template files, or the build.yaml file, and
re-generate the project files using the following command: re-generate the project files using the following command:
`./tools/buildgen/generate_projects.sh` `./tools/buildgen/generate_projects.sh`

@ -1,14 +1,28 @@
# Top-level Items by language # Top-level Items by language
## Bazel
* [grpc.bzl](grpc.bzl)
## Node ## Node
* [binding.gyp](binding.gyp) * [binding.gyp](binding.gyp)
* [package.json](package.json)
## Objective-C ## Objective-C
* [gRPC.podspec](gRPC.podspec) * [gRPC.podspec](gRPC.podspec)
## PHP
* [composer.json](composer.json)
* [config.m4](config.m4)
* [package.xml](package.xml)
## Python ## Python
* [requirements.txt](requirements.txt) * [requirements.txt](requirements.txt)
* [setup.cfg](setup.cfg) * [setup.cfg](setup.cfg)
* [setup.py](setup.py) * [setup.py](setup.py)
* [tox.ini](tox.ini) * [tox.ini](tox.ini)
* [PYTHON-MANIFEST.in](PYTHON-MANIFEST.in) * [PYTHON-MANIFEST.in](PYTHON-MANIFEST.in)
## Ruby
* [Gemfile](Gemfile)
* [grpc.gemspec](grpc.gemspec)
* [Rakefile](Rakefile)

1629
Makefile

File diff suppressed because it is too large Load Diff

@ -492,49 +492,50 @@
'dependencies': [ 'dependencies': [
], ],
'sources': [ 'sources': [
'src/core/profiling/basic_timers.c', 'src/core/lib/profiling/basic_timers.c',
'src/core/profiling/stap_timers.c', 'src/core/lib/profiling/stap_timers.c',
'src/core/support/alloc.c', 'src/core/lib/support/alloc.c',
'src/core/support/avl.c', 'src/core/lib/support/avl.c',
'src/core/support/cmdline.c', 'src/core/lib/support/backoff.c',
'src/core/support/cpu_iphone.c', 'src/core/lib/support/cmdline.c',
'src/core/support/cpu_linux.c', 'src/core/lib/support/cpu_iphone.c',
'src/core/support/cpu_posix.c', 'src/core/lib/support/cpu_linux.c',
'src/core/support/cpu_windows.c', 'src/core/lib/support/cpu_posix.c',
'src/core/support/env_linux.c', 'src/core/lib/support/cpu_windows.c',
'src/core/support/env_posix.c', 'src/core/lib/support/env_linux.c',
'src/core/support/env_win32.c', 'src/core/lib/support/env_posix.c',
'src/core/support/histogram.c', 'src/core/lib/support/env_win32.c',
'src/core/support/host_port.c', 'src/core/lib/support/histogram.c',
'src/core/support/load_file.c', 'src/core/lib/support/host_port.c',
'src/core/support/log.c', 'src/core/lib/support/load_file.c',
'src/core/support/log_android.c', 'src/core/lib/support/log.c',
'src/core/support/log_linux.c', 'src/core/lib/support/log_android.c',
'src/core/support/log_posix.c', 'src/core/lib/support/log_linux.c',
'src/core/support/log_win32.c', 'src/core/lib/support/log_posix.c',
'src/core/support/murmur_hash.c', 'src/core/lib/support/log_win32.c',
'src/core/support/slice.c', 'src/core/lib/support/murmur_hash.c',
'src/core/support/slice_buffer.c', 'src/core/lib/support/slice.c',
'src/core/support/stack_lockfree.c', 'src/core/lib/support/slice_buffer.c',
'src/core/support/string.c', 'src/core/lib/support/stack_lockfree.c',
'src/core/support/string_posix.c', 'src/core/lib/support/string.c',
'src/core/support/string_win32.c', 'src/core/lib/support/string_posix.c',
'src/core/support/subprocess_posix.c', 'src/core/lib/support/string_win32.c',
'src/core/support/subprocess_windows.c', 'src/core/lib/support/subprocess_posix.c',
'src/core/support/sync.c', 'src/core/lib/support/subprocess_windows.c',
'src/core/support/sync_posix.c', 'src/core/lib/support/sync.c',
'src/core/support/sync_win32.c', 'src/core/lib/support/sync_posix.c',
'src/core/support/thd.c', 'src/core/lib/support/sync_win32.c',
'src/core/support/thd_posix.c', 'src/core/lib/support/thd.c',
'src/core/support/thd_win32.c', 'src/core/lib/support/thd_posix.c',
'src/core/support/time.c', 'src/core/lib/support/thd_win32.c',
'src/core/support/time_posix.c', 'src/core/lib/support/time.c',
'src/core/support/time_precise.c', 'src/core/lib/support/time_posix.c',
'src/core/support/time_win32.c', 'src/core/lib/support/time_precise.c',
'src/core/support/tls_pthread.c', 'src/core/lib/support/time_win32.c',
'src/core/support/tmpfile_posix.c', 'src/core/lib/support/tls_pthread.c',
'src/core/support/tmpfile_win32.c', 'src/core/lib/support/tmpfile_posix.c',
'src/core/support/wrap_memcpy.c', 'src/core/lib/support/tmpfile_win32.c',
'src/core/lib/support/wrap_memcpy.c',
], ],
"conditions": [ "conditions": [
['OS == "mac"', { ['OS == "mac"', {
@ -557,163 +558,167 @@
'gpr', 'gpr',
], ],
'sources': [ 'sources': [
'src/core/census/grpc_context.c', 'src/core/lib/census/grpc_context.c',
'src/core/census/grpc_filter.c', 'src/core/lib/census/grpc_filter.c',
'src/core/channel/channel_args.c', 'src/core/lib/census/grpc_plugin.c',
'src/core/channel/channel_stack.c', 'src/core/lib/channel/channel_args.c',
'src/core/channel/client_channel.c', 'src/core/lib/channel/channel_stack.c',
'src/core/channel/client_uchannel.c', 'src/core/lib/channel/channel_stack_builder.c',
'src/core/channel/compress_filter.c', 'src/core/lib/channel/client_channel.c',
'src/core/channel/connected_channel.c', 'src/core/lib/channel/compress_filter.c',
'src/core/channel/http_client_filter.c', 'src/core/lib/channel/connected_channel.c',
'src/core/channel/http_server_filter.c', 'src/core/lib/channel/http_client_filter.c',
'src/core/channel/subchannel_call_holder.c', 'src/core/lib/channel/http_server_filter.c',
'src/core/client_config/client_config.c', 'src/core/lib/channel/subchannel_call_holder.c',
'src/core/client_config/connector.c', 'src/core/lib/client_config/client_config.c',
'src/core/client_config/default_initial_connect_string.c', 'src/core/lib/client_config/connector.c',
'src/core/client_config/initial_connect_string.c', 'src/core/lib/client_config/default_initial_connect_string.c',
'src/core/client_config/lb_policies/load_balancer_api.c', 'src/core/lib/client_config/initial_connect_string.c',
'src/core/client_config/lb_policies/pick_first.c', 'src/core/lib/client_config/lb_policies/load_balancer_api.c',
'src/core/client_config/lb_policies/round_robin.c', 'src/core/lib/client_config/lb_policies/pick_first.c',
'src/core/client_config/lb_policy.c', 'src/core/lib/client_config/lb_policies/round_robin.c',
'src/core/client_config/lb_policy_factory.c', 'src/core/lib/client_config/lb_policy.c',
'src/core/client_config/lb_policy_registry.c', 'src/core/lib/client_config/lb_policy_factory.c',
'src/core/client_config/resolver.c', 'src/core/lib/client_config/lb_policy_registry.c',
'src/core/client_config/resolver_factory.c', 'src/core/lib/client_config/resolver.c',
'src/core/client_config/resolver_registry.c', 'src/core/lib/client_config/resolver_factory.c',
'src/core/client_config/resolvers/dns_resolver.c', 'src/core/lib/client_config/resolver_registry.c',
'src/core/client_config/resolvers/sockaddr_resolver.c', 'src/core/lib/client_config/resolvers/dns_resolver.c',
'src/core/client_config/subchannel.c', 'src/core/lib/client_config/resolvers/sockaddr_resolver.c',
'src/core/client_config/subchannel_factory.c', 'src/core/lib/client_config/subchannel.c',
'src/core/client_config/subchannel_index.c', 'src/core/lib/client_config/subchannel_factory.c',
'src/core/client_config/uri_parser.c', 'src/core/lib/client_config/subchannel_index.c',
'src/core/compression/compression_algorithm.c', 'src/core/lib/client_config/uri_parser.c',
'src/core/compression/message_compress.c', 'src/core/lib/compression/compression_algorithm.c',
'src/core/debug/trace.c', 'src/core/lib/compression/message_compress.c',
'src/core/httpcli/format_request.c', 'src/core/lib/debug/trace.c',
'src/core/httpcli/httpcli.c', 'src/core/lib/http/format_request.c',
'src/core/httpcli/parser.c', 'src/core/lib/http/httpcli.c',
'src/core/iomgr/closure.c', 'src/core/lib/http/parser.c',
'src/core/iomgr/endpoint.c', 'src/core/lib/iomgr/closure.c',
'src/core/iomgr/endpoint_pair_posix.c', 'src/core/lib/iomgr/endpoint.c',
'src/core/iomgr/endpoint_pair_windows.c', 'src/core/lib/iomgr/endpoint_pair_posix.c',
'src/core/iomgr/exec_ctx.c', 'src/core/lib/iomgr/endpoint_pair_windows.c',
'src/core/iomgr/executor.c', 'src/core/lib/iomgr/exec_ctx.c',
'src/core/iomgr/fd_posix.c', 'src/core/lib/iomgr/executor.c',
'src/core/iomgr/iocp_windows.c', 'src/core/lib/iomgr/fd_posix.c',
'src/core/iomgr/iomgr.c', 'src/core/lib/iomgr/iocp_windows.c',
'src/core/iomgr/iomgr_posix.c', 'src/core/lib/iomgr/iomgr.c',
'src/core/iomgr/iomgr_windows.c', 'src/core/lib/iomgr/iomgr_posix.c',
'src/core/iomgr/pollset_multipoller_with_epoll.c', 'src/core/lib/iomgr/iomgr_windows.c',
'src/core/iomgr/pollset_multipoller_with_poll_posix.c', 'src/core/lib/iomgr/pollset_multipoller_with_epoll.c',
'src/core/iomgr/pollset_posix.c', 'src/core/lib/iomgr/pollset_multipoller_with_poll_posix.c',
'src/core/iomgr/pollset_set_posix.c', 'src/core/lib/iomgr/pollset_posix.c',
'src/core/iomgr/pollset_set_windows.c', 'src/core/lib/iomgr/pollset_set_posix.c',
'src/core/iomgr/pollset_windows.c', 'src/core/lib/iomgr/pollset_set_windows.c',
'src/core/iomgr/resolve_address_posix.c', 'src/core/lib/iomgr/pollset_windows.c',
'src/core/iomgr/resolve_address_windows.c', 'src/core/lib/iomgr/resolve_address_posix.c',
'src/core/iomgr/sockaddr_utils.c', 'src/core/lib/iomgr/resolve_address_windows.c',
'src/core/iomgr/socket_utils_common_posix.c', 'src/core/lib/iomgr/sockaddr_utils.c',
'src/core/iomgr/socket_utils_linux.c', 'src/core/lib/iomgr/socket_utils_common_posix.c',
'src/core/iomgr/socket_utils_posix.c', 'src/core/lib/iomgr/socket_utils_linux.c',
'src/core/iomgr/socket_windows.c', 'src/core/lib/iomgr/socket_utils_posix.c',
'src/core/iomgr/tcp_client_posix.c', 'src/core/lib/iomgr/socket_windows.c',
'src/core/iomgr/tcp_client_windows.c', 'src/core/lib/iomgr/tcp_client_posix.c',
'src/core/iomgr/tcp_posix.c', 'src/core/lib/iomgr/tcp_client_windows.c',
'src/core/iomgr/tcp_server_posix.c', 'src/core/lib/iomgr/tcp_posix.c',
'src/core/iomgr/tcp_server_windows.c', 'src/core/lib/iomgr/tcp_server_posix.c',
'src/core/iomgr/tcp_windows.c', 'src/core/lib/iomgr/tcp_server_windows.c',
'src/core/iomgr/time_averaged_stats.c', 'src/core/lib/iomgr/tcp_windows.c',
'src/core/iomgr/timer.c', 'src/core/lib/iomgr/time_averaged_stats.c',
'src/core/iomgr/timer_heap.c', 'src/core/lib/iomgr/timer.c',
'src/core/iomgr/udp_server.c', 'src/core/lib/iomgr/timer_heap.c',
'src/core/iomgr/wakeup_fd_eventfd.c', 'src/core/lib/iomgr/udp_server.c',
'src/core/iomgr/wakeup_fd_nospecial.c', 'src/core/lib/iomgr/unix_sockets_posix.c',
'src/core/iomgr/wakeup_fd_pipe.c', 'src/core/lib/iomgr/unix_sockets_posix_noop.c',
'src/core/iomgr/wakeup_fd_posix.c', 'src/core/lib/iomgr/wakeup_fd_eventfd.c',
'src/core/iomgr/workqueue_posix.c', 'src/core/lib/iomgr/wakeup_fd_nospecial.c',
'src/core/iomgr/workqueue_windows.c', 'src/core/lib/iomgr/wakeup_fd_pipe.c',
'src/core/json/json.c', 'src/core/lib/iomgr/wakeup_fd_posix.c',
'src/core/json/json_reader.c', 'src/core/lib/iomgr/workqueue_posix.c',
'src/core/json/json_string.c', 'src/core/lib/iomgr/workqueue_windows.c',
'src/core/json/json_writer.c', 'src/core/lib/json/json.c',
'src/core/proto/grpc/lb/v0/load_balancer.pb.c', 'src/core/lib/json/json_reader.c',
'src/core/surface/alarm.c', 'src/core/lib/json/json_string.c',
'src/core/surface/api_trace.c', 'src/core/lib/json/json_writer.c',
'src/core/surface/byte_buffer.c', 'src/core/lib/proto/grpc/lb/v0/load_balancer.pb.c',
'src/core/surface/byte_buffer_reader.c', 'src/core/lib/surface/alarm.c',
'src/core/surface/call.c', 'src/core/lib/surface/api_trace.c',
'src/core/surface/call_details.c', 'src/core/lib/surface/byte_buffer.c',
'src/core/surface/call_log_batch.c', 'src/core/lib/surface/byte_buffer_reader.c',
'src/core/surface/channel.c', 'src/core/lib/surface/call.c',
'src/core/surface/channel_connectivity.c', 'src/core/lib/surface/call_details.c',
'src/core/surface/channel_create.c', 'src/core/lib/surface/call_log_batch.c',
'src/core/surface/channel_ping.c', 'src/core/lib/surface/channel.c',
'src/core/surface/completion_queue.c', 'src/core/lib/surface/channel_connectivity.c',
'src/core/surface/event_string.c', 'src/core/lib/surface/channel_create.c',
'src/core/surface/init.c', 'src/core/lib/surface/channel_init.c',
'src/core/surface/lame_client.c', 'src/core/lib/surface/channel_ping.c',
'src/core/surface/metadata_array.c', 'src/core/lib/surface/channel_stack_type.c',
'src/core/surface/server.c', 'src/core/lib/surface/completion_queue.c',
'src/core/surface/server_chttp2.c', 'src/core/lib/surface/event_string.c',
'src/core/surface/server_create.c', 'src/core/lib/surface/init.c',
'src/core/surface/validate_metadata.c', 'src/core/lib/surface/lame_client.c',
'src/core/surface/version.c', 'src/core/lib/surface/metadata_array.c',
'src/core/transport/byte_stream.c', 'src/core/lib/surface/server.c',
'src/core/transport/chttp2/alpn.c', 'src/core/lib/surface/server_chttp2.c',
'src/core/transport/chttp2/bin_encoder.c', 'src/core/lib/surface/validate_metadata.c',
'src/core/transport/chttp2/frame_data.c', 'src/core/lib/surface/version.c',
'src/core/transport/chttp2/frame_goaway.c', 'src/core/lib/transport/byte_stream.c',
'src/core/transport/chttp2/frame_ping.c', 'src/core/lib/transport/chttp2/alpn.c',
'src/core/transport/chttp2/frame_rst_stream.c', 'src/core/lib/transport/chttp2/bin_encoder.c',
'src/core/transport/chttp2/frame_settings.c', 'src/core/lib/transport/chttp2/frame_data.c',
'src/core/transport/chttp2/frame_window_update.c', 'src/core/lib/transport/chttp2/frame_goaway.c',
'src/core/transport/chttp2/hpack_encoder.c', 'src/core/lib/transport/chttp2/frame_ping.c',
'src/core/transport/chttp2/hpack_parser.c', 'src/core/lib/transport/chttp2/frame_rst_stream.c',
'src/core/transport/chttp2/hpack_table.c', 'src/core/lib/transport/chttp2/frame_settings.c',
'src/core/transport/chttp2/huffsyms.c', 'src/core/lib/transport/chttp2/frame_window_update.c',
'src/core/transport/chttp2/incoming_metadata.c', 'src/core/lib/transport/chttp2/hpack_encoder.c',
'src/core/transport/chttp2/parsing.c', 'src/core/lib/transport/chttp2/hpack_parser.c',
'src/core/transport/chttp2/status_conversion.c', 'src/core/lib/transport/chttp2/hpack_table.c',
'src/core/transport/chttp2/stream_lists.c', 'src/core/lib/transport/chttp2/huffsyms.c',
'src/core/transport/chttp2/stream_map.c', 'src/core/lib/transport/chttp2/incoming_metadata.c',
'src/core/transport/chttp2/timeout_encoding.c', 'src/core/lib/transport/chttp2/parsing.c',
'src/core/transport/chttp2/varint.c', 'src/core/lib/transport/chttp2/status_conversion.c',
'src/core/transport/chttp2/writing.c', 'src/core/lib/transport/chttp2/stream_lists.c',
'src/core/transport/chttp2_transport.c', 'src/core/lib/transport/chttp2/stream_map.c',
'src/core/transport/connectivity_state.c', 'src/core/lib/transport/chttp2/timeout_encoding.c',
'src/core/transport/metadata.c', 'src/core/lib/transport/chttp2/varint.c',
'src/core/transport/metadata_batch.c', 'src/core/lib/transport/chttp2/writing.c',
'src/core/transport/static_metadata.c', 'src/core/lib/transport/chttp2_transport.c',
'src/core/transport/transport.c', 'src/core/lib/transport/connectivity_state.c',
'src/core/transport/transport_op_string.c', 'src/core/lib/transport/metadata.c',
'src/core/httpcli/httpcli_security_connector.c', 'src/core/lib/transport/metadata_batch.c',
'src/core/security/b64.c', 'src/core/lib/transport/static_metadata.c',
'src/core/security/client_auth_filter.c', 'src/core/lib/transport/transport.c',
'src/core/security/credentials.c', 'src/core/lib/transport/transport_op_string.c',
'src/core/security/credentials_metadata.c', 'src/core/lib/http/httpcli_security_connector.c',
'src/core/security/credentials_posix.c', 'src/core/lib/security/b64.c',
'src/core/security/credentials_win32.c', 'src/core/lib/security/client_auth_filter.c',
'src/core/security/google_default_credentials.c', 'src/core/lib/security/credentials.c',
'src/core/security/handshake.c', 'src/core/lib/security/credentials_metadata.c',
'src/core/security/json_token.c', 'src/core/lib/security/credentials_posix.c',
'src/core/security/jwt_verifier.c', 'src/core/lib/security/credentials_win32.c',
'src/core/security/secure_endpoint.c', 'src/core/lib/security/google_default_credentials.c',
'src/core/security/security_connector.c', 'src/core/lib/security/handshake.c',
'src/core/security/security_context.c', 'src/core/lib/security/json_token.c',
'src/core/security/server_auth_filter.c', 'src/core/lib/security/jwt_verifier.c',
'src/core/security/server_secure_chttp2.c', 'src/core/lib/security/secure_endpoint.c',
'src/core/surface/init_secure.c', 'src/core/lib/security/security_connector.c',
'src/core/surface/secure_channel_create.c', 'src/core/lib/security/security_context.c',
'src/core/tsi/fake_transport_security.c', 'src/core/lib/security/server_auth_filter.c',
'src/core/tsi/ssl_transport_security.c', 'src/core/lib/security/server_secure_chttp2.c',
'src/core/tsi/transport_security.c', 'src/core/lib/surface/init_secure.c',
'src/core/census/context.c', 'src/core/lib/surface/secure_channel_create.c',
'src/core/census/initialize.c', 'src/core/lib/tsi/fake_transport_security.c',
'src/core/census/mlog.c', 'src/core/lib/tsi/ssl_transport_security.c',
'src/core/census/operation.c', 'src/core/lib/tsi/transport_security.c',
'src/core/census/placeholders.c', 'src/core/lib/census/context.c',
'src/core/census/tracing.c', 'src/core/lib/census/initialize.c',
'src/core/lib/census/mlog.c',
'src/core/lib/census/operation.c',
'src/core/lib/census/placeholders.c',
'src/core/lib/census/tracing.c',
'third_party/nanopb/pb_common.c', 'third_party/nanopb/pb_common.c',
'third_party/nanopb/pb_decode.c', 'third_party/nanopb/pb_decode.c',
'third_party/nanopb/pb_encode.c', 'third_party/nanopb/pb_encode.c',

File diff suppressed because it is too large Load Diff

@ -36,206 +36,211 @@ if test "$PHP_GRPC" != "no"; then
src/php/ext/grpc/server.c \ src/php/ext/grpc/server.c \
src/php/ext/grpc/server_credentials.c \ src/php/ext/grpc/server_credentials.c \
src/php/ext/grpc/timeval.c \ src/php/ext/grpc/timeval.c \
src/core/profiling/basic_timers.c \ src/core/lib/profiling/basic_timers.c \
src/core/profiling/stap_timers.c \ src/core/lib/profiling/stap_timers.c \
src/core/support/alloc.c \ src/core/lib/support/alloc.c \
src/core/support/avl.c \ src/core/lib/support/avl.c \
src/core/support/cmdline.c \ src/core/lib/support/backoff.c \
src/core/support/cpu_iphone.c \ src/core/lib/support/cmdline.c \
src/core/support/cpu_linux.c \ src/core/lib/support/cpu_iphone.c \
src/core/support/cpu_posix.c \ src/core/lib/support/cpu_linux.c \
src/core/support/cpu_windows.c \ src/core/lib/support/cpu_posix.c \
src/core/support/env_linux.c \ src/core/lib/support/cpu_windows.c \
src/core/support/env_posix.c \ src/core/lib/support/env_linux.c \
src/core/support/env_win32.c \ src/core/lib/support/env_posix.c \
src/core/support/histogram.c \ src/core/lib/support/env_win32.c \
src/core/support/host_port.c \ src/core/lib/support/histogram.c \
src/core/support/load_file.c \ src/core/lib/support/host_port.c \
src/core/support/log.c \ src/core/lib/support/load_file.c \
src/core/support/log_android.c \ src/core/lib/support/log.c \
src/core/support/log_linux.c \ src/core/lib/support/log_android.c \
src/core/support/log_posix.c \ src/core/lib/support/log_linux.c \
src/core/support/log_win32.c \ src/core/lib/support/log_posix.c \
src/core/support/murmur_hash.c \ src/core/lib/support/log_win32.c \
src/core/support/slice.c \ src/core/lib/support/murmur_hash.c \
src/core/support/slice_buffer.c \ src/core/lib/support/slice.c \
src/core/support/stack_lockfree.c \ src/core/lib/support/slice_buffer.c \
src/core/support/string.c \ src/core/lib/support/stack_lockfree.c \
src/core/support/string_posix.c \ src/core/lib/support/string.c \
src/core/support/string_win32.c \ src/core/lib/support/string_posix.c \
src/core/support/subprocess_posix.c \ src/core/lib/support/string_win32.c \
src/core/support/subprocess_windows.c \ src/core/lib/support/subprocess_posix.c \
src/core/support/sync.c \ src/core/lib/support/subprocess_windows.c \
src/core/support/sync_posix.c \ src/core/lib/support/sync.c \
src/core/support/sync_win32.c \ src/core/lib/support/sync_posix.c \
src/core/support/thd.c \ src/core/lib/support/sync_win32.c \
src/core/support/thd_posix.c \ src/core/lib/support/thd.c \
src/core/support/thd_win32.c \ src/core/lib/support/thd_posix.c \
src/core/support/time.c \ src/core/lib/support/thd_win32.c \
src/core/support/time_posix.c \ src/core/lib/support/time.c \
src/core/support/time_precise.c \ src/core/lib/support/time_posix.c \
src/core/support/time_win32.c \ src/core/lib/support/time_precise.c \
src/core/support/tls_pthread.c \ src/core/lib/support/time_win32.c \
src/core/support/tmpfile_posix.c \ src/core/lib/support/tls_pthread.c \
src/core/support/tmpfile_win32.c \ src/core/lib/support/tmpfile_posix.c \
src/core/support/wrap_memcpy.c \ src/core/lib/support/tmpfile_win32.c \
src/core/census/grpc_context.c \ src/core/lib/support/wrap_memcpy.c \
src/core/census/grpc_filter.c \ src/core/lib/census/grpc_context.c \
src/core/channel/channel_args.c \ src/core/lib/census/grpc_filter.c \
src/core/channel/channel_stack.c \ src/core/lib/census/grpc_plugin.c \
src/core/channel/client_channel.c \ src/core/lib/channel/channel_args.c \
src/core/channel/client_uchannel.c \ src/core/lib/channel/channel_stack.c \
src/core/channel/compress_filter.c \ src/core/lib/channel/channel_stack_builder.c \
src/core/channel/connected_channel.c \ src/core/lib/channel/client_channel.c \
src/core/channel/http_client_filter.c \ src/core/lib/channel/compress_filter.c \
src/core/channel/http_server_filter.c \ src/core/lib/channel/connected_channel.c \
src/core/channel/subchannel_call_holder.c \ src/core/lib/channel/http_client_filter.c \
src/core/client_config/client_config.c \ src/core/lib/channel/http_server_filter.c \
src/core/client_config/connector.c \ src/core/lib/channel/subchannel_call_holder.c \
src/core/client_config/default_initial_connect_string.c \ src/core/lib/client_config/client_config.c \
src/core/client_config/initial_connect_string.c \ src/core/lib/client_config/connector.c \
src/core/client_config/lb_policies/load_balancer_api.c \ src/core/lib/client_config/default_initial_connect_string.c \
src/core/client_config/lb_policies/pick_first.c \ src/core/lib/client_config/initial_connect_string.c \
src/core/client_config/lb_policies/round_robin.c \ src/core/lib/client_config/lb_policies/load_balancer_api.c \
src/core/client_config/lb_policy.c \ src/core/lib/client_config/lb_policies/pick_first.c \
src/core/client_config/lb_policy_factory.c \ src/core/lib/client_config/lb_policies/round_robin.c \
src/core/client_config/lb_policy_registry.c \ src/core/lib/client_config/lb_policy.c \
src/core/client_config/resolver.c \ src/core/lib/client_config/lb_policy_factory.c \
src/core/client_config/resolver_factory.c \ src/core/lib/client_config/lb_policy_registry.c \
src/core/client_config/resolver_registry.c \ src/core/lib/client_config/resolver.c \
src/core/client_config/resolvers/dns_resolver.c \ src/core/lib/client_config/resolver_factory.c \
src/core/client_config/resolvers/sockaddr_resolver.c \ src/core/lib/client_config/resolver_registry.c \
src/core/client_config/subchannel.c \ src/core/lib/client_config/resolvers/dns_resolver.c \
src/core/client_config/subchannel_factory.c \ src/core/lib/client_config/resolvers/sockaddr_resolver.c \
src/core/client_config/subchannel_index.c \ src/core/lib/client_config/subchannel.c \
src/core/client_config/uri_parser.c \ src/core/lib/client_config/subchannel_factory.c \
src/core/compression/compression_algorithm.c \ src/core/lib/client_config/subchannel_index.c \
src/core/compression/message_compress.c \ src/core/lib/client_config/uri_parser.c \
src/core/debug/trace.c \ src/core/lib/compression/compression_algorithm.c \
src/core/httpcli/format_request.c \ src/core/lib/compression/message_compress.c \
src/core/httpcli/httpcli.c \ src/core/lib/debug/trace.c \
src/core/httpcli/parser.c \ src/core/lib/http/format_request.c \
src/core/iomgr/closure.c \ src/core/lib/http/httpcli.c \
src/core/iomgr/endpoint.c \ src/core/lib/http/parser.c \
src/core/iomgr/endpoint_pair_posix.c \ src/core/lib/iomgr/closure.c \
src/core/iomgr/endpoint_pair_windows.c \ src/core/lib/iomgr/endpoint.c \
src/core/iomgr/exec_ctx.c \ src/core/lib/iomgr/endpoint_pair_posix.c \
src/core/iomgr/executor.c \ src/core/lib/iomgr/endpoint_pair_windows.c \
src/core/iomgr/fd_posix.c \ src/core/lib/iomgr/exec_ctx.c \
src/core/iomgr/iocp_windows.c \ src/core/lib/iomgr/executor.c \
src/core/iomgr/iomgr.c \ src/core/lib/iomgr/fd_posix.c \
src/core/iomgr/iomgr_posix.c \ src/core/lib/iomgr/iocp_windows.c \
src/core/iomgr/iomgr_windows.c \ src/core/lib/iomgr/iomgr.c \
src/core/iomgr/pollset_multipoller_with_epoll.c \ src/core/lib/iomgr/iomgr_posix.c \
src/core/iomgr/pollset_multipoller_with_poll_posix.c \ src/core/lib/iomgr/iomgr_windows.c \
src/core/iomgr/pollset_posix.c \ src/core/lib/iomgr/pollset_multipoller_with_epoll.c \
src/core/iomgr/pollset_set_posix.c \ src/core/lib/iomgr/pollset_multipoller_with_poll_posix.c \
src/core/iomgr/pollset_set_windows.c \ src/core/lib/iomgr/pollset_posix.c \
src/core/iomgr/pollset_windows.c \ src/core/lib/iomgr/pollset_set_posix.c \
src/core/iomgr/resolve_address_posix.c \ src/core/lib/iomgr/pollset_set_windows.c \
src/core/iomgr/resolve_address_windows.c \ src/core/lib/iomgr/pollset_windows.c \
src/core/iomgr/sockaddr_utils.c \ src/core/lib/iomgr/resolve_address_posix.c \
src/core/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/resolve_address_windows.c \
src/core/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/sockaddr_utils.c \
src/core/iomgr/socket_utils_posix.c \ src/core/lib/iomgr/socket_utils_common_posix.c \
src/core/iomgr/socket_windows.c \ src/core/lib/iomgr/socket_utils_linux.c \
src/core/iomgr/tcp_client_posix.c \ src/core/lib/iomgr/socket_utils_posix.c \
src/core/iomgr/tcp_client_windows.c \ src/core/lib/iomgr/socket_windows.c \
src/core/iomgr/tcp_posix.c \ src/core/lib/iomgr/tcp_client_posix.c \
src/core/iomgr/tcp_server_posix.c \ src/core/lib/iomgr/tcp_client_windows.c \
src/core/iomgr/tcp_server_windows.c \ src/core/lib/iomgr/tcp_posix.c \
src/core/iomgr/tcp_windows.c \ src/core/lib/iomgr/tcp_server_posix.c \
src/core/iomgr/time_averaged_stats.c \ src/core/lib/iomgr/tcp_server_windows.c \
src/core/iomgr/timer.c \ src/core/lib/iomgr/tcp_windows.c \
src/core/iomgr/timer_heap.c \ src/core/lib/iomgr/time_averaged_stats.c \
src/core/iomgr/udp_server.c \ src/core/lib/iomgr/timer.c \
src/core/iomgr/wakeup_fd_eventfd.c \ src/core/lib/iomgr/timer_heap.c \
src/core/iomgr/wakeup_fd_nospecial.c \ src/core/lib/iomgr/udp_server.c \
src/core/iomgr/wakeup_fd_pipe.c \ src/core/lib/iomgr/unix_sockets_posix.c \
src/core/iomgr/wakeup_fd_posix.c \ src/core/lib/iomgr/unix_sockets_posix_noop.c \
src/core/iomgr/workqueue_posix.c \ src/core/lib/iomgr/wakeup_fd_eventfd.c \
src/core/iomgr/workqueue_windows.c \ src/core/lib/iomgr/wakeup_fd_nospecial.c \
src/core/json/json.c \ src/core/lib/iomgr/wakeup_fd_pipe.c \
src/core/json/json_reader.c \ src/core/lib/iomgr/wakeup_fd_posix.c \
src/core/json/json_string.c \ src/core/lib/iomgr/workqueue_posix.c \
src/core/json/json_writer.c \ src/core/lib/iomgr/workqueue_windows.c \
src/core/proto/grpc/lb/v0/load_balancer.pb.c \ src/core/lib/json/json.c \
src/core/surface/alarm.c \ src/core/lib/json/json_reader.c \
src/core/surface/api_trace.c \ src/core/lib/json/json_string.c \
src/core/surface/byte_buffer.c \ src/core/lib/json/json_writer.c \
src/core/surface/byte_buffer_reader.c \ src/core/lib/proto/grpc/lb/v0/load_balancer.pb.c \
src/core/surface/call.c \ src/core/lib/surface/alarm.c \
src/core/surface/call_details.c \ src/core/lib/surface/api_trace.c \
src/core/surface/call_log_batch.c \ src/core/lib/surface/byte_buffer.c \
src/core/surface/channel.c \ src/core/lib/surface/byte_buffer_reader.c \
src/core/surface/channel_connectivity.c \ src/core/lib/surface/call.c \
src/core/surface/channel_create.c \ src/core/lib/surface/call_details.c \
src/core/surface/channel_ping.c \ src/core/lib/surface/call_log_batch.c \
src/core/surface/completion_queue.c \ src/core/lib/surface/channel.c \
src/core/surface/event_string.c \ src/core/lib/surface/channel_connectivity.c \
src/core/surface/init.c \ src/core/lib/surface/channel_create.c \
src/core/surface/lame_client.c \ src/core/lib/surface/channel_init.c \
src/core/surface/metadata_array.c \ src/core/lib/surface/channel_ping.c \
src/core/surface/server.c \ src/core/lib/surface/channel_stack_type.c \
src/core/surface/server_chttp2.c \ src/core/lib/surface/completion_queue.c \
src/core/surface/server_create.c \ src/core/lib/surface/event_string.c \
src/core/surface/validate_metadata.c \ src/core/lib/surface/init.c \
src/core/surface/version.c \ src/core/lib/surface/lame_client.c \
src/core/transport/byte_stream.c \ src/core/lib/surface/metadata_array.c \
src/core/transport/chttp2/alpn.c \ src/core/lib/surface/server.c \
src/core/transport/chttp2/bin_encoder.c \ src/core/lib/surface/server_chttp2.c \
src/core/transport/chttp2/frame_data.c \ src/core/lib/surface/validate_metadata.c \
src/core/transport/chttp2/frame_goaway.c \ src/core/lib/surface/version.c \
src/core/transport/chttp2/frame_ping.c \ src/core/lib/transport/byte_stream.c \
src/core/transport/chttp2/frame_rst_stream.c \ src/core/lib/transport/chttp2/alpn.c \
src/core/transport/chttp2/frame_settings.c \ src/core/lib/transport/chttp2/bin_encoder.c \
src/core/transport/chttp2/frame_window_update.c \ src/core/lib/transport/chttp2/frame_data.c \
src/core/transport/chttp2/hpack_encoder.c \ src/core/lib/transport/chttp2/frame_goaway.c \
src/core/transport/chttp2/hpack_parser.c \ src/core/lib/transport/chttp2/frame_ping.c \
src/core/transport/chttp2/hpack_table.c \ src/core/lib/transport/chttp2/frame_rst_stream.c \
src/core/transport/chttp2/huffsyms.c \ src/core/lib/transport/chttp2/frame_settings.c \
src/core/transport/chttp2/incoming_metadata.c \ src/core/lib/transport/chttp2/frame_window_update.c \
src/core/transport/chttp2/parsing.c \ src/core/lib/transport/chttp2/hpack_encoder.c \
src/core/transport/chttp2/status_conversion.c \ src/core/lib/transport/chttp2/hpack_parser.c \
src/core/transport/chttp2/stream_lists.c \ src/core/lib/transport/chttp2/hpack_table.c \
src/core/transport/chttp2/stream_map.c \ src/core/lib/transport/chttp2/huffsyms.c \
src/core/transport/chttp2/timeout_encoding.c \ src/core/lib/transport/chttp2/incoming_metadata.c \
src/core/transport/chttp2/varint.c \ src/core/lib/transport/chttp2/parsing.c \
src/core/transport/chttp2/writing.c \ src/core/lib/transport/chttp2/status_conversion.c \
src/core/transport/chttp2_transport.c \ src/core/lib/transport/chttp2/stream_lists.c \
src/core/transport/connectivity_state.c \ src/core/lib/transport/chttp2/stream_map.c \
src/core/transport/metadata.c \ src/core/lib/transport/chttp2/timeout_encoding.c \
src/core/transport/metadata_batch.c \ src/core/lib/transport/chttp2/varint.c \
src/core/transport/static_metadata.c \ src/core/lib/transport/chttp2/writing.c \
src/core/transport/transport.c \ src/core/lib/transport/chttp2_transport.c \
src/core/transport/transport_op_string.c \ src/core/lib/transport/connectivity_state.c \
src/core/httpcli/httpcli_security_connector.c \ src/core/lib/transport/metadata.c \
src/core/security/b64.c \ src/core/lib/transport/metadata_batch.c \
src/core/security/client_auth_filter.c \ src/core/lib/transport/static_metadata.c \
src/core/security/credentials.c \ src/core/lib/transport/transport.c \
src/core/security/credentials_metadata.c \ src/core/lib/transport/transport_op_string.c \
src/core/security/credentials_posix.c \ src/core/lib/http/httpcli_security_connector.c \
src/core/security/credentials_win32.c \ src/core/lib/security/b64.c \
src/core/security/google_default_credentials.c \ src/core/lib/security/client_auth_filter.c \
src/core/security/handshake.c \ src/core/lib/security/credentials.c \
src/core/security/json_token.c \ src/core/lib/security/credentials_metadata.c \
src/core/security/jwt_verifier.c \ src/core/lib/security/credentials_posix.c \
src/core/security/secure_endpoint.c \ src/core/lib/security/credentials_win32.c \
src/core/security/security_connector.c \ src/core/lib/security/google_default_credentials.c \
src/core/security/security_context.c \ src/core/lib/security/handshake.c \
src/core/security/server_auth_filter.c \ src/core/lib/security/json_token.c \
src/core/security/server_secure_chttp2.c \ src/core/lib/security/jwt_verifier.c \
src/core/surface/init_secure.c \ src/core/lib/security/secure_endpoint.c \
src/core/surface/secure_channel_create.c \ src/core/lib/security/security_connector.c \
src/core/tsi/fake_transport_security.c \ src/core/lib/security/security_context.c \
src/core/tsi/ssl_transport_security.c \ src/core/lib/security/server_auth_filter.c \
src/core/tsi/transport_security.c \ src/core/lib/security/server_secure_chttp2.c \
src/core/census/context.c \ src/core/lib/surface/init_secure.c \
src/core/census/initialize.c \ src/core/lib/surface/secure_channel_create.c \
src/core/census/mlog.c \ src/core/lib/tsi/fake_transport_security.c \
src/core/census/operation.c \ src/core/lib/tsi/ssl_transport_security.c \
src/core/census/placeholders.c \ src/core/lib/tsi/transport_security.c \
src/core/census/tracing.c \ src/core/lib/census/context.c \
src/core/lib/census/initialize.c \
src/core/lib/census/mlog.c \
src/core/lib/census/operation.c \
src/core/lib/census/placeholders.c \
src/core/lib/census/tracing.c \
third_party/nanopb/pb_common.c \ third_party/nanopb/pb_common.c \
third_party/nanopb/pb_decode.c \ third_party/nanopb/pb_decode.c \
third_party/nanopb/pb_encode.c \ third_party/nanopb/pb_encode.c \
@ -541,24 +546,24 @@ if test "$PHP_GRPC" != "no"; then
PHP_ADD_BUILD_DIR($ext_builddir/src/php/ext/grpc) PHP_ADD_BUILD_DIR($ext_builddir/src/php/ext/grpc)
PHP_ADD_BUILD_DIR($ext_builddir/src/boringssl) PHP_ADD_BUILD_DIR($ext_builddir/src/boringssl)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/census) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/census)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/channel) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/channel)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/client_config) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/client_config)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/client_config/lb_policies) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/client_config/lb_policies)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/client_config/resolvers) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/client_config/resolvers)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/compression) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/compression)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/debug) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/debug)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/httpcli) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/http)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/iomgr) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/iomgr)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/json) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/json)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/profiling) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/profiling)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/proto/grpc/lb/v0) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/proto/grpc/lb/v0)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/security) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/security)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/support) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/support)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/surface) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/surface)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/transport) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/transport)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/transport/chttp2) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/transport/chttp2)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/tsi) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/tsi)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/aes) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/aes)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/asn1) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/asn1)

@ -27,7 +27,7 @@ Clients should accept these arguments:
* Whether to use a plaintext or encrypted connection * Whether to use a plaintext or encrypted connection
* --use_test_ca=BOOLEAN * --use_test_ca=BOOLEAN
* Whether to replace platform root CAs with * Whether to replace platform root CAs with
[ca.pem](https://github.com/grpc/grpc/blob/master/src/core/tsi/test_creds/ca.pem) [ca.pem](https://github.com/grpc/grpc/blob/master/src/core/lib/tsi/test_creds/ca.pem)
as the CA root as the CA root
* --default_service_account=ACCOUNT_EMAIL * --default_service_account=ACCOUNT_EMAIL
* Email of the GCE default service account. Only applicable * Email of the GCE default service account. Only applicable
@ -920,7 +920,7 @@ Servers should accept these arguments:
* Whether to use a plaintext or encrypted connection * Whether to use a plaintext or encrypted connection
Servers must support TLS with ALPN. They should use 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) [server1.pem](https://github.com/grpc/grpc/blob/master/src/core/lib/tsi/test_creds/server1.pem)
for their certificate. for their certificate.
### EmptyCall ### EmptyCall

@ -207,7 +207,7 @@ completion queue to return the tag. The basic flow is
helloworld::Greeter::AsyncService service; helloworld::Greeter::AsyncService service;
ServerBuilder builder; ServerBuilder builder;
builder.AddListeningPort("0.0.0.0:50051", InsecureServerCredentials()); builder.AddListeningPort("0.0.0.0:50051", InsecureServerCredentials());
builder.RegisterAsyncService(&service); builder.RegisterService(&service);
auto cq = builder.AddCompletionQueue(); auto cq = builder.AddCompletionQueue();
auto server = builder.BuildAndStart(); auto server = builder.BuildAndStart();
``` ```

@ -10,6 +10,11 @@ INSTALL
------- -------
```sh ```sh
$ # Get the gRPC repository
$ export REPO_ROOT=grpc # REPO root can be any directory of your choice
$ git clone https://github.com/grpc/grpc.git $REPO_ROOT
$ cd $REPO_ROOT
$ cd examples/node $ cd examples/node
$ npm install $ npm install
``` ```

@ -2,6 +2,9 @@
"name": "grpc-examples", "name": "grpc-examples",
"version": "0.1.0", "version": "0.1.0",
"dependencies": { "dependencies": {
"grpc": "0.13.0" "async": "^1.5.2",
"grpc": "0.13.0",
"lodash": "^4.6.1",
"minimist": "^1.2.0"
} }
} }

@ -1,4 +1,4 @@
# Copyright 2015, Google Inc. # Copyright 2015-2016, Google Inc.
# All rights reserved. # All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
@ -29,6 +29,8 @@
"""The Python implementation of the GRPC helloworld.Greeter client.""" """The Python implementation of the GRPC helloworld.Greeter client."""
from __future__ import print_function
from grpc.beta import implementations from grpc.beta import implementations
import helloworld_pb2 import helloworld_pb2
@ -40,7 +42,7 @@ def run():
channel = implementations.insecure_channel('localhost', 50051) channel = implementations.insecure_channel('localhost', 50051)
stub = helloworld_pb2.beta_create_Greeter_stub(channel) stub = helloworld_pb2.beta_create_Greeter_stub(channel)
response = stub.SayHello(helloworld_pb2.HelloRequest(name='you'), _TIMEOUT_SECONDS) response = stub.SayHello(helloworld_pb2.HelloRequest(name='you'), _TIMEOUT_SECONDS)
print "Greeter client received: " + response.message print("Greeter client received: " + response.message)
if __name__ == '__main__': if __name__ == '__main__':

@ -1,4 +1,4 @@
# Copyright 2015, Google Inc. # Copyright 2015-2016, Google Inc.
# All rights reserved. # All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
@ -29,6 +29,8 @@
"""The Python implementation of the gRPC route guide client.""" """The Python implementation of the gRPC route guide client."""
from __future__ import print_function
import random import random
import time import time
@ -49,13 +51,13 @@ def make_route_note(message, latitude, longitude):
def guide_get_one_feature(stub, point): def guide_get_one_feature(stub, point):
feature = stub.GetFeature(point, _TIMEOUT_SECONDS) feature = stub.GetFeature(point, _TIMEOUT_SECONDS)
if not feature.location: if not feature.location:
print "Server returned incomplete feature" print("Server returned incomplete feature")
return return
if feature.name: if feature.name:
print "Feature called %s at %s" % (feature.name, feature.location) print("Feature called %s at %s" % (feature.name, feature.location))
else: else:
print "Found no feature at %s" % feature.location print("Found no feature at %s" % feature.location)
def guide_get_feature(stub): def guide_get_feature(stub):
@ -69,18 +71,18 @@ def guide_list_features(stub):
latitude=400000000, longitude = -750000000), latitude=400000000, longitude = -750000000),
hi=route_guide_pb2.Point( hi=route_guide_pb2.Point(
latitude = 420000000, longitude = -730000000)) latitude = 420000000, longitude = -730000000))
print "Looking for features between 40, -75 and 42, -73" print("Looking for features between 40, -75 and 42, -73")
features = stub.ListFeatures(rect, _TIMEOUT_SECONDS) features = stub.ListFeatures(rect, _TIMEOUT_SECONDS)
for feature in features: for feature in features:
print "Feature called %s at %s" % (feature.name, feature.location) print("Feature called %s at %s" % (feature.name, feature.location))
def generate_route(feature_list): def generate_route(feature_list):
for _ in range(0, 10): for _ in range(0, 10):
random_feature = feature_list[random.randint(0, len(feature_list) - 1)] random_feature = feature_list[random.randint(0, len(feature_list) - 1)]
print "Visiting point %s" % random_feature.location print("Visiting point %s" % random_feature.location)
yield random_feature.location yield random_feature.location
time.sleep(random.uniform(0.5, 1.5)) time.sleep(random.uniform(0.5, 1.5))
@ -90,10 +92,10 @@ def guide_record_route(stub):
route_iter = generate_route(feature_list) route_iter = generate_route(feature_list)
route_summary = stub.RecordRoute(route_iter, _TIMEOUT_SECONDS) route_summary = stub.RecordRoute(route_iter, _TIMEOUT_SECONDS)
print "Finished trip with %s points " % route_summary.point_count print("Finished trip with %s points " % route_summary.point_count)
print "Passed %s features " % route_summary.feature_count print("Passed %s features " % route_summary.feature_count)
print "Travelled %s meters " % route_summary.distance print("Travelled %s meters " % route_summary.distance)
print "It took %s seconds " % route_summary.elapsed_time print("It took %s seconds " % route_summary.elapsed_time)
def generate_messages(): def generate_messages():
@ -105,7 +107,7 @@ def generate_messages():
make_route_note("Fifth message", 1, 0), make_route_note("Fifth message", 1, 0),
] ]
for msg in messages: for msg in messages:
print "Sending %s at %s" % (msg.message, msg.location) print("Sending %s at %s" % (msg.message, msg.location))
yield msg yield msg
time.sleep(random.uniform(0.5, 1.0)) time.sleep(random.uniform(0.5, 1.0))
@ -113,19 +115,19 @@ def generate_messages():
def guide_route_chat(stub): def guide_route_chat(stub):
responses = stub.RouteChat(generate_messages(), _TIMEOUT_SECONDS) responses = stub.RouteChat(generate_messages(), _TIMEOUT_SECONDS)
for response in responses: for response in responses:
print "Received message %s at %s" % (response.message, response.location) print("Received message %s at %s" % (response.message, response.location))
def run(): def run():
channel = implementations.insecure_channel('localhost', 50051) channel = implementations.insecure_channel('localhost', 50051)
stub = route_guide_pb2.beta_create_RouteGuide_stub(channel) stub = route_guide_pb2.beta_create_RouteGuide_stub(channel)
print "-------------- GetFeature --------------" print("-------------- GetFeature --------------")
guide_get_feature(stub) guide_get_feature(stub)
print "-------------- ListFeatures --------------" print("-------------- ListFeatures --------------")
guide_list_features(stub) guide_list_features(stub)
print "-------------- RecordRoute --------------" print("-------------- RecordRoute --------------")
guide_record_route(stub) guide_record_route(stub)
print "-------------- RouteChat --------------" print("-------------- RouteChat --------------")
guide_route_chat(stub) guide_route_chat(stub)

@ -38,6 +38,7 @@ lib_dir = File.join(File.dirname(this_dir), 'lib')
$LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir) $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
require 'grpc' require 'grpc'
require 'multi_json'
require 'route_guide_services' require 'route_guide_services'
include Routeguide include Routeguide
@ -115,9 +116,8 @@ def run_record_route(stub, features)
p 'RecordRoute' p 'RecordRoute'
p '-----------' p '-----------'
points_on_route = 10 # arbitrary points_on_route = 10 # arbitrary
deadline = points_on_route # as delay b/w each is max 1 second
reqs = RandomRoute.new(features, points_on_route) reqs = RandomRoute.new(features, points_on_route)
resp = stub.record_route(reqs.each, deadline) resp = stub.record_route(reqs.each)
p "summary: #{resp.inspect}" p "summary: #{resp.inspect}"
end end

File diff suppressed because it is too large Load Diff

@ -88,366 +88,377 @@ Gem::Specification.new do |s|
s.files += %w( include/grpc/impl/codegen/sync_posix.h ) s.files += %w( include/grpc/impl/codegen/sync_posix.h )
s.files += %w( include/grpc/impl/codegen/sync_win32.h ) s.files += %w( include/grpc/impl/codegen/sync_win32.h )
s.files += %w( include/grpc/impl/codegen/time.h ) s.files += %w( include/grpc/impl/codegen/time.h )
s.files += %w( src/core/profiling/timers.h ) s.files += %w( src/core/lib/profiling/timers.h )
s.files += %w( src/core/support/block_annotate.h ) s.files += %w( src/core/lib/support/backoff.h )
s.files += %w( src/core/support/env.h ) s.files += %w( src/core/lib/support/block_annotate.h )
s.files += %w( src/core/support/load_file.h ) s.files += %w( src/core/lib/support/env.h )
s.files += %w( src/core/support/murmur_hash.h ) s.files += %w( src/core/lib/support/load_file.h )
s.files += %w( src/core/support/stack_lockfree.h ) s.files += %w( src/core/lib/support/murmur_hash.h )
s.files += %w( src/core/support/string.h ) s.files += %w( src/core/lib/support/stack_lockfree.h )
s.files += %w( src/core/support/string_win32.h ) s.files += %w( src/core/lib/support/string.h )
s.files += %w( src/core/support/thd_internal.h ) s.files += %w( src/core/lib/support/string_win32.h )
s.files += %w( src/core/support/time_precise.h ) s.files += %w( src/core/lib/support/thd_internal.h )
s.files += %w( src/core/support/tmpfile.h ) s.files += %w( src/core/lib/support/time_precise.h )
s.files += %w( src/core/profiling/basic_timers.c ) s.files += %w( src/core/lib/support/tmpfile.h )
s.files += %w( src/core/profiling/stap_timers.c ) s.files += %w( src/core/lib/profiling/basic_timers.c )
s.files += %w( src/core/support/alloc.c ) s.files += %w( src/core/lib/profiling/stap_timers.c )
s.files += %w( src/core/support/avl.c ) s.files += %w( src/core/lib/support/alloc.c )
s.files += %w( src/core/support/cmdline.c ) s.files += %w( src/core/lib/support/avl.c )
s.files += %w( src/core/support/cpu_iphone.c ) s.files += %w( src/core/lib/support/backoff.c )
s.files += %w( src/core/support/cpu_linux.c ) s.files += %w( src/core/lib/support/cmdline.c )
s.files += %w( src/core/support/cpu_posix.c ) s.files += %w( src/core/lib/support/cpu_iphone.c )
s.files += %w( src/core/support/cpu_windows.c ) s.files += %w( src/core/lib/support/cpu_linux.c )
s.files += %w( src/core/support/env_linux.c ) s.files += %w( src/core/lib/support/cpu_posix.c )
s.files += %w( src/core/support/env_posix.c ) s.files += %w( src/core/lib/support/cpu_windows.c )
s.files += %w( src/core/support/env_win32.c ) s.files += %w( src/core/lib/support/env_linux.c )
s.files += %w( src/core/support/histogram.c ) s.files += %w( src/core/lib/support/env_posix.c )
s.files += %w( src/core/support/host_port.c ) s.files += %w( src/core/lib/support/env_win32.c )
s.files += %w( src/core/support/load_file.c ) s.files += %w( src/core/lib/support/histogram.c )
s.files += %w( src/core/support/log.c ) s.files += %w( src/core/lib/support/host_port.c )
s.files += %w( src/core/support/log_android.c ) s.files += %w( src/core/lib/support/load_file.c )
s.files += %w( src/core/support/log_linux.c ) s.files += %w( src/core/lib/support/log.c )
s.files += %w( src/core/support/log_posix.c ) s.files += %w( src/core/lib/support/log_android.c )
s.files += %w( src/core/support/log_win32.c ) s.files += %w( src/core/lib/support/log_linux.c )
s.files += %w( src/core/support/murmur_hash.c ) s.files += %w( src/core/lib/support/log_posix.c )
s.files += %w( src/core/support/slice.c ) s.files += %w( src/core/lib/support/log_win32.c )
s.files += %w( src/core/support/slice_buffer.c ) s.files += %w( src/core/lib/support/murmur_hash.c )
s.files += %w( src/core/support/stack_lockfree.c ) s.files += %w( src/core/lib/support/slice.c )
s.files += %w( src/core/support/string.c ) s.files += %w( src/core/lib/support/slice_buffer.c )
s.files += %w( src/core/support/string_posix.c ) s.files += %w( src/core/lib/support/stack_lockfree.c )
s.files += %w( src/core/support/string_win32.c ) s.files += %w( src/core/lib/support/string.c )
s.files += %w( src/core/support/subprocess_posix.c ) s.files += %w( src/core/lib/support/string_posix.c )
s.files += %w( src/core/support/subprocess_windows.c ) s.files += %w( src/core/lib/support/string_win32.c )
s.files += %w( src/core/support/sync.c ) s.files += %w( src/core/lib/support/subprocess_posix.c )
s.files += %w( src/core/support/sync_posix.c ) s.files += %w( src/core/lib/support/subprocess_windows.c )
s.files += %w( src/core/support/sync_win32.c ) s.files += %w( src/core/lib/support/sync.c )
s.files += %w( src/core/support/thd.c ) s.files += %w( src/core/lib/support/sync_posix.c )
s.files += %w( src/core/support/thd_posix.c ) s.files += %w( src/core/lib/support/sync_win32.c )
s.files += %w( src/core/support/thd_win32.c ) s.files += %w( src/core/lib/support/thd.c )
s.files += %w( src/core/support/time.c ) s.files += %w( src/core/lib/support/thd_posix.c )
s.files += %w( src/core/support/time_posix.c ) s.files += %w( src/core/lib/support/thd_win32.c )
s.files += %w( src/core/support/time_precise.c ) s.files += %w( src/core/lib/support/time.c )
s.files += %w( src/core/support/time_win32.c ) s.files += %w( src/core/lib/support/time_posix.c )
s.files += %w( src/core/support/tls_pthread.c ) s.files += %w( src/core/lib/support/time_precise.c )
s.files += %w( src/core/support/tmpfile_posix.c ) s.files += %w( src/core/lib/support/time_win32.c )
s.files += %w( src/core/support/tmpfile_win32.c ) s.files += %w( src/core/lib/support/tls_pthread.c )
s.files += %w( src/core/support/wrap_memcpy.c ) s.files += %w( src/core/lib/support/tmpfile_posix.c )
s.files += %w( src/core/lib/support/tmpfile_win32.c )
s.files += %w( src/core/lib/support/wrap_memcpy.c )
s.files += %w( include/grpc/grpc_security.h ) s.files += %w( include/grpc/grpc_security.h )
s.files += %w( include/grpc/byte_buffer.h )
s.files += %w( include/grpc/byte_buffer_reader.h )
s.files += %w( include/grpc/compression.h )
s.files += %w( include/grpc/grpc.h )
s.files += %w( include/grpc/status.h )
s.files += %w( include/grpc/impl/codegen/byte_buffer.h ) s.files += %w( include/grpc/impl/codegen/byte_buffer.h )
s.files += %w( include/grpc/impl/codegen/compression_types.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/connectivity_state.h )
s.files += %w( include/grpc/impl/codegen/grpc_types.h ) s.files += %w( include/grpc/impl/codegen/grpc_types.h )
s.files += %w( include/grpc/impl/codegen/propagation_bits.h ) s.files += %w( include/grpc/impl/codegen/propagation_bits.h )
s.files += %w( include/grpc/impl/codegen/status.h ) s.files += %w( include/grpc/impl/codegen/status.h )
s.files += %w( include/grpc/byte_buffer.h )
s.files += %w( include/grpc/byte_buffer_reader.h )
s.files += %w( include/grpc/compression.h )
s.files += %w( include/grpc/grpc.h )
s.files += %w( include/grpc/status.h )
s.files += %w( include/grpc/census.h ) s.files += %w( include/grpc/census.h )
s.files += %w( src/core/census/grpc_filter.h ) s.files += %w( src/core/lib/census/grpc_filter.h )
s.files += %w( src/core/channel/channel_args.h ) s.files += %w( src/core/lib/census/grpc_plugin.h )
s.files += %w( src/core/channel/channel_stack.h ) s.files += %w( src/core/lib/channel/channel_args.h )
s.files += %w( src/core/channel/client_channel.h ) s.files += %w( src/core/lib/channel/channel_stack.h )
s.files += %w( src/core/channel/client_uchannel.h ) s.files += %w( src/core/lib/channel/channel_stack_builder.h )
s.files += %w( src/core/channel/compress_filter.h ) s.files += %w( src/core/lib/channel/client_channel.h )
s.files += %w( src/core/channel/connected_channel.h ) s.files += %w( src/core/lib/channel/compress_filter.h )
s.files += %w( src/core/channel/context.h ) s.files += %w( src/core/lib/channel/connected_channel.h )
s.files += %w( src/core/channel/http_client_filter.h ) s.files += %w( src/core/lib/channel/context.h )
s.files += %w( src/core/channel/http_server_filter.h ) s.files += %w( src/core/lib/channel/http_client_filter.h )
s.files += %w( src/core/channel/subchannel_call_holder.h ) s.files += %w( src/core/lib/channel/http_server_filter.h )
s.files += %w( src/core/client_config/client_config.h ) s.files += %w( src/core/lib/channel/subchannel_call_holder.h )
s.files += %w( src/core/client_config/connector.h ) s.files += %w( src/core/lib/client_config/client_config.h )
s.files += %w( src/core/client_config/initial_connect_string.h ) s.files += %w( src/core/lib/client_config/connector.h )
s.files += %w( src/core/client_config/lb_policies/load_balancer_api.h ) s.files += %w( src/core/lib/client_config/initial_connect_string.h )
s.files += %w( src/core/client_config/lb_policies/pick_first.h ) s.files += %w( src/core/lib/client_config/lb_policies/load_balancer_api.h )
s.files += %w( src/core/client_config/lb_policies/round_robin.h ) s.files += %w( src/core/lib/client_config/lb_policies/pick_first.h )
s.files += %w( src/core/client_config/lb_policy.h ) s.files += %w( src/core/lib/client_config/lb_policies/round_robin.h )
s.files += %w( src/core/client_config/lb_policy_factory.h ) s.files += %w( src/core/lib/client_config/lb_policy.h )
s.files += %w( src/core/client_config/lb_policy_registry.h ) s.files += %w( src/core/lib/client_config/lb_policy_factory.h )
s.files += %w( src/core/client_config/resolver.h ) s.files += %w( src/core/lib/client_config/lb_policy_registry.h )
s.files += %w( src/core/client_config/resolver_factory.h ) s.files += %w( src/core/lib/client_config/resolver.h )
s.files += %w( src/core/client_config/resolver_registry.h ) s.files += %w( src/core/lib/client_config/resolver_factory.h )
s.files += %w( src/core/client_config/resolvers/dns_resolver.h ) s.files += %w( src/core/lib/client_config/resolver_registry.h )
s.files += %w( src/core/client_config/resolvers/sockaddr_resolver.h ) s.files += %w( src/core/lib/client_config/resolvers/dns_resolver.h )
s.files += %w( src/core/client_config/subchannel.h ) s.files += %w( src/core/lib/client_config/resolvers/sockaddr_resolver.h )
s.files += %w( src/core/client_config/subchannel_factory.h ) s.files += %w( src/core/lib/client_config/subchannel.h )
s.files += %w( src/core/client_config/subchannel_index.h ) s.files += %w( src/core/lib/client_config/subchannel_factory.h )
s.files += %w( src/core/client_config/uri_parser.h ) s.files += %w( src/core/lib/client_config/subchannel_index.h )
s.files += %w( src/core/compression/algorithm_metadata.h ) s.files += %w( src/core/lib/client_config/uri_parser.h )
s.files += %w( src/core/compression/message_compress.h ) s.files += %w( src/core/lib/compression/algorithm_metadata.h )
s.files += %w( src/core/debug/trace.h ) s.files += %w( src/core/lib/compression/message_compress.h )
s.files += %w( src/core/httpcli/format_request.h ) s.files += %w( src/core/lib/debug/trace.h )
s.files += %w( src/core/httpcli/httpcli.h ) s.files += %w( src/core/lib/http/format_request.h )
s.files += %w( src/core/httpcli/parser.h ) s.files += %w( src/core/lib/http/httpcli.h )
s.files += %w( src/core/iomgr/closure.h ) s.files += %w( src/core/lib/http/parser.h )
s.files += %w( src/core/iomgr/endpoint.h ) s.files += %w( src/core/lib/iomgr/closure.h )
s.files += %w( src/core/iomgr/endpoint_pair.h ) s.files += %w( src/core/lib/iomgr/endpoint.h )
s.files += %w( src/core/iomgr/exec_ctx.h ) s.files += %w( src/core/lib/iomgr/endpoint_pair.h )
s.files += %w( src/core/iomgr/executor.h ) s.files += %w( src/core/lib/iomgr/exec_ctx.h )
s.files += %w( src/core/iomgr/fd_posix.h ) s.files += %w( src/core/lib/iomgr/executor.h )
s.files += %w( src/core/iomgr/iocp_windows.h ) s.files += %w( src/core/lib/iomgr/fd_posix.h )
s.files += %w( src/core/iomgr/iomgr.h ) s.files += %w( src/core/lib/iomgr/iocp_windows.h )
s.files += %w( src/core/iomgr/iomgr_internal.h ) s.files += %w( src/core/lib/iomgr/iomgr.h )
s.files += %w( src/core/iomgr/iomgr_posix.h ) s.files += %w( src/core/lib/iomgr/iomgr_internal.h )
s.files += %w( src/core/iomgr/pollset.h ) s.files += %w( src/core/lib/iomgr/iomgr_posix.h )
s.files += %w( src/core/iomgr/pollset_posix.h ) s.files += %w( src/core/lib/iomgr/pollset.h )
s.files += %w( src/core/iomgr/pollset_set.h ) s.files += %w( src/core/lib/iomgr/pollset_posix.h )
s.files += %w( src/core/iomgr/pollset_set_posix.h ) s.files += %w( src/core/lib/iomgr/pollset_set.h )
s.files += %w( src/core/iomgr/pollset_set_windows.h ) s.files += %w( src/core/lib/iomgr/pollset_set_posix.h )
s.files += %w( src/core/iomgr/pollset_windows.h ) s.files += %w( src/core/lib/iomgr/pollset_set_windows.h )
s.files += %w( src/core/iomgr/resolve_address.h ) s.files += %w( src/core/lib/iomgr/pollset_windows.h )
s.files += %w( src/core/iomgr/sockaddr.h ) s.files += %w( src/core/lib/iomgr/resolve_address.h )
s.files += %w( src/core/iomgr/sockaddr_posix.h ) s.files += %w( src/core/lib/iomgr/sockaddr.h )
s.files += %w( src/core/iomgr/sockaddr_utils.h ) s.files += %w( src/core/lib/iomgr/sockaddr_posix.h )
s.files += %w( src/core/iomgr/sockaddr_win32.h ) s.files += %w( src/core/lib/iomgr/sockaddr_utils.h )
s.files += %w( src/core/iomgr/socket_utils_posix.h ) s.files += %w( src/core/lib/iomgr/sockaddr_win32.h )
s.files += %w( src/core/iomgr/socket_windows.h ) s.files += %w( src/core/lib/iomgr/socket_utils_posix.h )
s.files += %w( src/core/iomgr/tcp_client.h ) s.files += %w( src/core/lib/iomgr/socket_windows.h )
s.files += %w( src/core/iomgr/tcp_posix.h ) s.files += %w( src/core/lib/iomgr/tcp_client.h )
s.files += %w( src/core/iomgr/tcp_server.h ) s.files += %w( src/core/lib/iomgr/tcp_posix.h )
s.files += %w( src/core/iomgr/tcp_windows.h ) s.files += %w( src/core/lib/iomgr/tcp_server.h )
s.files += %w( src/core/iomgr/time_averaged_stats.h ) s.files += %w( src/core/lib/iomgr/tcp_windows.h )
s.files += %w( src/core/iomgr/timer.h ) s.files += %w( src/core/lib/iomgr/time_averaged_stats.h )
s.files += %w( src/core/iomgr/timer_heap.h ) s.files += %w( src/core/lib/iomgr/timer.h )
s.files += %w( src/core/iomgr/udp_server.h ) s.files += %w( src/core/lib/iomgr/timer_heap.h )
s.files += %w( src/core/iomgr/wakeup_fd_pipe.h ) s.files += %w( src/core/lib/iomgr/udp_server.h )
s.files += %w( src/core/iomgr/wakeup_fd_posix.h ) s.files += %w( src/core/lib/iomgr/unix_sockets_posix.h )
s.files += %w( src/core/iomgr/workqueue.h ) s.files += %w( src/core/lib/iomgr/wakeup_fd_pipe.h )
s.files += %w( src/core/iomgr/workqueue_posix.h ) s.files += %w( src/core/lib/iomgr/wakeup_fd_posix.h )
s.files += %w( src/core/iomgr/workqueue_windows.h ) s.files += %w( src/core/lib/iomgr/workqueue.h )
s.files += %w( src/core/json/json.h ) s.files += %w( src/core/lib/iomgr/workqueue_posix.h )
s.files += %w( src/core/json/json_common.h ) s.files += %w( src/core/lib/iomgr/workqueue_windows.h )
s.files += %w( src/core/json/json_reader.h ) s.files += %w( src/core/lib/json/json.h )
s.files += %w( src/core/json/json_writer.h ) s.files += %w( src/core/lib/json/json_common.h )
s.files += %w( src/core/proto/grpc/lb/v0/load_balancer.pb.h ) s.files += %w( src/core/lib/json/json_reader.h )
s.files += %w( src/core/statistics/census_interface.h ) s.files += %w( src/core/lib/json/json_writer.h )
s.files += %w( src/core/statistics/census_rpc_stats.h ) s.files += %w( src/core/lib/proto/grpc/lb/v0/load_balancer.pb.h )
s.files += %w( src/core/surface/api_trace.h ) s.files += %w( src/core/lib/statistics/census_interface.h )
s.files += %w( src/core/surface/call.h ) s.files += %w( src/core/lib/statistics/census_rpc_stats.h )
s.files += %w( src/core/surface/call_test_only.h ) s.files += %w( src/core/lib/surface/api_trace.h )
s.files += %w( src/core/surface/channel.h ) s.files += %w( src/core/lib/surface/call.h )
s.files += %w( src/core/surface/completion_queue.h ) s.files += %w( src/core/lib/surface/call_test_only.h )
s.files += %w( src/core/surface/event_string.h ) s.files += %w( src/core/lib/surface/channel.h )
s.files += %w( src/core/surface/init.h ) s.files += %w( src/core/lib/surface/channel_init.h )
s.files += %w( src/core/surface/server.h ) s.files += %w( src/core/lib/surface/channel_stack_type.h )
s.files += %w( src/core/surface/surface_trace.h ) s.files += %w( src/core/lib/surface/completion_queue.h )
s.files += %w( src/core/transport/byte_stream.h ) s.files += %w( src/core/lib/surface/event_string.h )
s.files += %w( src/core/transport/chttp2/alpn.h ) s.files += %w( src/core/lib/surface/init.h )
s.files += %w( src/core/transport/chttp2/bin_encoder.h ) s.files += %w( src/core/lib/surface/lame_client.h )
s.files += %w( src/core/transport/chttp2/frame.h ) s.files += %w( src/core/lib/surface/server.h )
s.files += %w( src/core/transport/chttp2/frame_data.h ) s.files += %w( src/core/lib/surface/surface_trace.h )
s.files += %w( src/core/transport/chttp2/frame_goaway.h ) s.files += %w( src/core/lib/transport/byte_stream.h )
s.files += %w( src/core/transport/chttp2/frame_ping.h ) s.files += %w( src/core/lib/transport/chttp2/alpn.h )
s.files += %w( src/core/transport/chttp2/frame_rst_stream.h ) s.files += %w( src/core/lib/transport/chttp2/bin_encoder.h )
s.files += %w( src/core/transport/chttp2/frame_settings.h ) s.files += %w( src/core/lib/transport/chttp2/frame.h )
s.files += %w( src/core/transport/chttp2/frame_window_update.h ) s.files += %w( src/core/lib/transport/chttp2/frame_data.h )
s.files += %w( src/core/transport/chttp2/hpack_encoder.h ) s.files += %w( src/core/lib/transport/chttp2/frame_goaway.h )
s.files += %w( src/core/transport/chttp2/hpack_parser.h ) s.files += %w( src/core/lib/transport/chttp2/frame_ping.h )
s.files += %w( src/core/transport/chttp2/hpack_table.h ) s.files += %w( src/core/lib/transport/chttp2/frame_rst_stream.h )
s.files += %w( src/core/transport/chttp2/http2_errors.h ) s.files += %w( src/core/lib/transport/chttp2/frame_settings.h )
s.files += %w( src/core/transport/chttp2/huffsyms.h ) s.files += %w( src/core/lib/transport/chttp2/frame_window_update.h )
s.files += %w( src/core/transport/chttp2/incoming_metadata.h ) s.files += %w( src/core/lib/transport/chttp2/hpack_encoder.h )
s.files += %w( src/core/transport/chttp2/internal.h ) s.files += %w( src/core/lib/transport/chttp2/hpack_parser.h )
s.files += %w( src/core/transport/chttp2/status_conversion.h ) s.files += %w( src/core/lib/transport/chttp2/hpack_table.h )
s.files += %w( src/core/transport/chttp2/stream_map.h ) s.files += %w( src/core/lib/transport/chttp2/http2_errors.h )
s.files += %w( src/core/transport/chttp2/timeout_encoding.h ) s.files += %w( src/core/lib/transport/chttp2/huffsyms.h )
s.files += %w( src/core/transport/chttp2/varint.h ) s.files += %w( src/core/lib/transport/chttp2/incoming_metadata.h )
s.files += %w( src/core/transport/chttp2_transport.h ) s.files += %w( src/core/lib/transport/chttp2/internal.h )
s.files += %w( src/core/transport/connectivity_state.h ) s.files += %w( src/core/lib/transport/chttp2/status_conversion.h )
s.files += %w( src/core/transport/metadata.h ) s.files += %w( src/core/lib/transport/chttp2/stream_map.h )
s.files += %w( src/core/transport/metadata_batch.h ) s.files += %w( src/core/lib/transport/chttp2/timeout_encoding.h )
s.files += %w( src/core/transport/static_metadata.h ) s.files += %w( src/core/lib/transport/chttp2/varint.h )
s.files += %w( src/core/transport/transport.h ) s.files += %w( src/core/lib/transport/chttp2_transport.h )
s.files += %w( src/core/transport/transport_impl.h ) s.files += %w( src/core/lib/transport/connectivity_state.h )
s.files += %w( src/core/security/auth_filters.h ) s.files += %w( src/core/lib/transport/metadata.h )
s.files += %w( src/core/security/b64.h ) s.files += %w( src/core/lib/transport/metadata_batch.h )
s.files += %w( src/core/security/credentials.h ) s.files += %w( src/core/lib/transport/static_metadata.h )
s.files += %w( src/core/security/handshake.h ) s.files += %w( src/core/lib/transport/transport.h )
s.files += %w( src/core/security/json_token.h ) s.files += %w( src/core/lib/transport/transport_impl.h )
s.files += %w( src/core/security/jwt_verifier.h ) s.files += %w( src/core/lib/security/auth_filters.h )
s.files += %w( src/core/security/secure_endpoint.h ) s.files += %w( src/core/lib/security/b64.h )
s.files += %w( src/core/security/security_connector.h ) s.files += %w( src/core/lib/security/credentials.h )
s.files += %w( src/core/security/security_context.h ) s.files += %w( src/core/lib/security/handshake.h )
s.files += %w( src/core/tsi/fake_transport_security.h ) s.files += %w( src/core/lib/security/json_token.h )
s.files += %w( src/core/tsi/ssl_transport_security.h ) s.files += %w( src/core/lib/security/jwt_verifier.h )
s.files += %w( src/core/tsi/ssl_types.h ) s.files += %w( src/core/lib/security/secure_endpoint.h )
s.files += %w( src/core/tsi/transport_security.h ) s.files += %w( src/core/lib/security/security_connector.h )
s.files += %w( src/core/tsi/transport_security_interface.h ) s.files += %w( src/core/lib/security/security_context.h )
s.files += %w( src/core/census/aggregation.h ) s.files += %w( src/core/lib/tsi/fake_transport_security.h )
s.files += %w( src/core/census/mlog.h ) s.files += %w( src/core/lib/tsi/ssl_transport_security.h )
s.files += %w( src/core/census/rpc_metric_id.h ) s.files += %w( src/core/lib/tsi/ssl_types.h )
s.files += %w( src/core/lib/tsi/transport_security.h )
s.files += %w( src/core/lib/tsi/transport_security_interface.h )
s.files += %w( src/core/lib/census/aggregation.h )
s.files += %w( src/core/lib/census/mlog.h )
s.files += %w( src/core/lib/census/rpc_metric_id.h )
s.files += %w( third_party/nanopb/pb.h ) s.files += %w( third_party/nanopb/pb.h )
s.files += %w( third_party/nanopb/pb_common.h ) s.files += %w( third_party/nanopb/pb_common.h )
s.files += %w( third_party/nanopb/pb_decode.h ) s.files += %w( third_party/nanopb/pb_decode.h )
s.files += %w( third_party/nanopb/pb_encode.h ) s.files += %w( third_party/nanopb/pb_encode.h )
s.files += %w( src/core/census/grpc_context.c ) s.files += %w( src/core/lib/census/grpc_context.c )
s.files += %w( src/core/census/grpc_filter.c ) s.files += %w( src/core/lib/census/grpc_filter.c )
s.files += %w( src/core/channel/channel_args.c ) s.files += %w( src/core/lib/census/grpc_plugin.c )
s.files += %w( src/core/channel/channel_stack.c ) s.files += %w( src/core/lib/channel/channel_args.c )
s.files += %w( src/core/channel/client_channel.c ) s.files += %w( src/core/lib/channel/channel_stack.c )
s.files += %w( src/core/channel/client_uchannel.c ) s.files += %w( src/core/lib/channel/channel_stack_builder.c )
s.files += %w( src/core/channel/compress_filter.c ) s.files += %w( src/core/lib/channel/client_channel.c )
s.files += %w( src/core/channel/connected_channel.c ) s.files += %w( src/core/lib/channel/compress_filter.c )
s.files += %w( src/core/channel/http_client_filter.c ) s.files += %w( src/core/lib/channel/connected_channel.c )
s.files += %w( src/core/channel/http_server_filter.c ) s.files += %w( src/core/lib/channel/http_client_filter.c )
s.files += %w( src/core/channel/subchannel_call_holder.c ) s.files += %w( src/core/lib/channel/http_server_filter.c )
s.files += %w( src/core/client_config/client_config.c ) s.files += %w( src/core/lib/channel/subchannel_call_holder.c )
s.files += %w( src/core/client_config/connector.c ) s.files += %w( src/core/lib/client_config/client_config.c )
s.files += %w( src/core/client_config/default_initial_connect_string.c ) s.files += %w( src/core/lib/client_config/connector.c )
s.files += %w( src/core/client_config/initial_connect_string.c ) s.files += %w( src/core/lib/client_config/default_initial_connect_string.c )
s.files += %w( src/core/client_config/lb_policies/load_balancer_api.c ) s.files += %w( src/core/lib/client_config/initial_connect_string.c )
s.files += %w( src/core/client_config/lb_policies/pick_first.c ) s.files += %w( src/core/lib/client_config/lb_policies/load_balancer_api.c )
s.files += %w( src/core/client_config/lb_policies/round_robin.c ) s.files += %w( src/core/lib/client_config/lb_policies/pick_first.c )
s.files += %w( src/core/client_config/lb_policy.c ) s.files += %w( src/core/lib/client_config/lb_policies/round_robin.c )
s.files += %w( src/core/client_config/lb_policy_factory.c ) s.files += %w( src/core/lib/client_config/lb_policy.c )
s.files += %w( src/core/client_config/lb_policy_registry.c ) s.files += %w( src/core/lib/client_config/lb_policy_factory.c )
s.files += %w( src/core/client_config/resolver.c ) s.files += %w( src/core/lib/client_config/lb_policy_registry.c )
s.files += %w( src/core/client_config/resolver_factory.c ) s.files += %w( src/core/lib/client_config/resolver.c )
s.files += %w( src/core/client_config/resolver_registry.c ) s.files += %w( src/core/lib/client_config/resolver_factory.c )
s.files += %w( src/core/client_config/resolvers/dns_resolver.c ) s.files += %w( src/core/lib/client_config/resolver_registry.c )
s.files += %w( src/core/client_config/resolvers/sockaddr_resolver.c ) s.files += %w( src/core/lib/client_config/resolvers/dns_resolver.c )
s.files += %w( src/core/client_config/subchannel.c ) s.files += %w( src/core/lib/client_config/resolvers/sockaddr_resolver.c )
s.files += %w( src/core/client_config/subchannel_factory.c ) s.files += %w( src/core/lib/client_config/subchannel.c )
s.files += %w( src/core/client_config/subchannel_index.c ) s.files += %w( src/core/lib/client_config/subchannel_factory.c )
s.files += %w( src/core/client_config/uri_parser.c ) s.files += %w( src/core/lib/client_config/subchannel_index.c )
s.files += %w( src/core/compression/compression_algorithm.c ) s.files += %w( src/core/lib/client_config/uri_parser.c )
s.files += %w( src/core/compression/message_compress.c ) s.files += %w( src/core/lib/compression/compression_algorithm.c )
s.files += %w( src/core/debug/trace.c ) s.files += %w( src/core/lib/compression/message_compress.c )
s.files += %w( src/core/httpcli/format_request.c ) s.files += %w( src/core/lib/debug/trace.c )
s.files += %w( src/core/httpcli/httpcli.c ) s.files += %w( src/core/lib/http/format_request.c )
s.files += %w( src/core/httpcli/parser.c ) s.files += %w( src/core/lib/http/httpcli.c )
s.files += %w( src/core/iomgr/closure.c ) s.files += %w( src/core/lib/http/parser.c )
s.files += %w( src/core/iomgr/endpoint.c ) s.files += %w( src/core/lib/iomgr/closure.c )
s.files += %w( src/core/iomgr/endpoint_pair_posix.c ) s.files += %w( src/core/lib/iomgr/endpoint.c )
s.files += %w( src/core/iomgr/endpoint_pair_windows.c ) s.files += %w( src/core/lib/iomgr/endpoint_pair_posix.c )
s.files += %w( src/core/iomgr/exec_ctx.c ) s.files += %w( src/core/lib/iomgr/endpoint_pair_windows.c )
s.files += %w( src/core/iomgr/executor.c ) s.files += %w( src/core/lib/iomgr/exec_ctx.c )
s.files += %w( src/core/iomgr/fd_posix.c ) s.files += %w( src/core/lib/iomgr/executor.c )
s.files += %w( src/core/iomgr/iocp_windows.c ) s.files += %w( src/core/lib/iomgr/fd_posix.c )
s.files += %w( src/core/iomgr/iomgr.c ) s.files += %w( src/core/lib/iomgr/iocp_windows.c )
s.files += %w( src/core/iomgr/iomgr_posix.c ) s.files += %w( src/core/lib/iomgr/iomgr.c )
s.files += %w( src/core/iomgr/iomgr_windows.c ) s.files += %w( src/core/lib/iomgr/iomgr_posix.c )
s.files += %w( src/core/iomgr/pollset_multipoller_with_epoll.c ) s.files += %w( src/core/lib/iomgr/iomgr_windows.c )
s.files += %w( src/core/iomgr/pollset_multipoller_with_poll_posix.c ) s.files += %w( src/core/lib/iomgr/pollset_multipoller_with_epoll.c )
s.files += %w( src/core/iomgr/pollset_posix.c ) s.files += %w( src/core/lib/iomgr/pollset_multipoller_with_poll_posix.c )
s.files += %w( src/core/iomgr/pollset_set_posix.c ) s.files += %w( src/core/lib/iomgr/pollset_posix.c )
s.files += %w( src/core/iomgr/pollset_set_windows.c ) s.files += %w( src/core/lib/iomgr/pollset_set_posix.c )
s.files += %w( src/core/iomgr/pollset_windows.c ) s.files += %w( src/core/lib/iomgr/pollset_set_windows.c )
s.files += %w( src/core/iomgr/resolve_address_posix.c ) s.files += %w( src/core/lib/iomgr/pollset_windows.c )
s.files += %w( src/core/iomgr/resolve_address_windows.c ) s.files += %w( src/core/lib/iomgr/resolve_address_posix.c )
s.files += %w( src/core/iomgr/sockaddr_utils.c ) s.files += %w( src/core/lib/iomgr/resolve_address_windows.c )
s.files += %w( src/core/iomgr/socket_utils_common_posix.c ) s.files += %w( src/core/lib/iomgr/sockaddr_utils.c )
s.files += %w( src/core/iomgr/socket_utils_linux.c ) s.files += %w( src/core/lib/iomgr/socket_utils_common_posix.c )
s.files += %w( src/core/iomgr/socket_utils_posix.c ) s.files += %w( src/core/lib/iomgr/socket_utils_linux.c )
s.files += %w( src/core/iomgr/socket_windows.c ) s.files += %w( src/core/lib/iomgr/socket_utils_posix.c )
s.files += %w( src/core/iomgr/tcp_client_posix.c ) s.files += %w( src/core/lib/iomgr/socket_windows.c )
s.files += %w( src/core/iomgr/tcp_client_windows.c ) s.files += %w( src/core/lib/iomgr/tcp_client_posix.c )
s.files += %w( src/core/iomgr/tcp_posix.c ) s.files += %w( src/core/lib/iomgr/tcp_client_windows.c )
s.files += %w( src/core/iomgr/tcp_server_posix.c ) s.files += %w( src/core/lib/iomgr/tcp_posix.c )
s.files += %w( src/core/iomgr/tcp_server_windows.c ) s.files += %w( src/core/lib/iomgr/tcp_server_posix.c )
s.files += %w( src/core/iomgr/tcp_windows.c ) s.files += %w( src/core/lib/iomgr/tcp_server_windows.c )
s.files += %w( src/core/iomgr/time_averaged_stats.c ) s.files += %w( src/core/lib/iomgr/tcp_windows.c )
s.files += %w( src/core/iomgr/timer.c ) s.files += %w( src/core/lib/iomgr/time_averaged_stats.c )
s.files += %w( src/core/iomgr/timer_heap.c ) s.files += %w( src/core/lib/iomgr/timer.c )
s.files += %w( src/core/iomgr/udp_server.c ) s.files += %w( src/core/lib/iomgr/timer_heap.c )
s.files += %w( src/core/iomgr/wakeup_fd_eventfd.c ) s.files += %w( src/core/lib/iomgr/udp_server.c )
s.files += %w( src/core/iomgr/wakeup_fd_nospecial.c ) s.files += %w( src/core/lib/iomgr/unix_sockets_posix.c )
s.files += %w( src/core/iomgr/wakeup_fd_pipe.c ) s.files += %w( src/core/lib/iomgr/unix_sockets_posix_noop.c )
s.files += %w( src/core/iomgr/wakeup_fd_posix.c ) s.files += %w( src/core/lib/iomgr/wakeup_fd_eventfd.c )
s.files += %w( src/core/iomgr/workqueue_posix.c ) s.files += %w( src/core/lib/iomgr/wakeup_fd_nospecial.c )
s.files += %w( src/core/iomgr/workqueue_windows.c ) s.files += %w( src/core/lib/iomgr/wakeup_fd_pipe.c )
s.files += %w( src/core/json/json.c ) s.files += %w( src/core/lib/iomgr/wakeup_fd_posix.c )
s.files += %w( src/core/json/json_reader.c ) s.files += %w( src/core/lib/iomgr/workqueue_posix.c )
s.files += %w( src/core/json/json_string.c ) s.files += %w( src/core/lib/iomgr/workqueue_windows.c )
s.files += %w( src/core/json/json_writer.c ) s.files += %w( src/core/lib/json/json.c )
s.files += %w( src/core/proto/grpc/lb/v0/load_balancer.pb.c ) s.files += %w( src/core/lib/json/json_reader.c )
s.files += %w( src/core/surface/alarm.c ) s.files += %w( src/core/lib/json/json_string.c )
s.files += %w( src/core/surface/api_trace.c ) s.files += %w( src/core/lib/json/json_writer.c )
s.files += %w( src/core/surface/byte_buffer.c ) s.files += %w( src/core/lib/proto/grpc/lb/v0/load_balancer.pb.c )
s.files += %w( src/core/surface/byte_buffer_reader.c ) s.files += %w( src/core/lib/surface/alarm.c )
s.files += %w( src/core/surface/call.c ) s.files += %w( src/core/lib/surface/api_trace.c )
s.files += %w( src/core/surface/call_details.c ) s.files += %w( src/core/lib/surface/byte_buffer.c )
s.files += %w( src/core/surface/call_log_batch.c ) s.files += %w( src/core/lib/surface/byte_buffer_reader.c )
s.files += %w( src/core/surface/channel.c ) s.files += %w( src/core/lib/surface/call.c )
s.files += %w( src/core/surface/channel_connectivity.c ) s.files += %w( src/core/lib/surface/call_details.c )
s.files += %w( src/core/surface/channel_create.c ) s.files += %w( src/core/lib/surface/call_log_batch.c )
s.files += %w( src/core/surface/channel_ping.c ) s.files += %w( src/core/lib/surface/channel.c )
s.files += %w( src/core/surface/completion_queue.c ) s.files += %w( src/core/lib/surface/channel_connectivity.c )
s.files += %w( src/core/surface/event_string.c ) s.files += %w( src/core/lib/surface/channel_create.c )
s.files += %w( src/core/surface/init.c ) s.files += %w( src/core/lib/surface/channel_init.c )
s.files += %w( src/core/surface/lame_client.c ) s.files += %w( src/core/lib/surface/channel_ping.c )
s.files += %w( src/core/surface/metadata_array.c ) s.files += %w( src/core/lib/surface/channel_stack_type.c )
s.files += %w( src/core/surface/server.c ) s.files += %w( src/core/lib/surface/completion_queue.c )
s.files += %w( src/core/surface/server_chttp2.c ) s.files += %w( src/core/lib/surface/event_string.c )
s.files += %w( src/core/surface/server_create.c ) s.files += %w( src/core/lib/surface/init.c )
s.files += %w( src/core/surface/validate_metadata.c ) s.files += %w( src/core/lib/surface/lame_client.c )
s.files += %w( src/core/surface/version.c ) s.files += %w( src/core/lib/surface/metadata_array.c )
s.files += %w( src/core/transport/byte_stream.c ) s.files += %w( src/core/lib/surface/server.c )
s.files += %w( src/core/transport/chttp2/alpn.c ) s.files += %w( src/core/lib/surface/server_chttp2.c )
s.files += %w( src/core/transport/chttp2/bin_encoder.c ) s.files += %w( src/core/lib/surface/validate_metadata.c )
s.files += %w( src/core/transport/chttp2/frame_data.c ) s.files += %w( src/core/lib/surface/version.c )
s.files += %w( src/core/transport/chttp2/frame_goaway.c ) s.files += %w( src/core/lib/transport/byte_stream.c )
s.files += %w( src/core/transport/chttp2/frame_ping.c ) s.files += %w( src/core/lib/transport/chttp2/alpn.c )
s.files += %w( src/core/transport/chttp2/frame_rst_stream.c ) s.files += %w( src/core/lib/transport/chttp2/bin_encoder.c )
s.files += %w( src/core/transport/chttp2/frame_settings.c ) s.files += %w( src/core/lib/transport/chttp2/frame_data.c )
s.files += %w( src/core/transport/chttp2/frame_window_update.c ) s.files += %w( src/core/lib/transport/chttp2/frame_goaway.c )
s.files += %w( src/core/transport/chttp2/hpack_encoder.c ) s.files += %w( src/core/lib/transport/chttp2/frame_ping.c )
s.files += %w( src/core/transport/chttp2/hpack_parser.c ) s.files += %w( src/core/lib/transport/chttp2/frame_rst_stream.c )
s.files += %w( src/core/transport/chttp2/hpack_table.c ) s.files += %w( src/core/lib/transport/chttp2/frame_settings.c )
s.files += %w( src/core/transport/chttp2/huffsyms.c ) s.files += %w( src/core/lib/transport/chttp2/frame_window_update.c )
s.files += %w( src/core/transport/chttp2/incoming_metadata.c ) s.files += %w( src/core/lib/transport/chttp2/hpack_encoder.c )
s.files += %w( src/core/transport/chttp2/parsing.c ) s.files += %w( src/core/lib/transport/chttp2/hpack_parser.c )
s.files += %w( src/core/transport/chttp2/status_conversion.c ) s.files += %w( src/core/lib/transport/chttp2/hpack_table.c )
s.files += %w( src/core/transport/chttp2/stream_lists.c ) s.files += %w( src/core/lib/transport/chttp2/huffsyms.c )
s.files += %w( src/core/transport/chttp2/stream_map.c ) s.files += %w( src/core/lib/transport/chttp2/incoming_metadata.c )
s.files += %w( src/core/transport/chttp2/timeout_encoding.c ) s.files += %w( src/core/lib/transport/chttp2/parsing.c )
s.files += %w( src/core/transport/chttp2/varint.c ) s.files += %w( src/core/lib/transport/chttp2/status_conversion.c )
s.files += %w( src/core/transport/chttp2/writing.c ) s.files += %w( src/core/lib/transport/chttp2/stream_lists.c )
s.files += %w( src/core/transport/chttp2_transport.c ) s.files += %w( src/core/lib/transport/chttp2/stream_map.c )
s.files += %w( src/core/transport/connectivity_state.c ) s.files += %w( src/core/lib/transport/chttp2/timeout_encoding.c )
s.files += %w( src/core/transport/metadata.c ) s.files += %w( src/core/lib/transport/chttp2/varint.c )
s.files += %w( src/core/transport/metadata_batch.c ) s.files += %w( src/core/lib/transport/chttp2/writing.c )
s.files += %w( src/core/transport/static_metadata.c ) s.files += %w( src/core/lib/transport/chttp2_transport.c )
s.files += %w( src/core/transport/transport.c ) s.files += %w( src/core/lib/transport/connectivity_state.c )
s.files += %w( src/core/transport/transport_op_string.c ) s.files += %w( src/core/lib/transport/metadata.c )
s.files += %w( src/core/httpcli/httpcli_security_connector.c ) s.files += %w( src/core/lib/transport/metadata_batch.c )
s.files += %w( src/core/security/b64.c ) s.files += %w( src/core/lib/transport/static_metadata.c )
s.files += %w( src/core/security/client_auth_filter.c ) s.files += %w( src/core/lib/transport/transport.c )
s.files += %w( src/core/security/credentials.c ) s.files += %w( src/core/lib/transport/transport_op_string.c )
s.files += %w( src/core/security/credentials_metadata.c ) s.files += %w( src/core/lib/http/httpcli_security_connector.c )
s.files += %w( src/core/security/credentials_posix.c ) s.files += %w( src/core/lib/security/b64.c )
s.files += %w( src/core/security/credentials_win32.c ) s.files += %w( src/core/lib/security/client_auth_filter.c )
s.files += %w( src/core/security/google_default_credentials.c ) s.files += %w( src/core/lib/security/credentials.c )
s.files += %w( src/core/security/handshake.c ) s.files += %w( src/core/lib/security/credentials_metadata.c )
s.files += %w( src/core/security/json_token.c ) s.files += %w( src/core/lib/security/credentials_posix.c )
s.files += %w( src/core/security/jwt_verifier.c ) s.files += %w( src/core/lib/security/credentials_win32.c )
s.files += %w( src/core/security/secure_endpoint.c ) s.files += %w( src/core/lib/security/google_default_credentials.c )
s.files += %w( src/core/security/security_connector.c ) s.files += %w( src/core/lib/security/handshake.c )
s.files += %w( src/core/security/security_context.c ) s.files += %w( src/core/lib/security/json_token.c )
s.files += %w( src/core/security/server_auth_filter.c ) s.files += %w( src/core/lib/security/jwt_verifier.c )
s.files += %w( src/core/security/server_secure_chttp2.c ) s.files += %w( src/core/lib/security/secure_endpoint.c )
s.files += %w( src/core/surface/init_secure.c ) s.files += %w( src/core/lib/security/security_connector.c )
s.files += %w( src/core/surface/secure_channel_create.c ) s.files += %w( src/core/lib/security/security_context.c )
s.files += %w( src/core/tsi/fake_transport_security.c ) s.files += %w( src/core/lib/security/server_auth_filter.c )
s.files += %w( src/core/tsi/ssl_transport_security.c ) s.files += %w( src/core/lib/security/server_secure_chttp2.c )
s.files += %w( src/core/tsi/transport_security.c ) s.files += %w( src/core/lib/surface/init_secure.c )
s.files += %w( src/core/census/context.c ) s.files += %w( src/core/lib/surface/secure_channel_create.c )
s.files += %w( src/core/census/initialize.c ) s.files += %w( src/core/lib/tsi/fake_transport_security.c )
s.files += %w( src/core/census/mlog.c ) s.files += %w( src/core/lib/tsi/ssl_transport_security.c )
s.files += %w( src/core/census/operation.c ) s.files += %w( src/core/lib/tsi/transport_security.c )
s.files += %w( src/core/census/placeholders.c ) s.files += %w( src/core/lib/census/context.c )
s.files += %w( src/core/census/tracing.c ) s.files += %w( src/core/lib/census/initialize.c )
s.files += %w( src/core/lib/census/mlog.c )
s.files += %w( src/core/lib/census/operation.c )
s.files += %w( src/core/lib/census/placeholders.c )
s.files += %w( src/core/lib/census/tracing.c )
s.files += %w( third_party/nanopb/pb_common.c ) s.files += %w( third_party/nanopb/pb_common.c )
s.files += %w( third_party/nanopb/pb_decode.c ) s.files += %w( third_party/nanopb/pb_decode.c )
s.files += %w( third_party/nanopb/pb_encode.c ) s.files += %w( third_party/nanopb/pb_encode.c )

@ -50,7 +50,7 @@ namespace grpc {
class CompletionQueue; class CompletionQueue;
/// A thin wrapper around \a grpc_alarm (see / \a / src/core/surface/alarm.h). /// A thin wrapper around \a grpc_alarm (see / \a / src/core/surface/alarm.h).
class Alarm : private GrpcLibrary { class Alarm : private GrpcLibraryCodegen {
public: public:
/// Create a completion queue alarm instance associated to \a cq. /// Create a completion queue alarm instance associated to \a cq.
/// ///

@ -49,7 +49,7 @@ namespace grpc {
class Channel GRPC_FINAL : public ChannelInterface, class Channel GRPC_FINAL : public ChannelInterface,
public CallHook, public CallHook,
public std::enable_shared_from_this<Channel>, public std::enable_shared_from_this<Channel>,
private GrpcLibrary { private GrpcLibraryCodegen {
public: public:
~Channel(); ~Channel();

@ -34,8 +34,8 @@
#ifndef GRPCXX_GENERIC_ASYNC_GENERIC_SERVICE_H #ifndef GRPCXX_GENERIC_ASYNC_GENERIC_SERVICE_H
#define GRPCXX_GENERIC_ASYNC_GENERIC_SERVICE_H #define GRPCXX_GENERIC_ASYNC_GENERIC_SERVICE_H
#include <grpc++/support/byte_buffer.h>
#include <grpc++/support/async_stream.h> #include <grpc++/support/async_stream.h>
#include <grpc++/support/byte_buffer.h>
struct grpc_server; struct grpc_server;

@ -34,10 +34,11 @@
#ifndef GRPCXX_IMPL_CODEGEN_ASYNC_STREAM_H #ifndef GRPCXX_IMPL_CODEGEN_ASYNC_STREAM_H
#define GRPCXX_IMPL_CODEGEN_ASYNC_STREAM_H #define GRPCXX_IMPL_CODEGEN_ASYNC_STREAM_H
#include <grpc++/impl/codegen/channel_interface.h>
#include <grpc++/impl/codegen/call.h> #include <grpc++/impl/codegen/call.h>
#include <grpc++/impl/codegen/service_type.h> #include <grpc++/impl/codegen/channel_interface.h>
#include <grpc++/impl/codegen/core_codegen_interface.h>
#include <grpc++/impl/codegen/server_context.h> #include <grpc++/impl/codegen/server_context.h>
#include <grpc++/impl/codegen/service_type.h>
#include <grpc++/impl/codegen/status.h> #include <grpc++/impl/codegen/status.h>
namespace grpc { namespace grpc {
@ -109,13 +110,13 @@ class ClientAsyncReader GRPC_FINAL : public ClientAsyncReaderInterface<R> {
init_ops_.set_output_tag(tag); init_ops_.set_output_tag(tag);
init_ops_.SendInitialMetadata(context->send_initial_metadata_); init_ops_.SendInitialMetadata(context->send_initial_metadata_);
// TODO(ctiller): don't assert // TODO(ctiller): don't assert
GPR_ASSERT(init_ops_.SendMessage(request).ok()); GPR_CODEGEN_ASSERT(init_ops_.SendMessage(request).ok());
init_ops_.ClientSendClose(); init_ops_.ClientSendClose();
call_.PerformOps(&init_ops_); call_.PerformOps(&init_ops_);
} }
void ReadInitialMetadata(void* tag) GRPC_OVERRIDE { void ReadInitialMetadata(void* tag) GRPC_OVERRIDE {
GPR_ASSERT(!context_->initial_metadata_received_); GPR_CODEGEN_ASSERT(!context_->initial_metadata_received_);
meta_ops_.set_output_tag(tag); meta_ops_.set_output_tag(tag);
meta_ops_.RecvInitialMetadata(context_); meta_ops_.RecvInitialMetadata(context_);
@ -177,7 +178,7 @@ class ClientAsyncWriter GRPC_FINAL : public ClientAsyncWriterInterface<W> {
} }
void ReadInitialMetadata(void* tag) GRPC_OVERRIDE { void ReadInitialMetadata(void* tag) GRPC_OVERRIDE {
GPR_ASSERT(!context_->initial_metadata_received_); GPR_CODEGEN_ASSERT(!context_->initial_metadata_received_);
meta_ops_.set_output_tag(tag); meta_ops_.set_output_tag(tag);
meta_ops_.RecvInitialMetadata(context_); meta_ops_.RecvInitialMetadata(context_);
@ -187,7 +188,7 @@ class ClientAsyncWriter GRPC_FINAL : public ClientAsyncWriterInterface<W> {
void Write(const W& msg, void* tag) GRPC_OVERRIDE { void Write(const W& msg, void* tag) GRPC_OVERRIDE {
write_ops_.set_output_tag(tag); write_ops_.set_output_tag(tag);
// TODO(ctiller): don't assert // TODO(ctiller): don't assert
GPR_ASSERT(write_ops_.SendMessage(msg).ok()); GPR_CODEGEN_ASSERT(write_ops_.SendMessage(msg).ok());
call_.PerformOps(&write_ops_); call_.PerformOps(&write_ops_);
} }
@ -214,7 +215,8 @@ class ClientAsyncWriter GRPC_FINAL : public ClientAsyncWriterInterface<W> {
CallOpSet<CallOpSendMessage> write_ops_; CallOpSet<CallOpSendMessage> write_ops_;
CallOpSet<CallOpClientSendClose> writes_done_ops_; CallOpSet<CallOpClientSendClose> writes_done_ops_;
CallOpSet<CallOpRecvInitialMetadata, CallOpGenericRecvMessage, CallOpSet<CallOpRecvInitialMetadata, CallOpGenericRecvMessage,
CallOpClientRecvStatus> finish_ops_; CallOpClientRecvStatus>
finish_ops_;
}; };
/// Client-side interface for asynchronous bi-directional streaming. /// Client-side interface for asynchronous bi-directional streaming.
@ -243,7 +245,7 @@ class ClientAsyncReaderWriter GRPC_FINAL
} }
void ReadInitialMetadata(void* tag) GRPC_OVERRIDE { void ReadInitialMetadata(void* tag) GRPC_OVERRIDE {
GPR_ASSERT(!context_->initial_metadata_received_); GPR_CODEGEN_ASSERT(!context_->initial_metadata_received_);
meta_ops_.set_output_tag(tag); meta_ops_.set_output_tag(tag);
meta_ops_.RecvInitialMetadata(context_); meta_ops_.RecvInitialMetadata(context_);
@ -262,7 +264,7 @@ class ClientAsyncReaderWriter GRPC_FINAL
void Write(const W& msg, void* tag) GRPC_OVERRIDE { void Write(const W& msg, void* tag) GRPC_OVERRIDE {
write_ops_.set_output_tag(tag); write_ops_.set_output_tag(tag);
// TODO(ctiller): don't assert // TODO(ctiller): don't assert
GPR_ASSERT(write_ops_.SendMessage(msg).ok()); GPR_CODEGEN_ASSERT(write_ops_.SendMessage(msg).ok());
call_.PerformOps(&write_ops_); call_.PerformOps(&write_ops_);
} }
@ -300,7 +302,7 @@ class ServerAsyncReader GRPC_FINAL : public ServerAsyncStreamingInterface,
: call_(nullptr, nullptr, nullptr), ctx_(ctx) {} : call_(nullptr, nullptr, nullptr), ctx_(ctx) {}
void SendInitialMetadata(void* tag) GRPC_OVERRIDE { void SendInitialMetadata(void* tag) GRPC_OVERRIDE {
GPR_ASSERT(!ctx_->sent_initial_metadata_); GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_);
meta_ops_.set_output_tag(tag); meta_ops_.set_output_tag(tag);
meta_ops_.SendInitialMetadata(ctx_->initial_metadata_); meta_ops_.SendInitialMetadata(ctx_->initial_metadata_);
@ -331,7 +333,7 @@ class ServerAsyncReader GRPC_FINAL : public ServerAsyncStreamingInterface,
} }
void FinishWithError(const Status& status, void* tag) { void FinishWithError(const Status& status, void* tag) {
GPR_ASSERT(!status.ok()); GPR_CODEGEN_ASSERT(!status.ok());
finish_ops_.set_output_tag(tag); finish_ops_.set_output_tag(tag);
if (!ctx_->sent_initial_metadata_) { if (!ctx_->sent_initial_metadata_) {
finish_ops_.SendInitialMetadata(ctx_->initial_metadata_); finish_ops_.SendInitialMetadata(ctx_->initial_metadata_);
@ -349,7 +351,8 @@ class ServerAsyncReader GRPC_FINAL : public ServerAsyncStreamingInterface,
CallOpSet<CallOpSendInitialMetadata> meta_ops_; CallOpSet<CallOpSendInitialMetadata> meta_ops_;
CallOpSet<CallOpRecvMessage<R>> read_ops_; CallOpSet<CallOpRecvMessage<R>> read_ops_;
CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage, CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,
CallOpServerSendStatus> finish_ops_; CallOpServerSendStatus>
finish_ops_;
}; };
template <class W> template <class W>
@ -360,7 +363,7 @@ class ServerAsyncWriter GRPC_FINAL : public ServerAsyncStreamingInterface,
: call_(nullptr, nullptr, nullptr), ctx_(ctx) {} : call_(nullptr, nullptr, nullptr), ctx_(ctx) {}
void SendInitialMetadata(void* tag) GRPC_OVERRIDE { void SendInitialMetadata(void* tag) GRPC_OVERRIDE {
GPR_ASSERT(!ctx_->sent_initial_metadata_); GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_);
meta_ops_.set_output_tag(tag); meta_ops_.set_output_tag(tag);
meta_ops_.SendInitialMetadata(ctx_->initial_metadata_); meta_ops_.SendInitialMetadata(ctx_->initial_metadata_);
@ -375,7 +378,7 @@ class ServerAsyncWriter GRPC_FINAL : public ServerAsyncStreamingInterface,
ctx_->sent_initial_metadata_ = true; ctx_->sent_initial_metadata_ = true;
} }
// TODO(ctiller): don't assert // TODO(ctiller): don't assert
GPR_ASSERT(write_ops_.SendMessage(msg).ok()); GPR_CODEGEN_ASSERT(write_ops_.SendMessage(msg).ok());
call_.PerformOps(&write_ops_); call_.PerformOps(&write_ops_);
} }
@ -409,7 +412,7 @@ class ServerAsyncReaderWriter GRPC_FINAL : public ServerAsyncStreamingInterface,
: call_(nullptr, nullptr, nullptr), ctx_(ctx) {} : call_(nullptr, nullptr, nullptr), ctx_(ctx) {}
void SendInitialMetadata(void* tag) GRPC_OVERRIDE { void SendInitialMetadata(void* tag) GRPC_OVERRIDE {
GPR_ASSERT(!ctx_->sent_initial_metadata_); GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_);
meta_ops_.set_output_tag(tag); meta_ops_.set_output_tag(tag);
meta_ops_.SendInitialMetadata(ctx_->initial_metadata_); meta_ops_.SendInitialMetadata(ctx_->initial_metadata_);
@ -430,7 +433,7 @@ class ServerAsyncReaderWriter GRPC_FINAL : public ServerAsyncStreamingInterface,
ctx_->sent_initial_metadata_ = true; ctx_->sent_initial_metadata_ = true;
} }
// TODO(ctiller): don't assert // TODO(ctiller): don't assert
GPR_ASSERT(write_ops_.SendMessage(msg).ok()); GPR_CODEGEN_ASSERT(write_ops_.SendMessage(msg).ok());
call_.PerformOps(&write_ops_); call_.PerformOps(&write_ops_);
} }

@ -45,6 +45,7 @@
namespace grpc { namespace grpc {
class CompletionQueue; class CompletionQueue;
extern CoreCodegenInterface* g_core_codegen_interface;
template <class R> template <class R>
class ClientAsyncResponseReaderInterface { class ClientAsyncResponseReaderInterface {
@ -68,13 +69,13 @@ class ClientAsyncResponseReader GRPC_FINAL
collection_->init_buf_.SetCollection(collection_); collection_->init_buf_.SetCollection(collection_);
collection_->init_buf_.SendInitialMetadata(context->send_initial_metadata_); collection_->init_buf_.SendInitialMetadata(context->send_initial_metadata_);
// TODO(ctiller): don't assert // TODO(ctiller): don't assert
GPR_ASSERT(collection_->init_buf_.SendMessage(request).ok()); GPR_CODEGEN_ASSERT(collection_->init_buf_.SendMessage(request).ok());
collection_->init_buf_.ClientSendClose(); collection_->init_buf_.ClientSendClose();
call_.PerformOps(&collection_->init_buf_); call_.PerformOps(&collection_->init_buf_);
} }
void ReadInitialMetadata(void* tag) { void ReadInitialMetadata(void* tag) {
GPR_ASSERT(!context_->initial_metadata_received_); GPR_CODEGEN_ASSERT(!context_->initial_metadata_received_);
collection_->meta_buf_.SetCollection(collection_); collection_->meta_buf_.SetCollection(collection_);
collection_->meta_buf_.set_output_tag(tag); collection_->meta_buf_.set_output_tag(tag);
@ -100,10 +101,12 @@ class ClientAsyncResponseReader GRPC_FINAL
class CallOpSetCollection : public CallOpSetCollectionInterface { class CallOpSetCollection : public CallOpSetCollectionInterface {
public: public:
SneakyCallOpSet<CallOpSendInitialMetadata, CallOpSendMessage, SneakyCallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,
CallOpClientSendClose> init_buf_; CallOpClientSendClose>
init_buf_;
CallOpSet<CallOpRecvInitialMetadata> meta_buf_; CallOpSet<CallOpRecvInitialMetadata> meta_buf_;
CallOpSet<CallOpRecvInitialMetadata, CallOpRecvMessage<R>, CallOpSet<CallOpRecvInitialMetadata, CallOpRecvMessage<R>,
CallOpClientRecvStatus> finish_buf_; CallOpClientRecvStatus>
finish_buf_;
}; };
std::shared_ptr<CallOpSetCollection> collection_; std::shared_ptr<CallOpSetCollection> collection_;
}; };
@ -116,7 +119,7 @@ class ServerAsyncResponseWriter GRPC_FINAL
: call_(nullptr, nullptr, nullptr), ctx_(ctx) {} : call_(nullptr, nullptr, nullptr), ctx_(ctx) {}
void SendInitialMetadata(void* tag) GRPC_OVERRIDE { void SendInitialMetadata(void* tag) GRPC_OVERRIDE {
GPR_ASSERT(!ctx_->sent_initial_metadata_); GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_);
meta_buf_.set_output_tag(tag); meta_buf_.set_output_tag(tag);
meta_buf_.SendInitialMetadata(ctx_->initial_metadata_); meta_buf_.SendInitialMetadata(ctx_->initial_metadata_);
@ -141,7 +144,7 @@ class ServerAsyncResponseWriter GRPC_FINAL
} }
void FinishWithError(const Status& status, void* tag) { void FinishWithError(const Status& status, void* tag) {
GPR_ASSERT(!status.ok()); GPR_CODEGEN_ASSERT(!status.ok());
finish_buf_.set_output_tag(tag); finish_buf_.set_output_tag(tag);
if (!ctx_->sent_initial_metadata_) { if (!ctx_->sent_initial_metadata_) {
finish_buf_.SendInitialMetadata(ctx_->initial_metadata_); finish_buf_.SendInitialMetadata(ctx_->initial_metadata_);
@ -158,7 +161,8 @@ class ServerAsyncResponseWriter GRPC_FINAL
ServerContext* ctx_; ServerContext* ctx_;
CallOpSet<CallOpSendInitialMetadata> meta_buf_; CallOpSet<CallOpSendInitialMetadata> meta_buf_;
CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage, CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,
CallOpServerSendStatus> finish_buf_; CallOpServerSendStatus>
finish_buf_;
}; };
} // namespace grpc } // namespace grpc

@ -34,19 +34,21 @@
#ifndef GRPCXX_IMPL_CODEGEN_CALL_H #ifndef GRPCXX_IMPL_CODEGEN_CALL_H
#define GRPCXX_IMPL_CODEGEN_CALL_H #define GRPCXX_IMPL_CODEGEN_CALL_H
#include <cstring>
#include <functional> #include <functional>
#include <memory>
#include <map> #include <map>
#include <cstring> #include <memory>
#include <grpc/impl/codegen/alloc.h>
#include <grpc/impl/codegen/grpc_types.h>
#include <grpc++/impl/codegen/client_context.h>
#include <grpc++/impl/codegen/call_hook.h> #include <grpc++/impl/codegen/call_hook.h>
#include <grpc++/impl/codegen/client_context.h>
#include <grpc++/impl/codegen/completion_queue_tag.h> #include <grpc++/impl/codegen/completion_queue_tag.h>
#include <grpc++/impl/codegen/serialization_traits.h>
#include <grpc++/impl/codegen/config.h> #include <grpc++/impl/codegen/config.h>
#include <grpc++/impl/codegen/core_codegen_interface.h>
#include <grpc++/impl/codegen/serialization_traits.h>
#include <grpc++/impl/codegen/status.h> #include <grpc++/impl/codegen/status.h>
#include <grpc++/impl/codegen/string_ref.h>
#include <grpc/impl/codegen/alloc.h>
#include <grpc/impl/codegen/grpc_types.h>
struct grpc_byte_buffer; struct grpc_byte_buffer;
@ -56,12 +58,39 @@ class ByteBuffer;
class Call; class Call;
class CallHook; class CallHook;
class CompletionQueue; class CompletionQueue;
extern CoreCodegenInterface* g_core_codegen_interface;
void FillMetadataMap( inline void FillMetadataMap(
grpc_metadata_array* arr, grpc_metadata_array* arr,
std::multimap<grpc::string_ref, grpc::string_ref>* metadata); std::multimap<grpc::string_ref, grpc::string_ref>* metadata) {
grpc_metadata* FillMetadataArray( for (size_t i = 0; i < arr->count; i++) {
const std::multimap<grpc::string, grpc::string>& metadata); // TODO(yangg) handle duplicates?
metadata->insert(std::pair<grpc::string_ref, grpc::string_ref>(
arr->metadata[i].key, grpc::string_ref(arr->metadata[i].value,
arr->metadata[i].value_length)));
}
g_core_codegen_interface->grpc_metadata_array_destroy(arr);
g_core_codegen_interface->grpc_metadata_array_init(arr);
}
// 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<grpc::string, grpc::string>& metadata) {
if (metadata.empty()) {
return nullptr;
}
grpc_metadata* metadata_array =
(grpc_metadata*)(g_core_codegen_interface->gpr_malloc(
metadata.size() * sizeof(grpc_metadata)));
size_t i = 0;
for (auto iter = metadata.cbegin(); iter != metadata.cend(); ++iter, ++i) {
metadata_array[i].key = iter->first.c_str();
metadata_array[i].value = iter->second.c_str();
metadata_array[i].value_length = iter->second.size();
}
return metadata_array;
}
/// Per-message write options. /// Per-message write options.
class WriteOptions { class WriteOptions {
@ -170,7 +199,7 @@ class CallOpSendInitialMetadata {
} }
void FinishOp(bool* status, int max_message_size) { void FinishOp(bool* status, int max_message_size) {
if (!send_) return; if (!send_) return;
gpr_free(initial_metadata_); g_core_codegen_interface->gpr_free(initial_metadata_);
send_ = false; send_ = false;
} }
@ -204,7 +233,7 @@ class CallOpSendMessage {
write_options_.Clear(); write_options_.Clear();
} }
void FinishOp(bool* status, int max_message_size) { void FinishOp(bool* status, int max_message_size) {
if (own_buf_) grpc_byte_buffer_destroy(send_buf_); if (own_buf_) g_core_codegen_interface->grpc_byte_buffer_destroy(send_buf_);
send_buf_ = nullptr; send_buf_ = nullptr;
} }
@ -251,10 +280,11 @@ class CallOpRecvMessage {
if (*status) { if (*status) {
got_message = true; got_message = true;
*status = SerializationTraits<R>::Deserialize(recv_buf_, message_, *status = SerializationTraits<R>::Deserialize(recv_buf_, message_,
max_message_size).ok(); max_message_size)
.ok();
} else { } else {
got_message = false; got_message = false;
grpc_byte_buffer_destroy(recv_buf_); g_core_codegen_interface->grpc_byte_buffer_destroy(recv_buf_);
} }
} else { } else {
got_message = false; got_message = false;
@ -321,7 +351,7 @@ class CallOpGenericRecvMessage {
*status = deserialize_->Deserialize(recv_buf_, max_message_size).ok(); *status = deserialize_->Deserialize(recv_buf_, max_message_size).ok();
} else { } else {
got_message = false; got_message = false;
grpc_byte_buffer_destroy(recv_buf_); g_core_codegen_interface->grpc_byte_buffer_destroy(recv_buf_);
} }
} else { } else {
got_message = false; got_message = false;
@ -386,7 +416,7 @@ class CallOpServerSendStatus {
void FinishOp(bool* status, int max_message_size) { void FinishOp(bool* status, int max_message_size) {
if (!send_status_available_) return; if (!send_status_available_) return;
gpr_free(trailing_metadata_); g_core_codegen_interface->gpr_free(trailing_metadata_);
send_status_available_ = false; send_status_available_ = false;
} }
@ -462,7 +492,7 @@ class CallOpClientRecvStatus {
*recv_status_ = Status( *recv_status_ = Status(
static_cast<StatusCode>(status_code_), static_cast<StatusCode>(status_code_),
status_details_ ? grpc::string(status_details_) : grpc::string()); status_details_ ? grpc::string(status_details_) : grpc::string());
gpr_free(status_details_); g_core_codegen_interface->gpr_free(status_details_);
recv_status_ = nullptr; recv_status_ = nullptr;
} }
@ -576,11 +606,22 @@ class SneakyCallOpSet : public CallOpSet<Op1, Op2, Op3, Op4, Op5, Op6> {
class Call GRPC_FINAL { class Call GRPC_FINAL {
public: public:
/* call is owned by the caller */ /* call is owned by the caller */
Call(grpc_call* call, CallHook* call_hook_, CompletionQueue* cq); Call(grpc_call* call, CallHook* call_hook, CompletionQueue* cq)
Call(grpc_call* call, CallHook* call_hook_, CompletionQueue* cq, : call_hook_(call_hook), cq_(cq), call_(call), max_message_size_(-1) {}
int max_message_size);
Call(grpc_call* call, CallHook* call_hook, CompletionQueue* cq,
void PerformOps(CallOpSetInterface* ops); int max_message_size)
: call_hook_(call_hook),
cq_(cq),
call_(call),
max_message_size_(max_message_size) {}
void PerformOps(CallOpSetInterface* ops) {
if (max_message_size_ > 0) {
ops->set_max_message_size(max_message_size_);
}
call_hook_->PerformOpsOnCall(ops, this);
}
grpc_call* call() { return call_; } grpc_call* call() { return call_; }
CompletionQueue* cq() { return cq_; } CompletionQueue* cq() { return cq_; }

@ -54,6 +54,7 @@
#include <string> #include <string>
#include <grpc++/impl/codegen/config.h> #include <grpc++/impl/codegen/config.h>
#include <grpc++/impl/codegen/core_codegen_interface.h>
#include <grpc++/impl/codegen/security/auth_context.h> #include <grpc++/impl/codegen/security/auth_context.h>
#include <grpc++/impl/codegen/status.h> #include <grpc++/impl/codegen/status.h>
#include <grpc++/impl/codegen/string_ref.h> #include <grpc++/impl/codegen/string_ref.h>
@ -192,7 +193,7 @@ class ClientContext {
/// \return A multimap of initial metadata key-value pairs from the server. /// \return A multimap of initial metadata key-value pairs from the server.
const std::multimap<grpc::string_ref, grpc::string_ref>& const std::multimap<grpc::string_ref, grpc::string_ref>&
GetServerInitialMetadata() { GetServerInitialMetadata() {
GPR_ASSERT(initial_metadata_received_); GPR_CODEGEN_ASSERT(initial_metadata_received_);
return recv_initial_metadata_; return recv_initial_metadata_;
} }

@ -37,6 +37,7 @@
#include <grpc++/impl/codegen/call.h> #include <grpc++/impl/codegen/call.h>
#include <grpc++/impl/codegen/channel_interface.h> #include <grpc++/impl/codegen/channel_interface.h>
#include <grpc++/impl/codegen/config.h> #include <grpc++/impl/codegen/config.h>
#include <grpc++/impl/codegen/core_codegen_interface.h>
#include <grpc++/impl/codegen/status.h> #include <grpc++/impl/codegen/status.h>
namespace grpc { namespace grpc {
@ -55,7 +56,8 @@ Status BlockingUnaryCall(ChannelInterface* channel, const RpcMethod& method,
Call call(channel->CreateCall(method, context, &cq)); Call call(channel->CreateCall(method, context, &cq));
CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage, CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,
CallOpRecvInitialMetadata, CallOpRecvMessage<OutputMessage>, CallOpRecvInitialMetadata, CallOpRecvMessage<OutputMessage>,
CallOpClientSendClose, CallOpClientRecvStatus> ops; CallOpClientSendClose, CallOpClientRecvStatus>
ops;
Status status = ops.SendMessage(request); Status status = ops.SendMessage(request);
if (!status.ok()) { if (!status.ok()) {
return status; return status;
@ -66,7 +68,7 @@ Status BlockingUnaryCall(ChannelInterface* channel, const RpcMethod& method,
ops.ClientSendClose(); ops.ClientSendClose();
ops.ClientRecvStatus(context, &status); ops.ClientRecvStatus(context, &status);
call.PerformOps(&ops); call.PerformOps(&ops);
GPR_ASSERT((cq.Pluck(&ops) && ops.got_message) || !status.ok()); GPR_CODEGEN_ASSERT((cq.Pluck(&ops) && ops.got_message) || !status.ok());
return status; return status;
} }

@ -36,9 +36,12 @@
#ifndef GRPCXX_IMPL_CODEGEN_COMPLETION_QUEUE_H #ifndef GRPCXX_IMPL_CODEGEN_COMPLETION_QUEUE_H
#define GRPCXX_IMPL_CODEGEN_COMPLETION_QUEUE_H #define GRPCXX_IMPL_CODEGEN_COMPLETION_QUEUE_H
#include <grpc++/impl/codegen/completion_queue_tag.h>
#include <grpc++/impl/codegen/core_codegen_interface.h>
#include <grpc++/impl/codegen/grpc_library.h> #include <grpc++/impl/codegen/grpc_library.h>
#include <grpc++/impl/codegen/status.h> #include <grpc++/impl/codegen/status.h>
#include <grpc++/impl/codegen/time.h> #include <grpc++/impl/codegen/time.h>
#include <grpc/impl/codegen/time.h>
struct grpc_completion_queue; struct grpc_completion_queue;
@ -76,13 +79,17 @@ class Server;
class ServerBuilder; class ServerBuilder;
class ServerContext; class ServerContext;
extern CoreCodegenInterface* g_core_codegen_interface;
/// A thin wrapper around \a grpc_completion_queue (see / \a /// A thin wrapper around \a grpc_completion_queue (see / \a
/// src/core/surface/completion_queue.h). /// src/core/surface/completion_queue.h).
class CompletionQueue : private GrpcLibrary { class CompletionQueue : private GrpcLibraryCodegen {
public: public:
/// Default constructor. Implicitly creates a \a grpc_completion_queue /// Default constructor. Implicitly creates a \a grpc_completion_queue
/// instance. /// instance.
CompletionQueue(); CompletionQueue() {
cq_ = g_core_codegen_interface->grpc_completion_queue_create(nullptr);
}
/// Wrap \a take, taking ownership of the instance. /// Wrap \a take, taking ownership of the instance.
/// ///
@ -90,7 +97,9 @@ class CompletionQueue : private GrpcLibrary {
explicit CompletionQueue(grpc_completion_queue* take); explicit CompletionQueue(grpc_completion_queue* take);
/// Destructor. Destroys the owned wrapped completion queue / instance. /// Destructor. Destroys the owned wrapped completion queue / instance.
~CompletionQueue(); ~CompletionQueue() {
g_core_codegen_interface->grpc_completion_queue_destroy(cq_);
}
/// Tri-state return for AsyncNext: SHUTDOWN, GOT_EVENT, TIMEOUT. /// Tri-state return for AsyncNext: SHUTDOWN, GOT_EVENT, TIMEOUT.
enum NextStatus { enum NextStatus {
@ -124,8 +133,8 @@ class CompletionQueue : private GrpcLibrary {
/// ///
/// \return true if read a regular event, false if the queue is shutting down. /// \return true if read a regular event, false if the queue is shutting down.
bool Next(void** tag, bool* ok) { bool Next(void** tag, bool* ok) {
return (AsyncNextInternal(tag, ok, gpr_inf_future(GPR_CLOCK_REALTIME)) != return (AsyncNextInternal(tag, ok, g_core_codegen_interface->gpr_inf_future(
SHUTDOWN); GPR_CLOCK_REALTIME)) != SHUTDOWN);
} }
/// Request the shutdown of the queue. /// Request the shutdown of the queue.
@ -181,11 +190,31 @@ class CompletionQueue : private GrpcLibrary {
/// Wraps \a grpc_completion_queue_pluck. /// Wraps \a grpc_completion_queue_pluck.
/// \warning Must not be mixed with calls to \a Next. /// \warning Must not be mixed with calls to \a Next.
bool Pluck(CompletionQueueTag* tag); bool Pluck(CompletionQueueTag* tag) {
auto deadline =
g_core_codegen_interface->gpr_inf_future(GPR_CLOCK_REALTIME);
auto ev = g_core_codegen_interface->grpc_completion_queue_pluck(
cq_, tag, deadline, nullptr);
bool ok = ev.success != 0;
void* ignored = tag;
GPR_CODEGEN_ASSERT(tag->FinalizeResult(&ignored, &ok));
GPR_CODEGEN_ASSERT(ignored == tag);
// Ignore mutations by FinalizeResult: Pluck returns the C API status
return ev.success != 0;
}
/// Performs a single polling pluck on \a tag. /// Performs a single polling pluck on \a tag.
/// \warning Must not be mixed with calls to \a Next. /// \warning Must not be mixed with calls to \a Next.
void TryPluck(CompletionQueueTag* tag); void TryPluck(CompletionQueueTag* tag) {
auto deadline = gpr_time_0(GPR_CLOCK_REALTIME);
auto ev = 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));
}
grpc_completion_queue* cq_; // owned grpc_completion_queue* cq_; // owned
}; };

@ -31,8 +31,8 @@
* *
*/ */
#ifndef GRPCXX_COMPLETION_QUEUE_TAG_H #ifndef GRPCXX_IMPL_CODEGEN_COMPLETION_QUEUE_TAG_H
#define GRPCXX_COMPLETION_QUEUE_TAG_H #define GRPCXX_IMPL_CODEGEN_COMPLETION_QUEUE_TAG_H
namespace grpc { namespace grpc {
@ -49,4 +49,4 @@ class CompletionQueueTag {
} // namespace grpc } // namespace grpc
#endif // GRPCXX_COMPLETION_QUEUE_TAG_H #endif // GRPCXX_IMPL_CODEGEN_COMPLETION_QUEUE_TAG_H

@ -0,0 +1,97 @@
/*
*
* Copyright 2015-2016, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#ifndef GRPCXX_IMPL_CODEGEN_CORE_CODEGEN_INTERFACE_H
#define GRPCXX_IMPL_CODEGEN_CORE_CODEGEN_INTERFACE_H
#include <grpc++/impl/codegen/config_protobuf.h>
#include <grpc++/impl/codegen/status.h>
#include <grpc/impl/codegen/grpc_types.h>
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:
// Serialize the msg into a buffer created inside the function. The caller
// should destroy the returned buffer when done with it. If serialization
// fails,
// false is returned and buffer is left unchanged.
virtual Status SerializeProto(const grpc::protobuf::Message& msg,
grpc_byte_buffer** buffer) = 0;
// The caller keeps ownership of buffer and msg.
virtual Status DeserializeProto(grpc_byte_buffer* buffer,
grpc::protobuf::Message* msg,
int max_message_size) = 0;
/// Upon a failed assertion, log the error.
virtual void assert_fail(const char* failed_assertion) = 0;
virtual grpc_completion_queue* grpc_completion_queue_create(
void* reserved) = 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;
virtual void grpc_byte_buffer_destroy(grpc_byte_buffer* bb) = 0;
virtual void grpc_metadata_array_init(grpc_metadata_array* array) = 0;
virtual void grpc_metadata_array_destroy(grpc_metadata_array* array) = 0;
virtual gpr_timespec gpr_inf_future(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 (!(x)) { \
grpc::g_core_codegen_interface->assert_fail(#x); \
} \
} while (0)
} // namespace grpc
#endif // GRPCXX_IMPL_CODEGEN_CORE_CODEGEN_INTERFACE_H

@ -34,6 +34,7 @@
#ifndef GRPCXX_IMPL_CODEGEN_GRPC_LIBRARY_H #ifndef GRPCXX_IMPL_CODEGEN_GRPC_LIBRARY_H
#define GRPCXX_IMPL_CODEGEN_GRPC_LIBRARY_H #define GRPCXX_IMPL_CODEGEN_GRPC_LIBRARY_H
#include <grpc++/impl/codegen/core_codegen_interface.h>
#include <grpc/impl/codegen/log.h> #include <grpc/impl/codegen/log.h>
namespace grpc { namespace grpc {
@ -44,24 +45,27 @@ class GrpcLibraryInterface {
virtual void shutdown() = 0; virtual void shutdown() = 0;
}; };
/// Initialized by \a grpc::GrpcLibraryInitializer from
/// <grpc++/impl/grpc_library.h>
extern GrpcLibraryInterface* g_glip; extern GrpcLibraryInterface* g_glip;
class GrpcLibrary { /// Classes that require gRPC to be initialized should inherit from this class.
class GrpcLibraryCodegen {
public: public:
GrpcLibrary() { GrpcLibraryCodegen() {
GPR_ASSERT(g_glip && GPR_CODEGEN_ASSERT(g_glip &&
"gRPC library not initialized. See " "gRPC library not initialized. See "
"grpc::internal::GrpcLibraryInitializer."); "grpc::internal::GrpcLibraryInitializer.");
g_glip->init(); g_glip->init();
} }
virtual ~GrpcLibrary() { virtual ~GrpcLibraryCodegen() {
GPR_ASSERT(g_glip && GPR_CODEGEN_ASSERT(g_glip &&
"gRPC library not initialized. See " "gRPC library not initialized. See "
"grpc::internal::GrpcLibraryInitializer."); "grpc::internal::GrpcLibraryInitializer.");
g_glip->shutdown(); g_glip->shutdown();
} }
}; };
} // namespace grpc } // namespace grpc
#endif // GRPCXX_IMPL_GRPC_LIBRARY_H #endif // GRPCXX_IMPL_CODEGEN_GRPC_LIBRARY_H

@ -0,0 +1,465 @@
/*
*
* Copyright 2015-2016, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#ifndef GRPCXX_IMPL_CODEGEN_IMPL_ASYNC_STREAM_H
#define GRPCXX_IMPL_CODEGEN_IMPL_ASYNC_STREAM_H
#include <grpc++/impl/codegen/call.h>
#include <grpc++/impl/codegen/channel_interface.h>
#include <grpc++/impl/codegen/core_codegen_interface.h>
#include <grpc++/impl/codegen/server_context.h>
#include <grpc++/impl/codegen/service_type.h>
#include <grpc++/impl/codegen/status.h>
namespace grpc {
class CompletionQueue;
/// Common interface for all client side asynchronous streaming.
class ClientAsyncStreamingInterface {
public:
virtual ~ClientAsyncStreamingInterface() {}
/// Request notification of the reading of the initial metadata. Completion
/// will be notified by \a tag on the associated completion queue.
///
/// \param[in] tag Tag identifying this request.
virtual void ReadInitialMetadata(void* tag) = 0;
/// Request notification completion.
///
/// \param[out] status To be updated with the operation status.
/// \param[in] tag Tag identifying this request.
virtual void Finish(Status* status, void* tag) = 0;
};
/// An interface that yields a sequence of messages of type \a R.
template <class R>
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.
///
/// \param[out] msg Where to eventually store the read message.
/// \param[in] tag The tag identifying the operation.
virtual void Read(R* msg, void* tag) = 0;
};
/// An interface that can be fed a sequence of messages of type \a W.
template <class W>
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.
///
/// \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;
};
template <class R>
class ClientAsyncReaderInterface : public ClientAsyncStreamingInterface,
public AsyncReaderInterface<R> {};
template <class R>
class ClientAsyncReader GRPC_FINAL : public ClientAsyncReaderInterface<R> {
public:
/// Create a stream and write the first request out.
template <class W>
ClientAsyncReader(ChannelInterface* channel, CompletionQueue* cq,
const RpcMethod& method, ClientContext* context,
const W& request, void* tag)
: context_(context), call_(channel->CreateCall(method, context, cq)) {
init_ops_.set_output_tag(tag);
init_ops_.SendInitialMetadata(context->send_initial_metadata_);
// TODO(ctiller): don't assert
GPR_CODEGEN_ASSERT(init_ops_.SendMessage(request).ok());
init_ops_.ClientSendClose();
call_.PerformOps(&init_ops_);
}
void ReadInitialMetadata(void* tag) GRPC_OVERRIDE {
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) GRPC_OVERRIDE {
read_ops_.set_output_tag(tag);
if (!context_->initial_metadata_received_) {
read_ops_.RecvInitialMetadata(context_);
}
read_ops_.RecvMessage(msg);
call_.PerformOps(&read_ops_);
}
void Finish(Status* status, void* tag) GRPC_OVERRIDE {
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:
ClientContext* context_;
Call call_;
CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage, CallOpClientSendClose>
init_ops_;
CallOpSet<CallOpRecvInitialMetadata> meta_ops_;
CallOpSet<CallOpRecvInitialMetadata, CallOpRecvMessage<R>> read_ops_;
CallOpSet<CallOpRecvInitialMetadata, CallOpClientRecvStatus> finish_ops_;
};
/// Common interface for client side asynchronous writing.
template <class W>
class ClientAsyncWriterInterface : public ClientAsyncStreamingInterface,
public AsyncWriterInterface<W> {
public:
/// Signal the client is done with the writes.
///
/// \param[in] tag The tag identifying the operation.
virtual void WritesDone(void* tag) = 0;
};
template <class W>
class ClientAsyncWriter GRPC_FINAL : public ClientAsyncWriterInterface<W> {
public:
template <class R>
ClientAsyncWriter(ChannelInterface* channel, CompletionQueue* cq,
const RpcMethod& method, ClientContext* context,
R* response, void* tag)
: context_(context), call_(channel->CreateCall(method, context, cq)) {
finish_ops_.RecvMessage(response);
init_ops_.set_output_tag(tag);
init_ops_.SendInitialMetadata(context->send_initial_metadata_);
call_.PerformOps(&init_ops_);
}
void ReadInitialMetadata(void* tag) GRPC_OVERRIDE {
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) GRPC_OVERRIDE {
write_ops_.set_output_tag(tag);
// TODO(ctiller): don't assert
GPR_CODEGEN_ASSERT(write_ops_.SendMessage(msg).ok());
call_.PerformOps(&write_ops_);
}
void WritesDone(void* tag) GRPC_OVERRIDE {
writes_done_ops_.set_output_tag(tag);
writes_done_ops_.ClientSendClose();
call_.PerformOps(&writes_done_ops_);
}
void Finish(Status* status, void* tag) GRPC_OVERRIDE {
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:
ClientContext* context_;
Call call_;
CallOpSet<CallOpSendInitialMetadata> init_ops_;
CallOpSet<CallOpRecvInitialMetadata> meta_ops_;
CallOpSet<CallOpSendMessage> write_ops_;
CallOpSet<CallOpClientSendClose> writes_done_ops_;
CallOpSet<CallOpRecvInitialMetadata, CallOpGenericRecvMessage,
CallOpClientRecvStatus>
finish_ops_;
};
/// Client-side interface for asynchronous bi-directional streaming.
template <class W, class R>
class ClientAsyncReaderWriterInterface : public ClientAsyncStreamingInterface,
public AsyncWriterInterface<W>,
public AsyncReaderInterface<R> {
public:
/// Signal the client is done with the writes.
///
/// \param[in] tag The tag identifying the operation.
virtual void WritesDone(void* tag) = 0;
};
template <class W, class R>
class ClientAsyncReaderWriter GRPC_FINAL
: public ClientAsyncReaderWriterInterface<W, R> {
public:
ClientAsyncReaderWriter(ChannelInterface* channel, CompletionQueue* cq,
const RpcMethod& method, ClientContext* context,
void* tag)
: context_(context), call_(channel->CreateCall(method, context, cq)) {
init_ops_.set_output_tag(tag);
init_ops_.SendInitialMetadata(context->send_initial_metadata_);
call_.PerformOps(&init_ops_);
}
void ReadInitialMetadata(void* tag) GRPC_OVERRIDE {
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) GRPC_OVERRIDE {
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) GRPC_OVERRIDE {
write_ops_.set_output_tag(tag);
// TODO(ctiller): don't assert
GPR_CODEGEN_ASSERT(write_ops_.SendMessage(msg).ok());
call_.PerformOps(&write_ops_);
}
void WritesDone(void* tag) GRPC_OVERRIDE {
writes_done_ops_.set_output_tag(tag);
writes_done_ops_.ClientSendClose();
call_.PerformOps(&writes_done_ops_);
}
void Finish(Status* status, void* tag) GRPC_OVERRIDE {
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:
ClientContext* context_;
Call call_;
CallOpSet<CallOpSendInitialMetadata> init_ops_;
CallOpSet<CallOpRecvInitialMetadata> meta_ops_;
CallOpSet<CallOpRecvInitialMetadata, CallOpRecvMessage<R>> read_ops_;
CallOpSet<CallOpSendMessage> write_ops_;
CallOpSet<CallOpClientSendClose> writes_done_ops_;
CallOpSet<CallOpRecvInitialMetadata, CallOpClientRecvStatus> finish_ops_;
};
template <class W, class R>
class ServerAsyncReader GRPC_FINAL : public ServerAsyncStreamingInterface,
public AsyncReaderInterface<R> {
public:
explicit ServerAsyncReader(ServerContext* ctx)
: call_(nullptr, nullptr, nullptr), ctx_(ctx) {}
void SendInitialMetadata(void* tag) GRPC_OVERRIDE {
GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_);
meta_ops_.set_output_tag(tag);
meta_ops_.SendInitialMetadata(ctx_->initial_metadata_);
ctx_->sent_initial_metadata_ = true;
call_.PerformOps(&meta_ops_);
}
void Read(R* msg, void* tag) GRPC_OVERRIDE {
read_ops_.set_output_tag(tag);
read_ops_.RecvMessage(msg);
call_.PerformOps(&read_ops_);
}
void Finish(const W& msg, const Status& status, void* tag) {
finish_ops_.set_output_tag(tag);
if (!ctx_->sent_initial_metadata_) {
finish_ops_.SendInitialMetadata(ctx_->initial_metadata_);
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_);
}
void FinishWithError(const Status& status, void* tag) {
GPR_CODEGEN_ASSERT(!status.ok());
finish_ops_.set_output_tag(tag);
if (!ctx_->sent_initial_metadata_) {
finish_ops_.SendInitialMetadata(ctx_->initial_metadata_);
ctx_->sent_initial_metadata_ = true;
}
finish_ops_.ServerSendStatus(ctx_->trailing_metadata_, status);
call_.PerformOps(&finish_ops_);
}
private:
void BindCall(Call* call) GRPC_OVERRIDE { call_ = *call; }
Call call_;
ServerContext* ctx_;
CallOpSet<CallOpSendInitialMetadata> meta_ops_;
CallOpSet<CallOpRecvMessage<R>> read_ops_;
CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,
CallOpServerSendStatus>
finish_ops_;
};
template <class W>
class ServerAsyncWriter GRPC_FINAL : public ServerAsyncStreamingInterface,
public AsyncWriterInterface<W> {
public:
explicit ServerAsyncWriter(ServerContext* ctx)
: call_(nullptr, nullptr, nullptr), ctx_(ctx) {}
void SendInitialMetadata(void* tag) GRPC_OVERRIDE {
GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_);
meta_ops_.set_output_tag(tag);
meta_ops_.SendInitialMetadata(ctx_->initial_metadata_);
ctx_->sent_initial_metadata_ = true;
call_.PerformOps(&meta_ops_);
}
void Write(const W& msg, void* tag) GRPC_OVERRIDE {
write_ops_.set_output_tag(tag);
if (!ctx_->sent_initial_metadata_) {
write_ops_.SendInitialMetadata(ctx_->initial_metadata_);
ctx_->sent_initial_metadata_ = true;
}
// TODO(ctiller): don't assert
GPR_CODEGEN_ASSERT(write_ops_.SendMessage(msg).ok());
call_.PerformOps(&write_ops_);
}
void Finish(const Status& status, void* tag) {
finish_ops_.set_output_tag(tag);
if (!ctx_->sent_initial_metadata_) {
finish_ops_.SendInitialMetadata(ctx_->initial_metadata_);
ctx_->sent_initial_metadata_ = true;
}
finish_ops_.ServerSendStatus(ctx_->trailing_metadata_, status);
call_.PerformOps(&finish_ops_);
}
private:
void BindCall(Call* call) GRPC_OVERRIDE { call_ = *call; }
Call call_;
ServerContext* ctx_;
CallOpSet<CallOpSendInitialMetadata> meta_ops_;
CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage> write_ops_;
CallOpSet<CallOpSendInitialMetadata, CallOpServerSendStatus> finish_ops_;
};
/// Server-side interface for asynchronous bi-directional streaming.
template <class W, class R>
class ServerAsyncReaderWriter GRPC_FINAL : public ServerAsyncStreamingInterface,
public AsyncWriterInterface<W>,
public AsyncReaderInterface<R> {
public:
explicit ServerAsyncReaderWriter(ServerContext* ctx)
: call_(nullptr, nullptr, nullptr), ctx_(ctx) {}
void SendInitialMetadata(void* tag) GRPC_OVERRIDE {
GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_);
meta_ops_.set_output_tag(tag);
meta_ops_.SendInitialMetadata(ctx_->initial_metadata_);
ctx_->sent_initial_metadata_ = true;
call_.PerformOps(&meta_ops_);
}
void Read(R* msg, void* tag) GRPC_OVERRIDE {
read_ops_.set_output_tag(tag);
read_ops_.RecvMessage(msg);
call_.PerformOps(&read_ops_);
}
void Write(const W& msg, void* tag) GRPC_OVERRIDE {
write_ops_.set_output_tag(tag);
if (!ctx_->sent_initial_metadata_) {
write_ops_.SendInitialMetadata(ctx_->initial_metadata_);
ctx_->sent_initial_metadata_ = true;
}
// TODO(ctiller): don't assert
GPR_CODEGEN_ASSERT(write_ops_.SendMessage(msg).ok());
call_.PerformOps(&write_ops_);
}
void Finish(const Status& status, void* tag) {
finish_ops_.set_output_tag(tag);
if (!ctx_->sent_initial_metadata_) {
finish_ops_.SendInitialMetadata(ctx_->initial_metadata_);
ctx_->sent_initial_metadata_ = true;
}
finish_ops_.ServerSendStatus(ctx_->trailing_metadata_, status);
call_.PerformOps(&finish_ops_);
}
private:
friend class ::grpc::Server;
void BindCall(Call* call) GRPC_OVERRIDE { call_ = *call; }
Call call_;
ServerContext* ctx_;
CallOpSet<CallOpSendInitialMetadata> meta_ops_;
CallOpSet<CallOpRecvMessage<R>> read_ops_;
CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage> write_ops_;
CallOpSet<CallOpSendInitialMetadata, CallOpServerSendStatus> finish_ops_;
};
} // namespace grpc
#endif // GRPCXX_IMPL_CODEGEN_IMPL_ASYNC_STREAM_H

@ -0,0 +1,152 @@
/*
*
* Copyright 2016, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#ifndef GRPCXX_IMPL_CODEGEN_IMPL_STATUS_CODE_ENUM_H
#define GRPCXX_IMPL_CODEGEN_IMPL_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.
///
/// 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 // GRPCXX_IMPL_CODEGEN_IMPL_STATUS_CODE_ENUM_H

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -31,12 +31,15 @@
* *
*/ */
#include "src/core/surface/init.h" #ifndef GRPCXX_IMPL_CODEGEN_IMPL_SYNC_H
#include "src/core/debug/trace.h" #define GRPCXX_IMPL_CODEGEN_IMPL_SYNC_H
#include "src/core/security/secure_endpoint.h"
#include "src/core/tsi/transport_security_interface.h"
void grpc_security_pre_init(void) { #include <grpc++/impl/codegen/config.h>
grpc_register_tracer("secure_endpoint", &grpc_trace_secure_endpoint);
grpc_register_tracer("transport_security", &tsi_tracing_enabled); #ifdef GRPC_CXX0X_NO_THREAD
} #include <grpc++/impl/codegen/sync_no_cxx11.h>
#else
#include <grpc++/impl/codegen/sync_cxx11.h>
#endif
#endif // GRPCXX_IMPL_CODEGEN_IMPL_SYNC_H

@ -34,6 +34,7 @@
#ifndef GRPCXX_IMPL_CODEGEN_METHOD_HANDLER_IMPL_H #ifndef GRPCXX_IMPL_CODEGEN_METHOD_HANDLER_IMPL_H
#define GRPCXX_IMPL_CODEGEN_METHOD_HANDLER_IMPL_H #define GRPCXX_IMPL_CODEGEN_METHOD_HANDLER_IMPL_H
#include <grpc++/impl/codegen/core_codegen_interface.h>
#include <grpc++/impl/codegen/rpc_service_method.h> #include <grpc++/impl/codegen/rpc_service_method.h>
#include <grpc++/impl/codegen/sync_stream.h> #include <grpc++/impl/codegen/sync_stream.h>
@ -58,9 +59,10 @@ class RpcMethodHandler : public MethodHandler {
status = func_(service_, param.server_context, &req, &rsp); status = func_(service_, param.server_context, &req, &rsp);
} }
GPR_ASSERT(!param.server_context->sent_initial_metadata_); GPR_CODEGEN_ASSERT(!param.server_context->sent_initial_metadata_);
CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage, CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,
CallOpServerSendStatus> ops; CallOpServerSendStatus>
ops;
ops.SendInitialMetadata(param.server_context->initial_metadata_); ops.SendInitialMetadata(param.server_context->initial_metadata_);
if (status.ok()) { if (status.ok()) {
status = ops.SendMessage(rsp); status = ops.SendMessage(rsp);
@ -73,7 +75,8 @@ class RpcMethodHandler : public MethodHandler {
private: private:
// Application provided rpc handler function. // Application provided rpc handler function.
std::function<Status(ServiceType*, ServerContext*, const RequestType*, std::function<Status(ServiceType*, ServerContext*, const RequestType*,
ResponseType*)> func_; ResponseType*)>
func_;
// The class the above handler function lives in. // The class the above handler function lives in.
ServiceType* service_; ServiceType* service_;
}; };
@ -93,9 +96,10 @@ class ClientStreamingHandler : public MethodHandler {
ResponseType rsp; ResponseType rsp;
Status status = func_(service_, param.server_context, &reader, &rsp); Status status = func_(service_, param.server_context, &reader, &rsp);
GPR_ASSERT(!param.server_context->sent_initial_metadata_); GPR_CODEGEN_ASSERT(!param.server_context->sent_initial_metadata_);
CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage, CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,
CallOpServerSendStatus> ops; CallOpServerSendStatus>
ops;
ops.SendInitialMetadata(param.server_context->initial_metadata_); ops.SendInitialMetadata(param.server_context->initial_metadata_);
if (status.ok()) { if (status.ok()) {
status = ops.SendMessage(rsp); status = ops.SendMessage(rsp);
@ -107,7 +111,8 @@ class ClientStreamingHandler : public MethodHandler {
private: private:
std::function<Status(ServiceType*, ServerContext*, ServerReader<RequestType>*, std::function<Status(ServiceType*, ServerContext*, ServerReader<RequestType>*,
ResponseType*)> func_; ResponseType*)>
func_;
ServiceType* service_; ServiceType* service_;
}; };
@ -142,7 +147,8 @@ class ServerStreamingHandler : public MethodHandler {
private: private:
std::function<Status(ServiceType*, ServerContext*, const RequestType*, std::function<Status(ServiceType*, ServerContext*, const RequestType*,
ServerWriter<ResponseType>*)> func_; ServerWriter<ResponseType>*)>
func_;
ServiceType* service_; ServiceType* service_;
}; };
@ -173,7 +179,8 @@ class BidiStreamingHandler : public MethodHandler {
private: private:
std::function<Status(ServiceType*, ServerContext*, std::function<Status(ServiceType*, ServerContext*,
ServerReaderWriter<ResponseType, RequestType>*)> func_; ServerReaderWriter<ResponseType, RequestType>*)>
func_;
ServiceType* service_; ServiceType* service_;
}; };

@ -36,22 +36,16 @@
#include <type_traits> #include <type_traits>
#include <grpc/impl/codegen/byte_buffer.h>
#include <grpc++/impl/codegen/serialization_traits.h>
#include <grpc++/impl/codegen/config_protobuf.h> #include <grpc++/impl/codegen/config_protobuf.h>
#include <grpc++/impl/codegen/core_codegen_interface.h>
#include <grpc++/impl/codegen/serialization_traits.h>
#include <grpc++/impl/codegen/status.h> #include <grpc++/impl/codegen/status.h>
#include <grpc/impl/codegen/byte_buffer.h>
#include <grpc/impl/codegen/log.h>
namespace grpc { namespace grpc {
// Serialize the msg into a buffer created inside the function. The caller extern CoreCodegenInterface* g_core_codegen_interface;
// should destroy the returned buffer when done with it. If serialization fails,
// false is returned and buffer is left unchanged.
Status SerializeProto(const grpc::protobuf::Message& msg,
grpc_byte_buffer** buffer);
// The caller keeps ownership of buffer and msg.
Status DeserializeProto(grpc_byte_buffer* buffer, grpc::protobuf::Message* msg,
int max_message_size);
template <class T> template <class T>
class SerializationTraits<T, typename std::enable_if<std::is_base_of< class SerializationTraits<T, typename std::enable_if<std::is_base_of<
@ -60,14 +54,13 @@ class SerializationTraits<T, typename std::enable_if<std::is_base_of<
static Status Serialize(const grpc::protobuf::Message& msg, static Status Serialize(const grpc::protobuf::Message& msg,
grpc_byte_buffer** buffer, bool* own_buffer) { grpc_byte_buffer** buffer, bool* own_buffer) {
*own_buffer = true; *own_buffer = true;
return SerializeProto(msg, buffer); return g_core_codegen_interface->SerializeProto(msg, buffer);
} }
static Status Deserialize(grpc_byte_buffer* buffer, static Status Deserialize(grpc_byte_buffer* buffer,
grpc::protobuf::Message* msg, grpc::protobuf::Message* msg,
int max_message_size) { int max_message_size) {
auto status = DeserializeProto(buffer, msg, max_message_size); return g_core_codegen_interface->DeserializeProto(buffer, msg,
grpc_byte_buffer_destroy(buffer); max_message_size);
return status;
} }
}; };

@ -40,10 +40,10 @@
#include <memory> #include <memory>
#include <vector> #include <vector>
#include <grpc/impl/codegen/byte_buffer.h>
#include <grpc++/impl/codegen/config.h> #include <grpc++/impl/codegen/config.h>
#include <grpc++/impl/codegen/rpc_method.h> #include <grpc++/impl/codegen/rpc_method.h>
#include <grpc++/impl/codegen/status.h> #include <grpc++/impl/codegen/status.h>
#include <grpc/impl/codegen/byte_buffer.h>
namespace grpc { namespace grpc {
class ServerContext; class ServerContext;

@ -37,12 +37,12 @@
#include <map> #include <map>
#include <memory> #include <memory>
#include <grpc/impl/codegen/compression_types.h>
#include <grpc/impl/codegen/time.h>
#include <grpc++/impl/codegen/security/auth_context.h>
#include <grpc++/impl/codegen/config.h> #include <grpc++/impl/codegen/config.h>
#include <grpc++/impl/codegen/security/auth_context.h>
#include <grpc++/impl/codegen/string_ref.h> #include <grpc++/impl/codegen/string_ref.h>
#include <grpc++/impl/codegen/time.h> #include <grpc++/impl/codegen/time.h>
#include <grpc/impl/codegen/compression_types.h>
#include <grpc/impl/codegen/time.h>
struct gpr_timespec; struct gpr_timespec;
struct grpc_metadata; struct grpc_metadata;

@ -34,10 +34,11 @@
#ifndef GRPCXX_IMPL_CODEGEN_SERVER_INTERFACE_H #ifndef GRPCXX_IMPL_CODEGEN_SERVER_INTERFACE_H
#define GRPCXX_IMPL_CODEGEN_SERVER_INTERFACE_H #define GRPCXX_IMPL_CODEGEN_SERVER_INTERFACE_H
#include <grpc/impl/codegen/grpc_types.h>
#include <grpc++/impl/codegen/call_hook.h> #include <grpc++/impl/codegen/call_hook.h>
#include <grpc++/impl/codegen/completion_queue_tag.h> #include <grpc++/impl/codegen/completion_queue_tag.h>
#include <grpc++/impl/codegen/core_codegen_interface.h>
#include <grpc++/impl/codegen/rpc_service_method.h> #include <grpc++/impl/codegen/rpc_service_method.h>
#include <grpc/impl/codegen/grpc_types.h>
namespace grpc { namespace grpc {
@ -191,10 +192,11 @@ class ServerInterface : public CallHook {
bool FinalizeResult(void** tag, bool* status) GRPC_OVERRIDE { bool FinalizeResult(void** tag, bool* status) GRPC_OVERRIDE {
bool serialization_status = bool serialization_status =
*status && payload_ && *status && payload_ &&
SerializationTraits<Message>::Deserialize( SerializationTraits<Message>::Deserialize(payload_, request_,
payload_, request_, server_->max_message_size()).ok(); server_->max_message_size())
.ok();
bool ret = RegisteredAsyncRequest::FinalizeResult(tag, status); bool ret = RegisteredAsyncRequest::FinalizeResult(tag, status);
*status = serialization_status&&* status; *status = serialization_status && *status;
return ret; return ret;
} }
@ -223,7 +225,7 @@ class ServerInterface : public CallHook {
CompletionQueue* call_cq, CompletionQueue* call_cq,
ServerCompletionQueue* notification_cq, void* tag, ServerCompletionQueue* notification_cq, void* tag,
Message* message) { Message* message) {
GPR_ASSERT(method); GPR_CODEGEN_ASSERT(method);
new PayloadAsyncRequest<Message>(method->server_tag(), this, context, new PayloadAsyncRequest<Message>(method->server_tag(), this, context,
stream, call_cq, notification_cq, tag, stream, call_cq, notification_cq, tag,
message); message);
@ -233,7 +235,7 @@ class ServerInterface : public CallHook {
ServerAsyncStreamingInterface* stream, ServerAsyncStreamingInterface* stream,
CompletionQueue* call_cq, CompletionQueue* call_cq,
ServerCompletionQueue* notification_cq, void* tag) { ServerCompletionQueue* notification_cq, void* tag) {
GPR_ASSERT(method); GPR_CODEGEN_ASSERT(method);
new NoPayloadAsyncRequest(method->server_tag(), this, context, stream, new NoPayloadAsyncRequest(method->server_tag(), this, context, stream,
call_cq, notification_cq, tag); call_cq, notification_cq, tag);
} }

@ -35,6 +35,7 @@
#define GRPCXX_IMPL_CODEGEN_SERVICE_TYPE_H #define GRPCXX_IMPL_CODEGEN_SERVICE_TYPE_H
#include <grpc++/impl/codegen/config.h> #include <grpc++/impl/codegen/config.h>
#include <grpc++/impl/codegen/core_codegen_interface.h>
#include <grpc++/impl/codegen/rpc_service_method.h> #include <grpc++/impl/codegen/rpc_service_method.h>
#include <grpc++/impl/codegen/serialization_traits.h> #include <grpc++/impl/codegen/serialization_traits.h>
#include <grpc++/impl/codegen/server_interface.h> #include <grpc++/impl/codegen/server_interface.h>
@ -131,21 +132,18 @@ class Service {
void AddMethod(RpcServiceMethod* method) { methods_.emplace_back(method); } void AddMethod(RpcServiceMethod* method) { methods_.emplace_back(method); }
void MarkMethodAsync(int index) { void MarkMethodAsync(int index) {
if (methods_[index].get() == nullptr) { GPR_CODEGEN_ASSERT(
gpr_log(GPR_ERROR, methods_[index].get() != nullptr &&
"Cannot mark the method as 'async' because it has already been " "Cannot mark the method as 'async' because it has already been "
"marked as 'generic'."); "marked as 'generic'.");
return;
}
methods_[index]->ResetHandler(); methods_[index]->ResetHandler();
} }
void MarkMethodGeneric(int index) { void MarkMethodGeneric(int index) {
if (methods_[index]->handler() == nullptr) { GPR_CODEGEN_ASSERT(
gpr_log(GPR_ERROR, methods_[index]->handler() != nullptr &&
"Cannot mark the method as 'generic' because it has already been " "Cannot mark the method as 'generic' because it has already been "
"marked as 'async'."); "marked as 'async'.");
}
methods_[index].reset(); methods_[index].reset();
} }

@ -34,8 +34,12 @@
#ifndef GRPCXX_IMPL_CODEGEN_STRING_REF_H #ifndef GRPCXX_IMPL_CODEGEN_STRING_REF_H
#define GRPCXX_IMPL_CODEGEN_STRING_REF_H #define GRPCXX_IMPL_CODEGEN_STRING_REF_H
#include <iterator> #include <string.h>
#include <algorithm>
#include <iosfwd> #include <iosfwd>
#include <iostream>
#include <iterator>
#include <grpc++/impl/codegen/config.h> #include <grpc++/impl/codegen/config.h>
@ -62,8 +66,13 @@ class string_ref {
string_ref() : data_(nullptr), length_(0) {} string_ref() : data_(nullptr), length_(0) {}
string_ref(const string_ref& other) string_ref(const string_ref& other)
: data_(other.data_), length_(other.length_) {} : data_(other.data_), length_(other.length_) {}
string_ref& operator=(const string_ref& rhs); string_ref& operator=(const string_ref& rhs) {
string_ref(const char* s); 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 char* s, size_t l) : data_(s), length_(l) {}
string_ref(const grpc::string& s) : data_(s.data()), length_(s.length()) {} string_ref(const grpc::string& s) : data_(s.data()), length_(s.length()) {}
@ -95,13 +104,40 @@ class string_ref {
const char* data() const { return data_; } const char* data() const { return data_; }
// string operations // string operations
int compare(string_ref x) const; int compare(string_ref x) const {
bool starts_with(string_ref x) const; size_t min_size = length_ < x.length_ ? length_ : x.length_;
bool ends_with(string_ref x) const; int r = memcmp(data_, x.data_, min_size);
size_t find(string_ref s) const; if (r < 0) return -1;
size_t find(char c) const; 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);
}
string_ref substr(size_t pos, size_t n = npos) const; 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: private:
const char* data_; const char* data_;
@ -109,14 +145,16 @@ class string_ref {
}; };
// Comparison operators // Comparison operators
bool operator==(string_ref x, string_ref y); inline bool operator==(string_ref x, string_ref y) { return x.compare(y) == 0; }
bool operator!=(string_ref x, string_ref y); inline bool operator!=(string_ref x, string_ref y) { return x.compare(y) != 0; }
bool operator<(string_ref x, string_ref y); inline bool operator<(string_ref x, string_ref y) { return x.compare(y) < 0; }
bool operator>(string_ref x, string_ref y); inline bool operator<=(string_ref x, string_ref y) { return x.compare(y) <= 0; }
bool operator<=(string_ref x, string_ref y); inline bool operator>(string_ref x, string_ref y) { return x.compare(y) > 0; }
bool operator>=(string_ref x, string_ref y); inline bool operator>=(string_ref x, string_ref y) { return x.compare(y) >= 0; }
std::ostream& operator<<(std::ostream& stream, const string_ref& string); inline std::ostream& operator<<(std::ostream& out, const string_ref& string) {
return out << grpc::string(string.begin(), string.end());
}
} // namespace grpc } // namespace grpc

@ -38,6 +38,7 @@
#include <grpc++/impl/codegen/channel_interface.h> #include <grpc++/impl/codegen/channel_interface.h>
#include <grpc++/impl/codegen/client_context.h> #include <grpc++/impl/codegen/client_context.h>
#include <grpc++/impl/codegen/completion_queue.h> #include <grpc++/impl/codegen/completion_queue.h>
#include <grpc++/impl/codegen/core_codegen_interface.h>
#include <grpc++/impl/codegen/server_context.h> #include <grpc++/impl/codegen/server_context.h>
#include <grpc++/impl/codegen/service_type.h> #include <grpc++/impl/codegen/service_type.h>
#include <grpc++/impl/codegen/status.h> #include <grpc++/impl/codegen/status.h>
@ -122,17 +123,18 @@ class ClientReader GRPC_FINAL : public ClientReaderInterface<R> {
ClientContext* context, const W& request) ClientContext* context, const W& request)
: context_(context), call_(channel->CreateCall(method, context, &cq_)) { : context_(context), call_(channel->CreateCall(method, context, &cq_)) {
CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage, CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,
CallOpClientSendClose> ops; CallOpClientSendClose>
ops;
ops.SendInitialMetadata(context->send_initial_metadata_); ops.SendInitialMetadata(context->send_initial_metadata_);
// TODO(ctiller): don't assert // TODO(ctiller): don't assert
GPR_ASSERT(ops.SendMessage(request).ok()); GPR_CODEGEN_ASSERT(ops.SendMessage(request).ok());
ops.ClientSendClose(); ops.ClientSendClose();
call_.PerformOps(&ops); call_.PerformOps(&ops);
cq_.Pluck(&ops); cq_.Pluck(&ops);
} }
void WaitForInitialMetadata() GRPC_OVERRIDE { void WaitForInitialMetadata() GRPC_OVERRIDE {
GPR_ASSERT(!context_->initial_metadata_received_); GPR_CODEGEN_ASSERT(!context_->initial_metadata_received_);
CallOpSet<CallOpRecvInitialMetadata> ops; CallOpSet<CallOpRecvInitialMetadata> ops;
ops.RecvInitialMetadata(context_); ops.RecvInitialMetadata(context_);
@ -155,7 +157,7 @@ class ClientReader GRPC_FINAL : public ClientReaderInterface<R> {
Status status; Status status;
ops.ClientRecvStatus(context_, &status); ops.ClientRecvStatus(context_, &status);
call_.PerformOps(&ops); call_.PerformOps(&ops);
GPR_ASSERT(cq_.Pluck(&ops)); GPR_CODEGEN_ASSERT(cq_.Pluck(&ops));
return status; return status;
} }
@ -194,7 +196,7 @@ class ClientWriter : public ClientWriterInterface<W> {
} }
void WaitForInitialMetadata() { void WaitForInitialMetadata() {
GPR_ASSERT(!context_->initial_metadata_received_); GPR_CODEGEN_ASSERT(!context_->initial_metadata_received_);
CallOpSet<CallOpRecvInitialMetadata> ops; CallOpSet<CallOpRecvInitialMetadata> ops;
ops.RecvInitialMetadata(context_); ops.RecvInitialMetadata(context_);
@ -227,14 +229,15 @@ class ClientWriter : public ClientWriterInterface<W> {
} }
finish_ops_.ClientRecvStatus(context_, &status); finish_ops_.ClientRecvStatus(context_, &status);
call_.PerformOps(&finish_ops_); call_.PerformOps(&finish_ops_);
GPR_ASSERT(cq_.Pluck(&finish_ops_)); GPR_CODEGEN_ASSERT(cq_.Pluck(&finish_ops_));
return status; return status;
} }
private: private:
ClientContext* context_; ClientContext* context_;
CallOpSet<CallOpRecvInitialMetadata, CallOpGenericRecvMessage, CallOpSet<CallOpRecvInitialMetadata, CallOpGenericRecvMessage,
CallOpClientRecvStatus> finish_ops_; CallOpClientRecvStatus>
finish_ops_;
CompletionQueue cq_; CompletionQueue cq_;
Call call_; Call call_;
}; };
@ -271,7 +274,7 @@ class ClientReaderWriter GRPC_FINAL : public ClientReaderWriterInterface<W, R> {
} }
void WaitForInitialMetadata() GRPC_OVERRIDE { void WaitForInitialMetadata() GRPC_OVERRIDE {
GPR_ASSERT(!context_->initial_metadata_received_); GPR_CODEGEN_ASSERT(!context_->initial_metadata_received_);
CallOpSet<CallOpRecvInitialMetadata> ops; CallOpSet<CallOpRecvInitialMetadata> ops;
ops.RecvInitialMetadata(context_); ops.RecvInitialMetadata(context_);
@ -312,7 +315,7 @@ class ClientReaderWriter GRPC_FINAL : public ClientReaderWriterInterface<W, R> {
Status status; Status status;
ops.ClientRecvStatus(context_, &status); ops.ClientRecvStatus(context_, &status);
call_.PerformOps(&ops); call_.PerformOps(&ops);
GPR_ASSERT(cq_.Pluck(&ops)); GPR_CODEGEN_ASSERT(cq_.Pluck(&ops));
return status; return status;
} }
@ -328,7 +331,7 @@ class ServerReader GRPC_FINAL : public ReaderInterface<R> {
ServerReader(Call* call, ServerContext* ctx) : call_(call), ctx_(ctx) {} ServerReader(Call* call, ServerContext* ctx) : call_(call), ctx_(ctx) {}
void SendInitialMetadata() { void SendInitialMetadata() {
GPR_ASSERT(!ctx_->sent_initial_metadata_); GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_);
CallOpSet<CallOpSendInitialMetadata> ops; CallOpSet<CallOpSendInitialMetadata> ops;
ops.SendInitialMetadata(ctx_->initial_metadata_); ops.SendInitialMetadata(ctx_->initial_metadata_);
@ -355,7 +358,7 @@ class ServerWriter GRPC_FINAL : public WriterInterface<W> {
ServerWriter(Call* call, ServerContext* ctx) : call_(call), ctx_(ctx) {} ServerWriter(Call* call, ServerContext* ctx) : call_(call), ctx_(ctx) {}
void SendInitialMetadata() { void SendInitialMetadata() {
GPR_ASSERT(!ctx_->sent_initial_metadata_); GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_);
CallOpSet<CallOpSendInitialMetadata> ops; CallOpSet<CallOpSendInitialMetadata> ops;
ops.SendInitialMetadata(ctx_->initial_metadata_); ops.SendInitialMetadata(ctx_->initial_metadata_);
@ -391,7 +394,7 @@ class ServerReaderWriter GRPC_FINAL : public WriterInterface<W>,
ServerReaderWriter(Call* call, ServerContext* ctx) : call_(call), ctx_(ctx) {} ServerReaderWriter(Call* call, ServerContext* ctx) : call_(call), ctx_(ctx) {}
void SendInitialMetadata() { void SendInitialMetadata() {
GPR_ASSERT(!ctx_->sent_initial_metadata_); GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_);
CallOpSet<CallOpSendInitialMetadata> ops; CallOpSet<CallOpSendInitialMetadata> ops;
ops.SendInitialMetadata(ctx_->initial_metadata_); ops.SendInitialMetadata(ctx_->initial_metadata_);

@ -40,21 +40,31 @@
#include <grpc++/impl/codegen/grpc_library.h> #include <grpc++/impl/codegen/grpc_library.h>
#include <grpc/grpc.h> #include <grpc/grpc.h>
#include "src/cpp/common/core_codegen.h"
namespace grpc { namespace grpc {
namespace internal { namespace internal {
class GrpcLibrary GRPC_FINAL : public GrpcLibraryInterface { class GrpcLibrary GRPC_FINAL : public GrpcLibraryInterface {
public: public:
void init() GRPC_OVERRIDE { grpc_init(); } void init() GRPC_OVERRIDE { grpc_init(); }
void shutdown() GRPC_OVERRIDE { grpc_shutdown(); } void shutdown() GRPC_OVERRIDE { grpc_shutdown(); }
}; };
static GrpcLibrary g_gli; static GrpcLibrary g_gli;
static CoreCodegen g_core_codegen;
/// Instantiating this class ensures the proper initialization of gRPC.
class GrpcLibraryInitializer GRPC_FINAL { class GrpcLibraryInitializer GRPC_FINAL {
public: public:
GrpcLibraryInitializer() { grpc::g_glip = &g_gli; } GrpcLibraryInitializer() {
if (grpc::g_glip == nullptr) {
grpc::g_glip = &g_gli;
}
if (grpc::g_core_codegen_interface == nullptr) {
grpc::g_core_codegen_interface = &g_core_codegen;
}
}
/// A no-op method to force the linker to reference this class, which will /// A no-op method to force the linker to reference this class, which will
/// take care of initializing and shutting down the gRPC runtime. /// take care of initializing and shutting down the gRPC runtime.

@ -31,9 +31,9 @@
* *
*/ */
#ifndef GRPC_INTERNAL_CPP_PROTO_PROTO_UTILS_H #ifndef GRPCXX_IMPL_PROTO_UTILS_H
#define GRPC_INTERNAL_CPP_PROTO_PROTO_UTILS_H #define GRPCXX_IMPL_PROTO_UTILS_H
#include <grpc++/impl/codegen/proto_utils.h> #include <grpc++/impl/codegen/proto_utils.h>
#endif // GRPC_INTERNAL_CPP_PROTO_PROTO_UTILS_H #endif // GRPCXX_IMPL_PROTO_UTILS_H

@ -31,9 +31,9 @@
* *
*/ */
#ifndef GRPCXX_SUPPORT_AUTH_CONTEXT_H #ifndef GRPCXX_SECURITY_AUTH_CONTEXT_H
#define GRPCXX_SUPPORT_AUTH_CONTEXT_H #define GRPCXX_SECURITY_AUTH_CONTEXT_H
#include <grpc++/impl/codegen/security/auth_context.h> #include <grpc++/impl/codegen/security/auth_context.h>
#endif // GRPCXX_SUPPORT_AUTH_CONTEXT_H #endif // GRPCXX_SECURITY_AUTH_CONTEXT_H

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -31,8 +31,8 @@
* *
*/ */
#ifndef GRPCXX_AUTH_METADATA_PROCESSOR_H_ #ifndef GRPCXX_SECURITY_AUTH_METADATA_PROCESSOR_H
#define GRPCXX_AUTH_METADATA_PROCESSOR_H_ #define GRPCXX_SECURITY_AUTH_METADATA_PROCESSOR_H
#include <map> #include <map>
@ -70,4 +70,4 @@ class AuthMetadataProcessor {
} // namespace grpc } // namespace grpc
#endif // GRPCXX_AUTH_METADATA_PROCESSOR_H_ #endif // GRPCXX_SECURITY_AUTH_METADATA_PROCESSOR_H

@ -31,8 +31,8 @@
* *
*/ */
#ifndef GRPCXX_CREDENTIALS_H #ifndef GRPCXX_SECURITY_CREDENTIALS_H
#define GRPCXX_CREDENTIALS_H #define GRPCXX_SECURITY_CREDENTIALS_H
#include <map> #include <map>
#include <memory> #include <memory>
@ -57,7 +57,7 @@ class SecureCallCredentials;
/// for all the calls on that channel. /// for all the calls on that channel.
/// ///
/// \see http://www.grpc.io/docs/guides/auth.html /// \see http://www.grpc.io/docs/guides/auth.html
class ChannelCredentials : private GrpcLibrary { class ChannelCredentials : private GrpcLibraryCodegen {
public: public:
ChannelCredentials(); ChannelCredentials();
~ChannelCredentials(); ~ChannelCredentials();
@ -83,7 +83,7 @@ class ChannelCredentials : private GrpcLibrary {
/// authenticate with a server for a given call on a channel. /// authenticate with a server for a given call on a channel.
/// ///
/// \see http://www.grpc.io/docs/guides/auth.html /// \see http://www.grpc.io/docs/guides/auth.html
class CallCredentials : private GrpcLibrary { class CallCredentials : private GrpcLibraryCodegen {
public: public:
CallCredentials(); CallCredentials();
~CallCredentials(); ~CallCredentials();
@ -229,4 +229,4 @@ std::shared_ptr<CallCredentials> MetadataCredentialsFromPlugin(
} // namespace grpc } // namespace grpc
#endif // GRPCXX_CREDENTIALS_H #endif // GRPCXX_SECURITY_CREDENTIALS_H

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -31,8 +31,8 @@
* *
*/ */
#ifndef GRPCXX_SERVER_CREDENTIALS_H #ifndef GRPCXX_SECURITY_SERVER_CREDENTIALS_H
#define GRPCXX_SERVER_CREDENTIALS_H #define GRPCXX_SECURITY_SERVER_CREDENTIALS_H
#include <memory> #include <memory>
#include <vector> #include <vector>
@ -89,4 +89,4 @@ std::shared_ptr<ServerCredentials> InsecureServerCredentials();
} // namespace grpc } // namespace grpc
#endif // GRPCXX_SERVER_CREDENTIALS_H #endif // GRPCXX_SECURITY_SERVER_CREDENTIALS_H

@ -62,7 +62,7 @@ class ThreadPoolInterface;
/// Models a gRPC server. /// Models a gRPC server.
/// ///
/// Servers are configured and started via \a grpc::ServerBuilder. /// Servers are configured and started via \a grpc::ServerBuilder.
class Server GRPC_FINAL : public ServerInterface, private GrpcLibrary { class Server GRPC_FINAL : public ServerInterface, private GrpcLibraryCodegen {
public: public:
~Server(); ~Server();

@ -34,13 +34,13 @@
#ifndef GRPCXX_SUPPORT_BYTE_BUFFER_H #ifndef GRPCXX_SUPPORT_BYTE_BUFFER_H
#define GRPCXX_SUPPORT_BYTE_BUFFER_H #define GRPCXX_SUPPORT_BYTE_BUFFER_H
#include <grpc/grpc.h>
#include <grpc/byte_buffer.h>
#include <grpc/support/log.h>
#include <grpc++/impl/serialization_traits.h> #include <grpc++/impl/serialization_traits.h>
#include <grpc++/support/config.h> #include <grpc++/support/config.h>
#include <grpc++/support/slice.h> #include <grpc++/support/slice.h>
#include <grpc++/support/status.h> #include <grpc++/support/status.h>
#include <grpc/byte_buffer.h>
#include <grpc/grpc.h>
#include <grpc/support/log.h>
#include <vector> #include <vector>
@ -99,8 +99,8 @@ class SerializationTraits<ByteBuffer, void> {
} }
static Status Serialize(const ByteBuffer& source, grpc_byte_buffer** buffer, static Status Serialize(const ByteBuffer& source, grpc_byte_buffer** buffer,
bool* own_buffer) { bool* own_buffer) {
*buffer = source.buffer(); *buffer = grpc_byte_buffer_copy(source.buffer());
*own_buffer = false; *own_buffer = true;
return Status::OK; return Status::OK;
} }
}; };

@ -34,12 +34,12 @@
#ifndef GRPCXX_SUPPORT_CHANNEL_ARGUMENTS_H #ifndef GRPCXX_SUPPORT_CHANNEL_ARGUMENTS_H
#define GRPCXX_SUPPORT_CHANNEL_ARGUMENTS_H #define GRPCXX_SUPPORT_CHANNEL_ARGUMENTS_H
#include <vector>
#include <list> #include <list>
#include <vector>
#include <grpc++/support/config.h>
#include <grpc/compression.h> #include <grpc/compression.h>
#include <grpc/grpc.h> #include <grpc/grpc.h>
#include <grpc++/support/config.h>
namespace grpc { namespace grpc {
namespace testing { namespace testing {

@ -34,8 +34,8 @@
#ifndef GRPCXX_SUPPORT_SLICE_H #ifndef GRPCXX_SUPPORT_SLICE_H
#define GRPCXX_SUPPORT_SLICE_H #define GRPCXX_SUPPORT_SLICE_H
#include <grpc/support/slice.h>
#include <grpc++/support/config.h> #include <grpc++/support/config.h>
#include <grpc/support/slice.h>
namespace grpc { namespace grpc {

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -34,8 +34,8 @@
#ifndef GRPC_BYTE_BUFFER_READER_H #ifndef GRPC_BYTE_BUFFER_READER_H
#define GRPC_BYTE_BUFFER_READER_H #define GRPC_BYTE_BUFFER_READER_H
#include <grpc/grpc.h>
#include <grpc/byte_buffer.h> #include <grpc/byte_buffer.h>
#include <grpc/grpc.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {

@ -35,8 +35,8 @@
* they can (ultimately) be used in many different RPC systems (with differing * they can (ultimately) be used in many different RPC systems (with differing
* implementations). */ * implementations). */
#ifndef CENSUS_CENSUS_H #ifndef GRPC_CENSUS_H
#define CENSUS_CENSUS_H #define GRPC_CENSUS_H
#include <grpc/grpc.h> #include <grpc/grpc.h>
@ -537,4 +537,4 @@ CENSUSAPI void census_view_reset(census_view *view);
} }
#endif #endif
#endif /* CENSUS_CENSUS_H */ #endif /* GRPC_CENSUS_H */

@ -36,8 +36,8 @@
#include <stdlib.h> #include <stdlib.h>
#include <grpc/impl/codegen/port_platform.h>
#include <grpc/impl/codegen/compression_types.h> #include <grpc/impl/codegen/compression_types.h>
#include <grpc/impl/codegen/port_platform.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
@ -55,11 +55,12 @@ GRPCAPI int grpc_compression_algorithm_parse(
GRPCAPI int grpc_compression_algorithm_name( GRPCAPI int grpc_compression_algorithm_name(
grpc_compression_algorithm algorithm, char **name); grpc_compression_algorithm algorithm, char **name);
/** Returns the compression algorithm corresponding to \a level. /** Returns the compression algorithm corresponding to \a level for the
* compression algorithms encoded in the \a accepted_encodings bitset.
* *
* It abort()s for unknown levels . */ * It abort()s for unknown levels . */
GRPCAPI grpc_compression_algorithm GRPCAPI grpc_compression_algorithm grpc_compression_algorithm_for_level(
grpc_compression_algorithm_for_level(grpc_compression_level level); grpc_compression_level level, uint32_t accepted_encodings);
GRPCAPI void grpc_compression_options_init(grpc_compression_options *opts); GRPCAPI void grpc_compression_options_init(grpc_compression_options *opts);

@ -154,9 +154,8 @@ GRPCAPI void grpc_alarm_cancel(grpc_alarm *alarm);
GRPCAPI void grpc_alarm_destroy(grpc_alarm *alarm); GRPCAPI void grpc_alarm_destroy(grpc_alarm *alarm);
/** Check the connectivity state of a channel. */ /** Check the connectivity state of a channel. */
GRPCAPI grpc_connectivity_state GRPCAPI grpc_connectivity_state grpc_channel_check_connectivity_state(
grpc_channel_check_connectivity_state(grpc_channel *channel, grpc_channel *channel, int try_to_connect);
int try_to_connect);
/** Watch for a change in connectivity state. /** Watch for a change in connectivity state.
Once the channel connectivity state is different from last_observed_state, Once the channel connectivity state is different from last_observed_state,
@ -267,9 +266,10 @@ GRPCAPI grpc_call_error grpc_call_cancel(grpc_call *call, void *reserved);
and description passed in. and description passed in.
Importantly, this function does not send status nor description to the Importantly, this function does not send status nor description to the
remote endpoint. */ remote endpoint. */
GRPCAPI grpc_call_error GRPCAPI grpc_call_error grpc_call_cancel_with_status(grpc_call *call,
grpc_call_cancel_with_status(grpc_call *call, grpc_status_code status, grpc_status_code status,
const char *description, void *reserved); const char *description,
void *reserved);
/** Destroy a call. /** Destroy a call.
THREAD SAFETY: grpc_call_destroy is thread-compatible */ THREAD SAFETY: grpc_call_destroy is thread-compatible */
@ -283,13 +283,11 @@ GRPCAPI void grpc_call_destroy(grpc_call *call);
to \a cq_bound_to_call. to \a cq_bound_to_call.
Note that \a cq_for_notification must have been registered to the server via Note that \a cq_for_notification must have been registered to the server via
\a grpc_server_register_completion_queue. */ \a grpc_server_register_completion_queue. */
GRPCAPI grpc_call_error GRPCAPI grpc_call_error grpc_server_request_call(
grpc_server_request_call(grpc_server *server, grpc_call **call, grpc_server *server, grpc_call **call, grpc_call_details *details,
grpc_call_details *details, grpc_metadata_array *request_metadata,
grpc_metadata_array *request_metadata, grpc_completion_queue *cq_bound_to_call,
grpc_completion_queue *cq_bound_to_call, grpc_completion_queue *cq_for_notification, void *tag_new);
grpc_completion_queue *cq_for_notification,
void *tag_new);
/** Registers a method in the server. /** Registers a method in the server.
Methods to this (host, method) pair will not be reported by Methods to this (host, method) pair will not be reported by

@ -48,6 +48,7 @@ extern "C" {
#define GRPC_X509_CN_PROPERTY_NAME "x509_common_name" #define GRPC_X509_CN_PROPERTY_NAME "x509_common_name"
#define GRPC_X509_SAN_PROPERTY_NAME "x509_subject_alternative_name" #define GRPC_X509_SAN_PROPERTY_NAME "x509_subject_alternative_name"
#define GRPC_X509_PEM_CERT_PROPERTY_NAME "x509_pem_cert"
typedef struct grpc_auth_context grpc_auth_context; typedef struct grpc_auth_context grpc_auth_context;
@ -79,9 +80,8 @@ grpc_auth_context_peer_identity(const grpc_auth_context *ctx);
/* Finds a property in the context. May return an empty iterator (first _next /* 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. */ will return NULL) if no property with this name was found in the context. */
GRPCAPI grpc_auth_property_iterator GRPCAPI grpc_auth_property_iterator grpc_auth_context_find_properties_by_name(
grpc_auth_context_find_properties_by_name(const grpc_auth_context *ctx, const grpc_auth_context *ctx, const char *name);
const char *name);
/* Gets the name of the property that indicates the peer identity. Will return /* Gets the name of the property that indicates the peer identity. Will return
NULL if the peer is not authenticated. */ NULL if the peer is not authenticated. */
@ -362,8 +362,8 @@ GRPCAPI int grpc_server_add_secure_http2_port(grpc_server *server,
/* Sets a credentials to a call. Can only be called on the client side before /* Sets a credentials to a call. Can only be called on the client side before
grpc_call_start_batch. */ grpc_call_start_batch. */
GRPCAPI grpc_call_error GRPCAPI grpc_call_error grpc_call_set_credentials(grpc_call *call,
grpc_call_set_credentials(grpc_call *call, grpc_call_credentials *creds); grpc_call_credentials *creds);
/* --- Auth Metadata Processing --- */ /* --- Auth Metadata Processing --- */

@ -34,8 +34,8 @@
#ifndef GRPC_IMPL_CODEGEN_LOG_H #ifndef GRPC_IMPL_CODEGEN_LOG_H
#define GRPC_IMPL_CODEGEN_LOG_H #define GRPC_IMPL_CODEGEN_LOG_H
#include <stdlib.h> /* for abort() */
#include <stdarg.h> #include <stdarg.h>
#include <stdlib.h> /* for abort() */
#include <grpc/impl/codegen/port_platform.h> #include <grpc/impl/codegen/port_platform.h>

@ -133,6 +133,7 @@
#define GPR_POSIX_TIME 1 #define GPR_POSIX_TIME 1
#define GPR_GETPID_IN_UNISTD_H 1 #define GPR_GETPID_IN_UNISTD_H 1
#define GPR_HAVE_MSG_NOSIGNAL 1 #define GPR_HAVE_MSG_NOSIGNAL 1
#define GPR_HAVE_UNIX_SOCKET 1
#elif defined(__linux__) #elif defined(__linux__)
#define GPR_POSIX_CRASH_HANDLER 1 #define GPR_POSIX_CRASH_HANDLER 1
#define GPR_PLATFORM_STRING "linux" #define GPR_PLATFORM_STRING "linux"
@ -154,6 +155,7 @@
#define GPR_POSIX_WAKEUP_FD 1 #define GPR_POSIX_WAKEUP_FD 1
#define GPR_POSIX_SOCKET 1 #define GPR_POSIX_SOCKET 1
#define GPR_POSIX_SOCKETADDR 1 #define GPR_POSIX_SOCKETADDR 1
#define GPR_HAVE_UNIX_SOCKET 1
#ifdef __GLIBC_PREREQ #ifdef __GLIBC_PREREQ
#if __GLIBC_PREREQ(2, 9) #if __GLIBC_PREREQ(2, 9)
#define GPR_LINUX_EVENTFD 1 #define GPR_LINUX_EVENTFD 1
@ -214,6 +216,7 @@
#define GPR_POSIX_TIME 1 #define GPR_POSIX_TIME 1
#define GPR_GETPID_IN_UNISTD_H 1 #define GPR_GETPID_IN_UNISTD_H 1
#define GPR_HAVE_SO_NOSIGPIPE 1 #define GPR_HAVE_SO_NOSIGPIPE 1
#define GPR_HAVE_UNIX_SOCKET 1
#ifdef _LP64 #ifdef _LP64
#define GPR_ARCH_64 1 #define GPR_ARCH_64 1
#else /* _LP64 */ #else /* _LP64 */
@ -242,13 +245,47 @@
#define GPR_POSIX_TIME 1 #define GPR_POSIX_TIME 1
#define GPR_GETPID_IN_UNISTD_H 1 #define GPR_GETPID_IN_UNISTD_H 1
#define GPR_HAVE_SO_NOSIGPIPE 1 #define GPR_HAVE_SO_NOSIGPIPE 1
#define GPR_HAVE_UNIX_SOCKET 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_CPU_POSIX 1
#define GPR_GCC_ATOMIC 1
#define GPR_GCC_TLS 1
#define GPR_POSIX_LOG 1
#define GPR_POSIX_MULTIPOLL_WITH_POLL 1
#define GPR_POSIX_WAKEUP_FD 1
#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1
#define GPR_POSIX_SOCKET 1
#define GPR_POSIX_SOCKETADDR 1
#define GPR_POSIX_SOCKETUTILS 1
#define GPR_POSIX_ENV 1
#define GPR_POSIX_FILE 1
#define GPR_POSIX_STRING 1
#define GPR_POSIX_SUBPROCESS 1
#define GPR_POSIX_SYNC 1
#define GPR_POSIX_TIME 1
#define GPR_GETPID_IN_UNISTD_H 1
#ifdef _LP64 #ifdef _LP64
#define GPR_ARCH_64 1 #define GPR_ARCH_64 1
#else /* _LP64 */ #else /* _LP64 */
#define GPR_ARCH_32 1 #define GPR_ARCH_32 1
#endif /* _LP64 */ #endif /* _LP64 */
#else #else
#error Could not auto-detect platform #error "Could not auto-detect platform"
#endif #endif
#endif /* GPR_NO_AUTODETECT_PLATFORM */ #endif /* GPR_NO_AUTODETECT_PLATFORM */

@ -31,8 +31,8 @@
* *
*/ */
#ifndef GRPC_IMPL_CODEGEN_H #ifndef GRPC_IMPL_CODEGEN_PROPAGATION_BITS_H
#define GRPC_IMPL_CODEGEN_H #define GRPC_IMPL_CODEGEN_PROPAGATION_BITS_H
#include <grpc/impl/codegen/port_platform.h> #include <grpc/impl/codegen/port_platform.h>
@ -64,4 +64,4 @@ extern "C" {
} }
#endif #endif
#endif /* GRPC_IMPL_CODEGEN_H */ #endif /* GRPC_IMPL_CODEGEN_PROPAGATION_BITS_H */

@ -122,8 +122,8 @@ GPRAPI gpr_slice gpr_slice_new(void *p, size_t len, void (*destroy)(void *));
/* Equivalent to gpr_slice_new, but with a two argument destroy function that /* Equivalent to gpr_slice_new, but with a two argument destroy function that
also takes the slice length. */ also takes the slice length. */
GPRAPI gpr_slice GPRAPI gpr_slice gpr_slice_new_with_len(void *p, size_t len,
gpr_slice_new_with_len(void *p, size_t len, void (*destroy)(void *, size_t)); void (*destroy)(void *, size_t));
/* Equivalent to gpr_slice_new(malloc(len), len, free), but saves one malloc() /* Equivalent to gpr_slice_new(malloc(len), len, free), but saves one malloc()
call. call.

@ -73,8 +73,8 @@ GPRAPI void gpr_slice_buffer_add(gpr_slice_buffer *sb, gpr_slice slice);
slice at the returned index in sb->slices) slice at the returned index in sb->slices)
The implementation MAY decide to concatenate data at the end of a small The implementation MAY decide to concatenate data at the end of a small
slice added in this fashion. */ slice added in this fashion. */
GPRAPI size_t GPRAPI size_t gpr_slice_buffer_add_indexed(gpr_slice_buffer *sb,
gpr_slice_buffer_add_indexed(gpr_slice_buffer *sb, gpr_slice slice); gpr_slice slice);
GPRAPI void gpr_slice_buffer_addn(gpr_slice_buffer *sb, gpr_slice *slices, GPRAPI void gpr_slice_buffer_addn(gpr_slice_buffer *sb, gpr_slice *slices,
size_t n); size_t n);
/* add a very small (less than 8 bytes) amount of data to the end of a slice /* add a very small (less than 8 bytes) amount of data to the end of a slice

@ -88,8 +88,8 @@ GPRAPI void gpr_time_init(void);
GPRAPI gpr_timespec gpr_now(gpr_clock_type clock); GPRAPI gpr_timespec gpr_now(gpr_clock_type clock);
/* Convert a timespec from one clock to another */ /* Convert a timespec from one clock to another */
GPRAPI gpr_timespec GPRAPI gpr_timespec gpr_convert_clock_type(gpr_timespec t,
gpr_convert_clock_type(gpr_timespec t, gpr_clock_type target_clock); gpr_clock_type target_clock);
/* Return -ve, 0, or +ve according to whether a < b, a == b, or a > b /* Return -ve, 0, or +ve according to whether a < b, a == b, or a > b
respectively. */ respectively. */

@ -31,9 +31,9 @@
* *
*/ */
#ifndef GRPC_IMPL_CODEGEN_ATM_GCC_ATOMIC_H #ifndef GRPC_SUPPORT_ATM_GCC_ATOMIC_H
#define GRPC_IMPL_CODEGEN_ATM_GCC_ATOMIC_H #define GRPC_SUPPORT_ATM_GCC_ATOMIC_H
#include <grpc/impl/codegen/atm_gcc_atomic.h> #include <grpc/impl/codegen/atm_gcc_atomic.h>
#endif /* GRPC_IMPL_CODEGEN_ATM_GCC_ATOMIC_H */ #endif /* GRPC_SUPPORT_ATM_GCC_ATOMIC_H */

@ -56,4 +56,4 @@ GPRAPI void gpr_subprocess_interrupt(gpr_subprocess *p);
} // extern "C" } // extern "C"
#endif #endif
#endif #endif /* GRPC_SUPPORT_SUBPROCESS_H */

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -74,4 +74,4 @@
#include <grpc/support/tls_pthread.h> #include <grpc/support/tls_pthread.h>
#endif #endif
#endif #endif /* GRPC_SUPPORT_TLS_H */

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -34,9 +34,51 @@
#ifndef GRPC_SUPPORT_TLS_GCC_H #ifndef GRPC_SUPPORT_TLS_GCC_H
#define GRPC_SUPPORT_TLS_GCC_H #define GRPC_SUPPORT_TLS_GCC_H
#include <stdbool.h>
#include <grpc/support/log.h>
/* Thread local storage based on gcc compiler primitives. /* Thread local storage based on gcc compiler primitives.
#include tls.h to use this - and see that file for documentation */ #include tls.h to use this - and see that file for documentation */
#ifndef NDEBUG
struct gpr_gcc_thread_local {
intptr_t value;
bool *inited;
};
#define GPR_TLS_DECL(name) \
static bool name##_inited = false; \
static __thread struct gpr_gcc_thread_local name = {0, &(name##_inited)}
#define gpr_tls_init(tls) \
do { \
GPR_ASSERT(*((tls)->inited) == false); \
*((tls)->inited) = true; \
} while (0)
/* It is allowed to call gpr_tls_init after gpr_tls_destroy is called. */
#define gpr_tls_destroy(tls) \
do { \
GPR_ASSERT(*((tls)->inited)); \
*((tls)->inited) = false; \
} while (0)
#define gpr_tls_set(tls, new_value) \
do { \
GPR_ASSERT(*((tls)->inited)); \
(tls)->value = (new_value); \
} while (0)
#define gpr_tls_get(tls) \
({ \
GPR_ASSERT(*((tls)->inited)); \
(tls)->value; \
})
#else /* NDEBUG */
struct gpr_gcc_thread_local { struct gpr_gcc_thread_local {
intptr_t value; intptr_t value;
}; };
@ -53,4 +95,6 @@ struct gpr_gcc_thread_local {
#define gpr_tls_set(tls, new_value) (((tls)->value) = (new_value)) #define gpr_tls_set(tls, new_value) (((tls)->value) = (new_value))
#define gpr_tls_get(tls) ((tls)->value) #define gpr_tls_get(tls) ((tls)->value)
#endif #endif /* NDEBUG */
#endif /* GRPC_SUPPORT_TLS_GCC_H */

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -31,8 +31,8 @@
* *
*/ */
#ifndef GRPC_SUPPORT_TLS_GCC_H #ifndef GRPC_SUPPORT_TLS_MSVC_H
#define GRPC_SUPPORT_TLS_GCC_H #define GRPC_SUPPORT_TLS_MSVC_H
/* Thread local storage based on ms visual c compiler primitives. /* Thread local storage based on ms visual c compiler primitives.
#include tls.h to use this - and see that file for documentation */ #include tls.h to use this - and see that file for documentation */
@ -53,4 +53,4 @@ struct gpr_msvc_thread_local {
#define gpr_tls_set(tls, new_value) (((tls)->value) = (new_value)) #define gpr_tls_set(tls, new_value) (((tls)->value) = (new_value))
#define gpr_tls_get(tls) ((tls)->value) #define gpr_tls_get(tls) ((tls)->value)
#endif #endif /* GRPC_SUPPORT_TLS_MSVC_H */

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -57,4 +57,4 @@ intptr_t gpr_tls_set(struct gpr_pthread_thread_local *tls, intptr_t value);
} }
#endif #endif
#endif #endif /* GRPC_SUPPORT_TLS_PTHREAD_H */

@ -87,311 +87,320 @@
"src/node/src/metadata.js", "src/node/src/metadata.js",
"src/node/src/server.js", "src/node/src/server.js",
"include/grpc/grpc_security.h", "include/grpc/grpc_security.h",
"include/grpc/byte_buffer.h",
"include/grpc/byte_buffer_reader.h",
"include/grpc/compression.h",
"include/grpc/grpc.h",
"include/grpc/status.h",
"include/grpc/impl/codegen/byte_buffer.h", "include/grpc/impl/codegen/byte_buffer.h",
"include/grpc/impl/codegen/compression_types.h", "include/grpc/impl/codegen/compression_types.h",
"include/grpc/impl/codegen/connectivity_state.h", "include/grpc/impl/codegen/connectivity_state.h",
"include/grpc/impl/codegen/grpc_types.h", "include/grpc/impl/codegen/grpc_types.h",
"include/grpc/impl/codegen/propagation_bits.h", "include/grpc/impl/codegen/propagation_bits.h",
"include/grpc/impl/codegen/status.h", "include/grpc/impl/codegen/status.h",
"include/grpc/byte_buffer.h",
"include/grpc/byte_buffer_reader.h",
"include/grpc/compression.h",
"include/grpc/grpc.h",
"include/grpc/status.h",
"include/grpc/census.h", "include/grpc/census.h",
"src/core/census/grpc_filter.h", "src/core/lib/census/grpc_filter.h",
"src/core/channel/channel_args.h", "src/core/lib/census/grpc_plugin.h",
"src/core/channel/channel_stack.h", "src/core/lib/channel/channel_args.h",
"src/core/channel/client_channel.h", "src/core/lib/channel/channel_stack.h",
"src/core/channel/client_uchannel.h", "src/core/lib/channel/channel_stack_builder.h",
"src/core/channel/compress_filter.h", "src/core/lib/channel/client_channel.h",
"src/core/channel/connected_channel.h", "src/core/lib/channel/compress_filter.h",
"src/core/channel/context.h", "src/core/lib/channel/connected_channel.h",
"src/core/channel/http_client_filter.h", "src/core/lib/channel/context.h",
"src/core/channel/http_server_filter.h", "src/core/lib/channel/http_client_filter.h",
"src/core/channel/subchannel_call_holder.h", "src/core/lib/channel/http_server_filter.h",
"src/core/client_config/client_config.h", "src/core/lib/channel/subchannel_call_holder.h",
"src/core/client_config/connector.h", "src/core/lib/client_config/client_config.h",
"src/core/client_config/initial_connect_string.h", "src/core/lib/client_config/connector.h",
"src/core/client_config/lb_policies/load_balancer_api.h", "src/core/lib/client_config/initial_connect_string.h",
"src/core/client_config/lb_policies/pick_first.h", "src/core/lib/client_config/lb_policies/load_balancer_api.h",
"src/core/client_config/lb_policies/round_robin.h", "src/core/lib/client_config/lb_policies/pick_first.h",
"src/core/client_config/lb_policy.h", "src/core/lib/client_config/lb_policies/round_robin.h",
"src/core/client_config/lb_policy_factory.h", "src/core/lib/client_config/lb_policy.h",
"src/core/client_config/lb_policy_registry.h", "src/core/lib/client_config/lb_policy_factory.h",
"src/core/client_config/resolver.h", "src/core/lib/client_config/lb_policy_registry.h",
"src/core/client_config/resolver_factory.h", "src/core/lib/client_config/resolver.h",
"src/core/client_config/resolver_registry.h", "src/core/lib/client_config/resolver_factory.h",
"src/core/client_config/resolvers/dns_resolver.h", "src/core/lib/client_config/resolver_registry.h",
"src/core/client_config/resolvers/sockaddr_resolver.h", "src/core/lib/client_config/resolvers/dns_resolver.h",
"src/core/client_config/subchannel.h", "src/core/lib/client_config/resolvers/sockaddr_resolver.h",
"src/core/client_config/subchannel_factory.h", "src/core/lib/client_config/subchannel.h",
"src/core/client_config/subchannel_index.h", "src/core/lib/client_config/subchannel_factory.h",
"src/core/client_config/uri_parser.h", "src/core/lib/client_config/subchannel_index.h",
"src/core/compression/algorithm_metadata.h", "src/core/lib/client_config/uri_parser.h",
"src/core/compression/message_compress.h", "src/core/lib/compression/algorithm_metadata.h",
"src/core/debug/trace.h", "src/core/lib/compression/message_compress.h",
"src/core/httpcli/format_request.h", "src/core/lib/debug/trace.h",
"src/core/httpcli/httpcli.h", "src/core/lib/http/format_request.h",
"src/core/httpcli/parser.h", "src/core/lib/http/httpcli.h",
"src/core/iomgr/closure.h", "src/core/lib/http/parser.h",
"src/core/iomgr/endpoint.h", "src/core/lib/iomgr/closure.h",
"src/core/iomgr/endpoint_pair.h", "src/core/lib/iomgr/endpoint.h",
"src/core/iomgr/exec_ctx.h", "src/core/lib/iomgr/endpoint_pair.h",
"src/core/iomgr/executor.h", "src/core/lib/iomgr/exec_ctx.h",
"src/core/iomgr/fd_posix.h", "src/core/lib/iomgr/executor.h",
"src/core/iomgr/iocp_windows.h", "src/core/lib/iomgr/fd_posix.h",
"src/core/iomgr/iomgr.h", "src/core/lib/iomgr/iocp_windows.h",
"src/core/iomgr/iomgr_internal.h", "src/core/lib/iomgr/iomgr.h",
"src/core/iomgr/iomgr_posix.h", "src/core/lib/iomgr/iomgr_internal.h",
"src/core/iomgr/pollset.h", "src/core/lib/iomgr/iomgr_posix.h",
"src/core/iomgr/pollset_posix.h", "src/core/lib/iomgr/pollset.h",
"src/core/iomgr/pollset_set.h", "src/core/lib/iomgr/pollset_posix.h",
"src/core/iomgr/pollset_set_posix.h", "src/core/lib/iomgr/pollset_set.h",
"src/core/iomgr/pollset_set_windows.h", "src/core/lib/iomgr/pollset_set_posix.h",
"src/core/iomgr/pollset_windows.h", "src/core/lib/iomgr/pollset_set_windows.h",
"src/core/iomgr/resolve_address.h", "src/core/lib/iomgr/pollset_windows.h",
"src/core/iomgr/sockaddr.h", "src/core/lib/iomgr/resolve_address.h",
"src/core/iomgr/sockaddr_posix.h", "src/core/lib/iomgr/sockaddr.h",
"src/core/iomgr/sockaddr_utils.h", "src/core/lib/iomgr/sockaddr_posix.h",
"src/core/iomgr/sockaddr_win32.h", "src/core/lib/iomgr/sockaddr_utils.h",
"src/core/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/sockaddr_win32.h",
"src/core/iomgr/socket_windows.h", "src/core/lib/iomgr/socket_utils_posix.h",
"src/core/iomgr/tcp_client.h", "src/core/lib/iomgr/socket_windows.h",
"src/core/iomgr/tcp_posix.h", "src/core/lib/iomgr/tcp_client.h",
"src/core/iomgr/tcp_server.h", "src/core/lib/iomgr/tcp_posix.h",
"src/core/iomgr/tcp_windows.h", "src/core/lib/iomgr/tcp_server.h",
"src/core/iomgr/time_averaged_stats.h", "src/core/lib/iomgr/tcp_windows.h",
"src/core/iomgr/timer.h", "src/core/lib/iomgr/time_averaged_stats.h",
"src/core/iomgr/timer_heap.h", "src/core/lib/iomgr/timer.h",
"src/core/iomgr/udp_server.h", "src/core/lib/iomgr/timer_heap.h",
"src/core/iomgr/wakeup_fd_pipe.h", "src/core/lib/iomgr/udp_server.h",
"src/core/iomgr/wakeup_fd_posix.h", "src/core/lib/iomgr/unix_sockets_posix.h",
"src/core/iomgr/workqueue.h", "src/core/lib/iomgr/wakeup_fd_pipe.h",
"src/core/iomgr/workqueue_posix.h", "src/core/lib/iomgr/wakeup_fd_posix.h",
"src/core/iomgr/workqueue_windows.h", "src/core/lib/iomgr/workqueue.h",
"src/core/json/json.h", "src/core/lib/iomgr/workqueue_posix.h",
"src/core/json/json_common.h", "src/core/lib/iomgr/workqueue_windows.h",
"src/core/json/json_reader.h", "src/core/lib/json/json.h",
"src/core/json/json_writer.h", "src/core/lib/json/json_common.h",
"src/core/proto/grpc/lb/v0/load_balancer.pb.h", "src/core/lib/json/json_reader.h",
"src/core/statistics/census_interface.h", "src/core/lib/json/json_writer.h",
"src/core/statistics/census_rpc_stats.h", "src/core/lib/proto/grpc/lb/v0/load_balancer.pb.h",
"src/core/surface/api_trace.h", "src/core/lib/statistics/census_interface.h",
"src/core/surface/call.h", "src/core/lib/statistics/census_rpc_stats.h",
"src/core/surface/call_test_only.h", "src/core/lib/surface/api_trace.h",
"src/core/surface/channel.h", "src/core/lib/surface/call.h",
"src/core/surface/completion_queue.h", "src/core/lib/surface/call_test_only.h",
"src/core/surface/event_string.h", "src/core/lib/surface/channel.h",
"src/core/surface/init.h", "src/core/lib/surface/channel_init.h",
"src/core/surface/server.h", "src/core/lib/surface/channel_stack_type.h",
"src/core/surface/surface_trace.h", "src/core/lib/surface/completion_queue.h",
"src/core/transport/byte_stream.h", "src/core/lib/surface/event_string.h",
"src/core/transport/chttp2/alpn.h", "src/core/lib/surface/init.h",
"src/core/transport/chttp2/bin_encoder.h", "src/core/lib/surface/lame_client.h",
"src/core/transport/chttp2/frame.h", "src/core/lib/surface/server.h",
"src/core/transport/chttp2/frame_data.h", "src/core/lib/surface/surface_trace.h",
"src/core/transport/chttp2/frame_goaway.h", "src/core/lib/transport/byte_stream.h",
"src/core/transport/chttp2/frame_ping.h", "src/core/lib/transport/chttp2/alpn.h",
"src/core/transport/chttp2/frame_rst_stream.h", "src/core/lib/transport/chttp2/bin_encoder.h",
"src/core/transport/chttp2/frame_settings.h", "src/core/lib/transport/chttp2/frame.h",
"src/core/transport/chttp2/frame_window_update.h", "src/core/lib/transport/chttp2/frame_data.h",
"src/core/transport/chttp2/hpack_encoder.h", "src/core/lib/transport/chttp2/frame_goaway.h",
"src/core/transport/chttp2/hpack_parser.h", "src/core/lib/transport/chttp2/frame_ping.h",
"src/core/transport/chttp2/hpack_table.h", "src/core/lib/transport/chttp2/frame_rst_stream.h",
"src/core/transport/chttp2/http2_errors.h", "src/core/lib/transport/chttp2/frame_settings.h",
"src/core/transport/chttp2/huffsyms.h", "src/core/lib/transport/chttp2/frame_window_update.h",
"src/core/transport/chttp2/incoming_metadata.h", "src/core/lib/transport/chttp2/hpack_encoder.h",
"src/core/transport/chttp2/internal.h", "src/core/lib/transport/chttp2/hpack_parser.h",
"src/core/transport/chttp2/status_conversion.h", "src/core/lib/transport/chttp2/hpack_table.h",
"src/core/transport/chttp2/stream_map.h", "src/core/lib/transport/chttp2/http2_errors.h",
"src/core/transport/chttp2/timeout_encoding.h", "src/core/lib/transport/chttp2/huffsyms.h",
"src/core/transport/chttp2/varint.h", "src/core/lib/transport/chttp2/incoming_metadata.h",
"src/core/transport/chttp2_transport.h", "src/core/lib/transport/chttp2/internal.h",
"src/core/transport/connectivity_state.h", "src/core/lib/transport/chttp2/status_conversion.h",
"src/core/transport/metadata.h", "src/core/lib/transport/chttp2/stream_map.h",
"src/core/transport/metadata_batch.h", "src/core/lib/transport/chttp2/timeout_encoding.h",
"src/core/transport/static_metadata.h", "src/core/lib/transport/chttp2/varint.h",
"src/core/transport/transport.h", "src/core/lib/transport/chttp2_transport.h",
"src/core/transport/transport_impl.h", "src/core/lib/transport/connectivity_state.h",
"src/core/security/auth_filters.h", "src/core/lib/transport/metadata.h",
"src/core/security/b64.h", "src/core/lib/transport/metadata_batch.h",
"src/core/security/credentials.h", "src/core/lib/transport/static_metadata.h",
"src/core/security/handshake.h", "src/core/lib/transport/transport.h",
"src/core/security/json_token.h", "src/core/lib/transport/transport_impl.h",
"src/core/security/jwt_verifier.h", "src/core/lib/security/auth_filters.h",
"src/core/security/secure_endpoint.h", "src/core/lib/security/b64.h",
"src/core/security/security_connector.h", "src/core/lib/security/credentials.h",
"src/core/security/security_context.h", "src/core/lib/security/handshake.h",
"src/core/tsi/fake_transport_security.h", "src/core/lib/security/json_token.h",
"src/core/tsi/ssl_transport_security.h", "src/core/lib/security/jwt_verifier.h",
"src/core/tsi/ssl_types.h", "src/core/lib/security/secure_endpoint.h",
"src/core/tsi/transport_security.h", "src/core/lib/security/security_connector.h",
"src/core/tsi/transport_security_interface.h", "src/core/lib/security/security_context.h",
"src/core/census/aggregation.h", "src/core/lib/tsi/fake_transport_security.h",
"src/core/census/mlog.h", "src/core/lib/tsi/ssl_transport_security.h",
"src/core/census/rpc_metric_id.h", "src/core/lib/tsi/ssl_types.h",
"src/core/lib/tsi/transport_security.h",
"src/core/lib/tsi/transport_security_interface.h",
"src/core/lib/census/aggregation.h",
"src/core/lib/census/mlog.h",
"src/core/lib/census/rpc_metric_id.h",
"third_party/nanopb/pb.h", "third_party/nanopb/pb.h",
"third_party/nanopb/pb_common.h", "third_party/nanopb/pb_common.h",
"third_party/nanopb/pb_decode.h", "third_party/nanopb/pb_decode.h",
"third_party/nanopb/pb_encode.h", "third_party/nanopb/pb_encode.h",
"src/core/census/grpc_context.c", "src/core/lib/census/grpc_context.c",
"src/core/census/grpc_filter.c", "src/core/lib/census/grpc_filter.c",
"src/core/channel/channel_args.c", "src/core/lib/census/grpc_plugin.c",
"src/core/channel/channel_stack.c", "src/core/lib/channel/channel_args.c",
"src/core/channel/client_channel.c", "src/core/lib/channel/channel_stack.c",
"src/core/channel/client_uchannel.c", "src/core/lib/channel/channel_stack_builder.c",
"src/core/channel/compress_filter.c", "src/core/lib/channel/client_channel.c",
"src/core/channel/connected_channel.c", "src/core/lib/channel/compress_filter.c",
"src/core/channel/http_client_filter.c", "src/core/lib/channel/connected_channel.c",
"src/core/channel/http_server_filter.c", "src/core/lib/channel/http_client_filter.c",
"src/core/channel/subchannel_call_holder.c", "src/core/lib/channel/http_server_filter.c",
"src/core/client_config/client_config.c", "src/core/lib/channel/subchannel_call_holder.c",
"src/core/client_config/connector.c", "src/core/lib/client_config/client_config.c",
"src/core/client_config/default_initial_connect_string.c", "src/core/lib/client_config/connector.c",
"src/core/client_config/initial_connect_string.c", "src/core/lib/client_config/default_initial_connect_string.c",
"src/core/client_config/lb_policies/load_balancer_api.c", "src/core/lib/client_config/initial_connect_string.c",
"src/core/client_config/lb_policies/pick_first.c", "src/core/lib/client_config/lb_policies/load_balancer_api.c",
"src/core/client_config/lb_policies/round_robin.c", "src/core/lib/client_config/lb_policies/pick_first.c",
"src/core/client_config/lb_policy.c", "src/core/lib/client_config/lb_policies/round_robin.c",
"src/core/client_config/lb_policy_factory.c", "src/core/lib/client_config/lb_policy.c",
"src/core/client_config/lb_policy_registry.c", "src/core/lib/client_config/lb_policy_factory.c",
"src/core/client_config/resolver.c", "src/core/lib/client_config/lb_policy_registry.c",
"src/core/client_config/resolver_factory.c", "src/core/lib/client_config/resolver.c",
"src/core/client_config/resolver_registry.c", "src/core/lib/client_config/resolver_factory.c",
"src/core/client_config/resolvers/dns_resolver.c", "src/core/lib/client_config/resolver_registry.c",
"src/core/client_config/resolvers/sockaddr_resolver.c", "src/core/lib/client_config/resolvers/dns_resolver.c",
"src/core/client_config/subchannel.c", "src/core/lib/client_config/resolvers/sockaddr_resolver.c",
"src/core/client_config/subchannel_factory.c", "src/core/lib/client_config/subchannel.c",
"src/core/client_config/subchannel_index.c", "src/core/lib/client_config/subchannel_factory.c",
"src/core/client_config/uri_parser.c", "src/core/lib/client_config/subchannel_index.c",
"src/core/compression/compression_algorithm.c", "src/core/lib/client_config/uri_parser.c",
"src/core/compression/message_compress.c", "src/core/lib/compression/compression_algorithm.c",
"src/core/debug/trace.c", "src/core/lib/compression/message_compress.c",
"src/core/httpcli/format_request.c", "src/core/lib/debug/trace.c",
"src/core/httpcli/httpcli.c", "src/core/lib/http/format_request.c",
"src/core/httpcli/parser.c", "src/core/lib/http/httpcli.c",
"src/core/iomgr/closure.c", "src/core/lib/http/parser.c",
"src/core/iomgr/endpoint.c", "src/core/lib/iomgr/closure.c",
"src/core/iomgr/endpoint_pair_posix.c", "src/core/lib/iomgr/endpoint.c",
"src/core/iomgr/endpoint_pair_windows.c", "src/core/lib/iomgr/endpoint_pair_posix.c",
"src/core/iomgr/exec_ctx.c", "src/core/lib/iomgr/endpoint_pair_windows.c",
"src/core/iomgr/executor.c", "src/core/lib/iomgr/exec_ctx.c",
"src/core/iomgr/fd_posix.c", "src/core/lib/iomgr/executor.c",
"src/core/iomgr/iocp_windows.c", "src/core/lib/iomgr/fd_posix.c",
"src/core/iomgr/iomgr.c", "src/core/lib/iomgr/iocp_windows.c",
"src/core/iomgr/iomgr_posix.c", "src/core/lib/iomgr/iomgr.c",
"src/core/iomgr/iomgr_windows.c", "src/core/lib/iomgr/iomgr_posix.c",
"src/core/iomgr/pollset_multipoller_with_epoll.c", "src/core/lib/iomgr/iomgr_windows.c",
"src/core/iomgr/pollset_multipoller_with_poll_posix.c", "src/core/lib/iomgr/pollset_multipoller_with_epoll.c",
"src/core/iomgr/pollset_posix.c", "src/core/lib/iomgr/pollset_multipoller_with_poll_posix.c",
"src/core/iomgr/pollset_set_posix.c", "src/core/lib/iomgr/pollset_posix.c",
"src/core/iomgr/pollset_set_windows.c", "src/core/lib/iomgr/pollset_set_posix.c",
"src/core/iomgr/pollset_windows.c", "src/core/lib/iomgr/pollset_set_windows.c",
"src/core/iomgr/resolve_address_posix.c", "src/core/lib/iomgr/pollset_windows.c",
"src/core/iomgr/resolve_address_windows.c", "src/core/lib/iomgr/resolve_address_posix.c",
"src/core/iomgr/sockaddr_utils.c", "src/core/lib/iomgr/resolve_address_windows.c",
"src/core/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/sockaddr_utils.c",
"src/core/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_common_posix.c",
"src/core/iomgr/socket_utils_posix.c", "src/core/lib/iomgr/socket_utils_linux.c",
"src/core/iomgr/socket_windows.c", "src/core/lib/iomgr/socket_utils_posix.c",
"src/core/iomgr/tcp_client_posix.c", "src/core/lib/iomgr/socket_windows.c",
"src/core/iomgr/tcp_client_windows.c", "src/core/lib/iomgr/tcp_client_posix.c",
"src/core/iomgr/tcp_posix.c", "src/core/lib/iomgr/tcp_client_windows.c",
"src/core/iomgr/tcp_server_posix.c", "src/core/lib/iomgr/tcp_posix.c",
"src/core/iomgr/tcp_server_windows.c", "src/core/lib/iomgr/tcp_server_posix.c",
"src/core/iomgr/tcp_windows.c", "src/core/lib/iomgr/tcp_server_windows.c",
"src/core/iomgr/time_averaged_stats.c", "src/core/lib/iomgr/tcp_windows.c",
"src/core/iomgr/timer.c", "src/core/lib/iomgr/time_averaged_stats.c",
"src/core/iomgr/timer_heap.c", "src/core/lib/iomgr/timer.c",
"src/core/iomgr/udp_server.c", "src/core/lib/iomgr/timer_heap.c",
"src/core/iomgr/wakeup_fd_eventfd.c", "src/core/lib/iomgr/udp_server.c",
"src/core/iomgr/wakeup_fd_nospecial.c", "src/core/lib/iomgr/unix_sockets_posix.c",
"src/core/iomgr/wakeup_fd_pipe.c", "src/core/lib/iomgr/unix_sockets_posix_noop.c",
"src/core/iomgr/wakeup_fd_posix.c", "src/core/lib/iomgr/wakeup_fd_eventfd.c",
"src/core/iomgr/workqueue_posix.c", "src/core/lib/iomgr/wakeup_fd_nospecial.c",
"src/core/iomgr/workqueue_windows.c", "src/core/lib/iomgr/wakeup_fd_pipe.c",
"src/core/json/json.c", "src/core/lib/iomgr/wakeup_fd_posix.c",
"src/core/json/json_reader.c", "src/core/lib/iomgr/workqueue_posix.c",
"src/core/json/json_string.c", "src/core/lib/iomgr/workqueue_windows.c",
"src/core/json/json_writer.c", "src/core/lib/json/json.c",
"src/core/proto/grpc/lb/v0/load_balancer.pb.c", "src/core/lib/json/json_reader.c",
"src/core/surface/alarm.c", "src/core/lib/json/json_string.c",
"src/core/surface/api_trace.c", "src/core/lib/json/json_writer.c",
"src/core/surface/byte_buffer.c", "src/core/lib/proto/grpc/lb/v0/load_balancer.pb.c",
"src/core/surface/byte_buffer_reader.c", "src/core/lib/surface/alarm.c",
"src/core/surface/call.c", "src/core/lib/surface/api_trace.c",
"src/core/surface/call_details.c", "src/core/lib/surface/byte_buffer.c",
"src/core/surface/call_log_batch.c", "src/core/lib/surface/byte_buffer_reader.c",
"src/core/surface/channel.c", "src/core/lib/surface/call.c",
"src/core/surface/channel_connectivity.c", "src/core/lib/surface/call_details.c",
"src/core/surface/channel_create.c", "src/core/lib/surface/call_log_batch.c",
"src/core/surface/channel_ping.c", "src/core/lib/surface/channel.c",
"src/core/surface/completion_queue.c", "src/core/lib/surface/channel_connectivity.c",
"src/core/surface/event_string.c", "src/core/lib/surface/channel_create.c",
"src/core/surface/init.c", "src/core/lib/surface/channel_init.c",
"src/core/surface/lame_client.c", "src/core/lib/surface/channel_ping.c",
"src/core/surface/metadata_array.c", "src/core/lib/surface/channel_stack_type.c",
"src/core/surface/server.c", "src/core/lib/surface/completion_queue.c",
"src/core/surface/server_chttp2.c", "src/core/lib/surface/event_string.c",
"src/core/surface/server_create.c", "src/core/lib/surface/init.c",
"src/core/surface/validate_metadata.c", "src/core/lib/surface/lame_client.c",
"src/core/surface/version.c", "src/core/lib/surface/metadata_array.c",
"src/core/transport/byte_stream.c", "src/core/lib/surface/server.c",
"src/core/transport/chttp2/alpn.c", "src/core/lib/surface/server_chttp2.c",
"src/core/transport/chttp2/bin_encoder.c", "src/core/lib/surface/validate_metadata.c",
"src/core/transport/chttp2/frame_data.c", "src/core/lib/surface/version.c",
"src/core/transport/chttp2/frame_goaway.c", "src/core/lib/transport/byte_stream.c",
"src/core/transport/chttp2/frame_ping.c", "src/core/lib/transport/chttp2/alpn.c",
"src/core/transport/chttp2/frame_rst_stream.c", "src/core/lib/transport/chttp2/bin_encoder.c",
"src/core/transport/chttp2/frame_settings.c", "src/core/lib/transport/chttp2/frame_data.c",
"src/core/transport/chttp2/frame_window_update.c", "src/core/lib/transport/chttp2/frame_goaway.c",
"src/core/transport/chttp2/hpack_encoder.c", "src/core/lib/transport/chttp2/frame_ping.c",
"src/core/transport/chttp2/hpack_parser.c", "src/core/lib/transport/chttp2/frame_rst_stream.c",
"src/core/transport/chttp2/hpack_table.c", "src/core/lib/transport/chttp2/frame_settings.c",
"src/core/transport/chttp2/huffsyms.c", "src/core/lib/transport/chttp2/frame_window_update.c",
"src/core/transport/chttp2/incoming_metadata.c", "src/core/lib/transport/chttp2/hpack_encoder.c",
"src/core/transport/chttp2/parsing.c", "src/core/lib/transport/chttp2/hpack_parser.c",
"src/core/transport/chttp2/status_conversion.c", "src/core/lib/transport/chttp2/hpack_table.c",
"src/core/transport/chttp2/stream_lists.c", "src/core/lib/transport/chttp2/huffsyms.c",
"src/core/transport/chttp2/stream_map.c", "src/core/lib/transport/chttp2/incoming_metadata.c",
"src/core/transport/chttp2/timeout_encoding.c", "src/core/lib/transport/chttp2/parsing.c",
"src/core/transport/chttp2/varint.c", "src/core/lib/transport/chttp2/status_conversion.c",
"src/core/transport/chttp2/writing.c", "src/core/lib/transport/chttp2/stream_lists.c",
"src/core/transport/chttp2_transport.c", "src/core/lib/transport/chttp2/stream_map.c",
"src/core/transport/connectivity_state.c", "src/core/lib/transport/chttp2/timeout_encoding.c",
"src/core/transport/metadata.c", "src/core/lib/transport/chttp2/varint.c",
"src/core/transport/metadata_batch.c", "src/core/lib/transport/chttp2/writing.c",
"src/core/transport/static_metadata.c", "src/core/lib/transport/chttp2_transport.c",
"src/core/transport/transport.c", "src/core/lib/transport/connectivity_state.c",
"src/core/transport/transport_op_string.c", "src/core/lib/transport/metadata.c",
"src/core/httpcli/httpcli_security_connector.c", "src/core/lib/transport/metadata_batch.c",
"src/core/security/b64.c", "src/core/lib/transport/static_metadata.c",
"src/core/security/client_auth_filter.c", "src/core/lib/transport/transport.c",
"src/core/security/credentials.c", "src/core/lib/transport/transport_op_string.c",
"src/core/security/credentials_metadata.c", "src/core/lib/http/httpcli_security_connector.c",
"src/core/security/credentials_posix.c", "src/core/lib/security/b64.c",
"src/core/security/credentials_win32.c", "src/core/lib/security/client_auth_filter.c",
"src/core/security/google_default_credentials.c", "src/core/lib/security/credentials.c",
"src/core/security/handshake.c", "src/core/lib/security/credentials_metadata.c",
"src/core/security/json_token.c", "src/core/lib/security/credentials_posix.c",
"src/core/security/jwt_verifier.c", "src/core/lib/security/credentials_win32.c",
"src/core/security/secure_endpoint.c", "src/core/lib/security/google_default_credentials.c",
"src/core/security/security_connector.c", "src/core/lib/security/handshake.c",
"src/core/security/security_context.c", "src/core/lib/security/json_token.c",
"src/core/security/server_auth_filter.c", "src/core/lib/security/jwt_verifier.c",
"src/core/security/server_secure_chttp2.c", "src/core/lib/security/secure_endpoint.c",
"src/core/surface/init_secure.c", "src/core/lib/security/security_connector.c",
"src/core/surface/secure_channel_create.c", "src/core/lib/security/security_context.c",
"src/core/tsi/fake_transport_security.c", "src/core/lib/security/server_auth_filter.c",
"src/core/tsi/ssl_transport_security.c", "src/core/lib/security/server_secure_chttp2.c",
"src/core/tsi/transport_security.c", "src/core/lib/surface/init_secure.c",
"src/core/census/context.c", "src/core/lib/surface/secure_channel_create.c",
"src/core/census/initialize.c", "src/core/lib/tsi/fake_transport_security.c",
"src/core/census/mlog.c", "src/core/lib/tsi/ssl_transport_security.c",
"src/core/census/operation.c", "src/core/lib/tsi/transport_security.c",
"src/core/census/placeholders.c", "src/core/lib/census/context.c",
"src/core/census/tracing.c", "src/core/lib/census/initialize.c",
"src/core/lib/census/mlog.c",
"src/core/lib/census/operation.c",
"src/core/lib/census/placeholders.c",
"src/core/lib/census/tracing.c",
"third_party/nanopb/pb_common.c", "third_party/nanopb/pb_common.c",
"third_party/nanopb/pb_decode.c", "third_party/nanopb/pb_decode.c",
"third_party/nanopb/pb_encode.c", "third_party/nanopb/pb_encode.c",
@ -864,60 +873,62 @@
"include/grpc/impl/codegen/sync_posix.h", "include/grpc/impl/codegen/sync_posix.h",
"include/grpc/impl/codegen/sync_win32.h", "include/grpc/impl/codegen/sync_win32.h",
"include/grpc/impl/codegen/time.h", "include/grpc/impl/codegen/time.h",
"src/core/profiling/timers.h", "src/core/lib/profiling/timers.h",
"src/core/support/block_annotate.h", "src/core/lib/support/backoff.h",
"src/core/support/env.h", "src/core/lib/support/block_annotate.h",
"src/core/support/load_file.h", "src/core/lib/support/env.h",
"src/core/support/murmur_hash.h", "src/core/lib/support/load_file.h",
"src/core/support/stack_lockfree.h", "src/core/lib/support/murmur_hash.h",
"src/core/support/string.h", "src/core/lib/support/stack_lockfree.h",
"src/core/support/string_win32.h", "src/core/lib/support/string.h",
"src/core/support/thd_internal.h", "src/core/lib/support/string_win32.h",
"src/core/support/time_precise.h", "src/core/lib/support/thd_internal.h",
"src/core/support/tmpfile.h", "src/core/lib/support/time_precise.h",
"src/core/profiling/basic_timers.c", "src/core/lib/support/tmpfile.h",
"src/core/profiling/stap_timers.c", "src/core/lib/profiling/basic_timers.c",
"src/core/support/alloc.c", "src/core/lib/profiling/stap_timers.c",
"src/core/support/avl.c", "src/core/lib/support/alloc.c",
"src/core/support/cmdline.c", "src/core/lib/support/avl.c",
"src/core/support/cpu_iphone.c", "src/core/lib/support/backoff.c",
"src/core/support/cpu_linux.c", "src/core/lib/support/cmdline.c",
"src/core/support/cpu_posix.c", "src/core/lib/support/cpu_iphone.c",
"src/core/support/cpu_windows.c", "src/core/lib/support/cpu_linux.c",
"src/core/support/env_linux.c", "src/core/lib/support/cpu_posix.c",
"src/core/support/env_posix.c", "src/core/lib/support/cpu_windows.c",
"src/core/support/env_win32.c", "src/core/lib/support/env_linux.c",
"src/core/support/histogram.c", "src/core/lib/support/env_posix.c",
"src/core/support/host_port.c", "src/core/lib/support/env_win32.c",
"src/core/support/load_file.c", "src/core/lib/support/histogram.c",
"src/core/support/log.c", "src/core/lib/support/host_port.c",
"src/core/support/log_android.c", "src/core/lib/support/load_file.c",
"src/core/support/log_linux.c", "src/core/lib/support/log.c",
"src/core/support/log_posix.c", "src/core/lib/support/log_android.c",
"src/core/support/log_win32.c", "src/core/lib/support/log_linux.c",
"src/core/support/murmur_hash.c", "src/core/lib/support/log_posix.c",
"src/core/support/slice.c", "src/core/lib/support/log_win32.c",
"src/core/support/slice_buffer.c", "src/core/lib/support/murmur_hash.c",
"src/core/support/stack_lockfree.c", "src/core/lib/support/slice.c",
"src/core/support/string.c", "src/core/lib/support/slice_buffer.c",
"src/core/support/string_posix.c", "src/core/lib/support/stack_lockfree.c",
"src/core/support/string_win32.c", "src/core/lib/support/string.c",
"src/core/support/subprocess_posix.c", "src/core/lib/support/string_posix.c",
"src/core/support/subprocess_windows.c", "src/core/lib/support/string_win32.c",
"src/core/support/sync.c", "src/core/lib/support/subprocess_posix.c",
"src/core/support/sync_posix.c", "src/core/lib/support/subprocess_windows.c",
"src/core/support/sync_win32.c", "src/core/lib/support/sync.c",
"src/core/support/thd.c", "src/core/lib/support/sync_posix.c",
"src/core/support/thd_posix.c", "src/core/lib/support/sync_win32.c",
"src/core/support/thd_win32.c", "src/core/lib/support/thd.c",
"src/core/support/time.c", "src/core/lib/support/thd_posix.c",
"src/core/support/time_posix.c", "src/core/lib/support/thd_win32.c",
"src/core/support/time_precise.c", "src/core/lib/support/time.c",
"src/core/support/time_win32.c", "src/core/lib/support/time_posix.c",
"src/core/support/tls_pthread.c", "src/core/lib/support/time_precise.c",
"src/core/support/tmpfile_posix.c", "src/core/lib/support/time_win32.c",
"src/core/support/tmpfile_win32.c", "src/core/lib/support/tls_pthread.c",
"src/core/support/wrap_memcpy.c", "src/core/lib/support/tmpfile_posix.c",
"src/core/lib/support/tmpfile_win32.c",
"src/core/lib/support/wrap_memcpy.c",
"binding.gyp" "binding.gyp"
], ],
"main": "src/node/index.js", "main": "src/node/index.js",

@ -92,366 +92,377 @@
<file baseinstalldir="/" name="include/grpc/impl/codegen/sync_posix.h" role="src" /> <file baseinstalldir="/" name="include/grpc/impl/codegen/sync_posix.h" role="src" />
<file baseinstalldir="/" name="include/grpc/impl/codegen/sync_win32.h" role="src" /> <file baseinstalldir="/" name="include/grpc/impl/codegen/sync_win32.h" role="src" />
<file baseinstalldir="/" name="include/grpc/impl/codegen/time.h" role="src" /> <file baseinstalldir="/" name="include/grpc/impl/codegen/time.h" role="src" />
<file baseinstalldir="/" name="src/core/profiling/timers.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/profiling/timers.h" role="src" />
<file baseinstalldir="/" name="src/core/support/block_annotate.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/backoff.h" role="src" />
<file baseinstalldir="/" name="src/core/support/env.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/block_annotate.h" role="src" />
<file baseinstalldir="/" name="src/core/support/load_file.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/env.h" role="src" />
<file baseinstalldir="/" name="src/core/support/murmur_hash.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/load_file.h" role="src" />
<file baseinstalldir="/" name="src/core/support/stack_lockfree.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/murmur_hash.h" role="src" />
<file baseinstalldir="/" name="src/core/support/string.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/stack_lockfree.h" role="src" />
<file baseinstalldir="/" name="src/core/support/string_win32.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/string.h" role="src" />
<file baseinstalldir="/" name="src/core/support/thd_internal.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/string_win32.h" role="src" />
<file baseinstalldir="/" name="src/core/support/time_precise.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/thd_internal.h" role="src" />
<file baseinstalldir="/" name="src/core/support/tmpfile.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/time_precise.h" role="src" />
<file baseinstalldir="/" name="src/core/profiling/basic_timers.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/tmpfile.h" role="src" />
<file baseinstalldir="/" name="src/core/profiling/stap_timers.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/profiling/basic_timers.c" role="src" />
<file baseinstalldir="/" name="src/core/support/alloc.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/profiling/stap_timers.c" role="src" />
<file baseinstalldir="/" name="src/core/support/avl.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/alloc.c" role="src" />
<file baseinstalldir="/" name="src/core/support/cmdline.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/avl.c" role="src" />
<file baseinstalldir="/" name="src/core/support/cpu_iphone.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/backoff.c" role="src" />
<file baseinstalldir="/" name="src/core/support/cpu_linux.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/cmdline.c" role="src" />
<file baseinstalldir="/" name="src/core/support/cpu_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/cpu_iphone.c" role="src" />
<file baseinstalldir="/" name="src/core/support/cpu_windows.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/cpu_linux.c" role="src" />
<file baseinstalldir="/" name="src/core/support/env_linux.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/cpu_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/support/env_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/cpu_windows.c" role="src" />
<file baseinstalldir="/" name="src/core/support/env_win32.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/env_linux.c" role="src" />
<file baseinstalldir="/" name="src/core/support/histogram.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/env_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/support/host_port.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/env_win32.c" role="src" />
<file baseinstalldir="/" name="src/core/support/load_file.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/histogram.c" role="src" />
<file baseinstalldir="/" name="src/core/support/log.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/host_port.c" role="src" />
<file baseinstalldir="/" name="src/core/support/log_android.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/load_file.c" role="src" />
<file baseinstalldir="/" name="src/core/support/log_linux.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/log.c" role="src" />
<file baseinstalldir="/" name="src/core/support/log_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/log_android.c" role="src" />
<file baseinstalldir="/" name="src/core/support/log_win32.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/log_linux.c" role="src" />
<file baseinstalldir="/" name="src/core/support/murmur_hash.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/log_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/support/slice.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/log_win32.c" role="src" />
<file baseinstalldir="/" name="src/core/support/slice_buffer.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/murmur_hash.c" role="src" />
<file baseinstalldir="/" name="src/core/support/stack_lockfree.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/slice.c" role="src" />
<file baseinstalldir="/" name="src/core/support/string.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/slice_buffer.c" role="src" />
<file baseinstalldir="/" name="src/core/support/string_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/stack_lockfree.c" role="src" />
<file baseinstalldir="/" name="src/core/support/string_win32.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/string.c" role="src" />
<file baseinstalldir="/" name="src/core/support/subprocess_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/string_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/support/subprocess_windows.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/string_win32.c" role="src" />
<file baseinstalldir="/" name="src/core/support/sync.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/subprocess_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/support/sync_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/subprocess_windows.c" role="src" />
<file baseinstalldir="/" name="src/core/support/sync_win32.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/sync.c" role="src" />
<file baseinstalldir="/" name="src/core/support/thd.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/sync_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/support/thd_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/sync_win32.c" role="src" />
<file baseinstalldir="/" name="src/core/support/thd_win32.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/thd.c" role="src" />
<file baseinstalldir="/" name="src/core/support/time.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/thd_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/support/time_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/thd_win32.c" role="src" />
<file baseinstalldir="/" name="src/core/support/time_precise.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/time.c" role="src" />
<file baseinstalldir="/" name="src/core/support/time_win32.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/time_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/support/tls_pthread.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/time_precise.c" role="src" />
<file baseinstalldir="/" name="src/core/support/tmpfile_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/time_win32.c" role="src" />
<file baseinstalldir="/" name="src/core/support/tmpfile_win32.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/tls_pthread.c" role="src" />
<file baseinstalldir="/" name="src/core/support/wrap_memcpy.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/tmpfile_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/lib/support/tmpfile_win32.c" role="src" />
<file baseinstalldir="/" name="src/core/lib/support/wrap_memcpy.c" role="src" />
<file baseinstalldir="/" name="include/grpc/grpc_security.h" role="src" /> <file baseinstalldir="/" name="include/grpc/grpc_security.h" role="src" />
<file baseinstalldir="/" name="include/grpc/byte_buffer.h" role="src" />
<file baseinstalldir="/" name="include/grpc/byte_buffer_reader.h" role="src" />
<file baseinstalldir="/" name="include/grpc/compression.h" role="src" />
<file baseinstalldir="/" name="include/grpc/grpc.h" role="src" />
<file baseinstalldir="/" name="include/grpc/status.h" role="src" />
<file baseinstalldir="/" name="include/grpc/impl/codegen/byte_buffer.h" role="src" /> <file baseinstalldir="/" name="include/grpc/impl/codegen/byte_buffer.h" role="src" />
<file baseinstalldir="/" name="include/grpc/impl/codegen/compression_types.h" role="src" /> <file baseinstalldir="/" name="include/grpc/impl/codegen/compression_types.h" role="src" />
<file baseinstalldir="/" name="include/grpc/impl/codegen/connectivity_state.h" role="src" /> <file baseinstalldir="/" name="include/grpc/impl/codegen/connectivity_state.h" role="src" />
<file baseinstalldir="/" name="include/grpc/impl/codegen/grpc_types.h" role="src" /> <file baseinstalldir="/" name="include/grpc/impl/codegen/grpc_types.h" role="src" />
<file baseinstalldir="/" name="include/grpc/impl/codegen/propagation_bits.h" role="src" /> <file baseinstalldir="/" name="include/grpc/impl/codegen/propagation_bits.h" role="src" />
<file baseinstalldir="/" name="include/grpc/impl/codegen/status.h" role="src" /> <file baseinstalldir="/" name="include/grpc/impl/codegen/status.h" role="src" />
<file baseinstalldir="/" name="include/grpc/byte_buffer.h" role="src" />
<file baseinstalldir="/" name="include/grpc/byte_buffer_reader.h" role="src" />
<file baseinstalldir="/" name="include/grpc/compression.h" role="src" />
<file baseinstalldir="/" name="include/grpc/grpc.h" role="src" />
<file baseinstalldir="/" name="include/grpc/status.h" role="src" />
<file baseinstalldir="/" name="include/grpc/census.h" role="src" /> <file baseinstalldir="/" name="include/grpc/census.h" role="src" />
<file baseinstalldir="/" name="src/core/census/grpc_filter.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/census/grpc_filter.h" role="src" />
<file baseinstalldir="/" name="src/core/channel/channel_args.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/census/grpc_plugin.h" role="src" />
<file baseinstalldir="/" name="src/core/channel/channel_stack.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/channel/channel_args.h" role="src" />
<file baseinstalldir="/" name="src/core/channel/client_channel.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/channel/channel_stack.h" role="src" />
<file baseinstalldir="/" name="src/core/channel/client_uchannel.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/channel/channel_stack_builder.h" role="src" />
<file baseinstalldir="/" name="src/core/channel/compress_filter.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/channel/client_channel.h" role="src" />
<file baseinstalldir="/" name="src/core/channel/connected_channel.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/channel/compress_filter.h" role="src" />
<file baseinstalldir="/" name="src/core/channel/context.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/channel/connected_channel.h" role="src" />
<file baseinstalldir="/" name="src/core/channel/http_client_filter.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/channel/context.h" role="src" />
<file baseinstalldir="/" name="src/core/channel/http_server_filter.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/channel/http_client_filter.h" role="src" />
<file baseinstalldir="/" name="src/core/channel/subchannel_call_holder.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/channel/http_server_filter.h" role="src" />
<file baseinstalldir="/" name="src/core/client_config/client_config.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/channel/subchannel_call_holder.h" role="src" />
<file baseinstalldir="/" name="src/core/client_config/connector.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/client_config.h" role="src" />
<file baseinstalldir="/" name="src/core/client_config/initial_connect_string.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/connector.h" role="src" />
<file baseinstalldir="/" name="src/core/client_config/lb_policies/load_balancer_api.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/initial_connect_string.h" role="src" />
<file baseinstalldir="/" name="src/core/client_config/lb_policies/pick_first.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/lb_policies/load_balancer_api.h" role="src" />
<file baseinstalldir="/" name="src/core/client_config/lb_policies/round_robin.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/lb_policies/pick_first.h" role="src" />
<file baseinstalldir="/" name="src/core/client_config/lb_policy.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/lb_policies/round_robin.h" role="src" />
<file baseinstalldir="/" name="src/core/client_config/lb_policy_factory.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/lb_policy.h" role="src" />
<file baseinstalldir="/" name="src/core/client_config/lb_policy_registry.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/lb_policy_factory.h" role="src" />
<file baseinstalldir="/" name="src/core/client_config/resolver.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/lb_policy_registry.h" role="src" />
<file baseinstalldir="/" name="src/core/client_config/resolver_factory.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/resolver.h" role="src" />
<file baseinstalldir="/" name="src/core/client_config/resolver_registry.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/resolver_factory.h" role="src" />
<file baseinstalldir="/" name="src/core/client_config/resolvers/dns_resolver.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/resolver_registry.h" role="src" />
<file baseinstalldir="/" name="src/core/client_config/resolvers/sockaddr_resolver.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/resolvers/dns_resolver.h" role="src" />
<file baseinstalldir="/" name="src/core/client_config/subchannel.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/resolvers/sockaddr_resolver.h" role="src" />
<file baseinstalldir="/" name="src/core/client_config/subchannel_factory.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/subchannel.h" role="src" />
<file baseinstalldir="/" name="src/core/client_config/subchannel_index.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/subchannel_factory.h" role="src" />
<file baseinstalldir="/" name="src/core/client_config/uri_parser.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/subchannel_index.h" role="src" />
<file baseinstalldir="/" name="src/core/compression/algorithm_metadata.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/uri_parser.h" role="src" />
<file baseinstalldir="/" name="src/core/compression/message_compress.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/compression/algorithm_metadata.h" role="src" />
<file baseinstalldir="/" name="src/core/debug/trace.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/compression/message_compress.h" role="src" />
<file baseinstalldir="/" name="src/core/httpcli/format_request.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/debug/trace.h" role="src" />
<file baseinstalldir="/" name="src/core/httpcli/httpcli.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/http/format_request.h" role="src" />
<file baseinstalldir="/" name="src/core/httpcli/parser.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/http/httpcli.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/closure.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/http/parser.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/endpoint.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/closure.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/endpoint_pair.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/endpoint.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/exec_ctx.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/endpoint_pair.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/executor.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/exec_ctx.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/fd_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/executor.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/iocp_windows.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/fd_posix.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/iomgr.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/iocp_windows.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/iomgr_internal.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/iomgr.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/iomgr_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_internal.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/pollset.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_posix.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/pollset_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/pollset.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/pollset_set.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_posix.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/pollset_set_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_set.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/pollset_set_windows.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_set_posix.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/pollset_windows.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_set_windows.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/resolve_address.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_windows.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/sockaddr.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/resolve_address.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/sockaddr_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/sockaddr_utils.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr_posix.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/sockaddr_win32.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr_utils.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/socket_utils_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr_win32.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/socket_windows.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/socket_utils_posix.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/tcp_client.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/socket_windows.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/tcp_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_client.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/tcp_server.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_posix.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/tcp_windows.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/time_averaged_stats.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_windows.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/timer.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/time_averaged_stats.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/timer_heap.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/timer.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/udp_server.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/timer_heap.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/wakeup_fd_pipe.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/udp_server.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/wakeup_fd_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/unix_sockets_posix.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/workqueue.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/wakeup_fd_pipe.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/workqueue_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/wakeup_fd_posix.h" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/workqueue_windows.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/workqueue.h" role="src" />
<file baseinstalldir="/" name="src/core/json/json.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/workqueue_posix.h" role="src" />
<file baseinstalldir="/" name="src/core/json/json_common.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/workqueue_windows.h" role="src" />
<file baseinstalldir="/" name="src/core/json/json_reader.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/json/json.h" role="src" />
<file baseinstalldir="/" name="src/core/json/json_writer.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/json/json_common.h" role="src" />
<file baseinstalldir="/" name="src/core/proto/grpc/lb/v0/load_balancer.pb.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/json/json_reader.h" role="src" />
<file baseinstalldir="/" name="src/core/statistics/census_interface.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/json/json_writer.h" role="src" />
<file baseinstalldir="/" name="src/core/statistics/census_rpc_stats.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/proto/grpc/lb/v0/load_balancer.pb.h" role="src" />
<file baseinstalldir="/" name="src/core/surface/api_trace.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/statistics/census_interface.h" role="src" />
<file baseinstalldir="/" name="src/core/surface/call.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/statistics/census_rpc_stats.h" role="src" />
<file baseinstalldir="/" name="src/core/surface/call_test_only.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/api_trace.h" role="src" />
<file baseinstalldir="/" name="src/core/surface/channel.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/call.h" role="src" />
<file baseinstalldir="/" name="src/core/surface/completion_queue.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/call_test_only.h" role="src" />
<file baseinstalldir="/" name="src/core/surface/event_string.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/channel.h" role="src" />
<file baseinstalldir="/" name="src/core/surface/init.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/channel_init.h" role="src" />
<file baseinstalldir="/" name="src/core/surface/server.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/channel_stack_type.h" role="src" />
<file baseinstalldir="/" name="src/core/surface/surface_trace.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/completion_queue.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/byte_stream.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/event_string.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/alpn.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/init.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/bin_encoder.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/lame_client.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/frame.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/server.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/frame_data.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/surface_trace.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/frame_goaway.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/byte_stream.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/frame_ping.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/alpn.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/frame_rst_stream.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/bin_encoder.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/frame_settings.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/frame.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/frame_window_update.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/frame_data.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/hpack_encoder.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/frame_goaway.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/hpack_parser.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/frame_ping.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/hpack_table.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/frame_rst_stream.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/http2_errors.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/frame_settings.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/huffsyms.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/frame_window_update.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/incoming_metadata.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/hpack_encoder.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/internal.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/hpack_parser.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/status_conversion.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/hpack_table.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/stream_map.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/http2_errors.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/timeout_encoding.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/huffsyms.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/varint.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/incoming_metadata.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2_transport.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/internal.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/connectivity_state.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/status_conversion.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/metadata.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/stream_map.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/metadata_batch.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/timeout_encoding.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/static_metadata.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/varint.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/transport.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2_transport.h" role="src" />
<file baseinstalldir="/" name="src/core/transport/transport_impl.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/connectivity_state.h" role="src" />
<file baseinstalldir="/" name="src/core/security/auth_filters.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/metadata.h" role="src" />
<file baseinstalldir="/" name="src/core/security/b64.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/metadata_batch.h" role="src" />
<file baseinstalldir="/" name="src/core/security/credentials.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/static_metadata.h" role="src" />
<file baseinstalldir="/" name="src/core/security/handshake.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/transport.h" role="src" />
<file baseinstalldir="/" name="src/core/security/json_token.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/transport_impl.h" role="src" />
<file baseinstalldir="/" name="src/core/security/jwt_verifier.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/auth_filters.h" role="src" />
<file baseinstalldir="/" name="src/core/security/secure_endpoint.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/b64.h" role="src" />
<file baseinstalldir="/" name="src/core/security/security_connector.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/credentials.h" role="src" />
<file baseinstalldir="/" name="src/core/security/security_context.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/handshake.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/fake_transport_security.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/json_token.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/ssl_transport_security.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/jwt_verifier.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/ssl_types.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/secure_endpoint.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/transport_security.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/security_connector.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/transport_security_interface.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/security_context.h" role="src" />
<file baseinstalldir="/" name="src/core/census/aggregation.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/tsi/fake_transport_security.h" role="src" />
<file baseinstalldir="/" name="src/core/census/mlog.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/tsi/ssl_transport_security.h" role="src" />
<file baseinstalldir="/" name="src/core/census/rpc_metric_id.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/tsi/ssl_types.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/tsi/transport_security.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/tsi/transport_security_interface.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/census/aggregation.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/census/mlog.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/census/rpc_metric_id.h" role="src" />
<file baseinstalldir="/" name="third_party/nanopb/pb.h" role="src" /> <file baseinstalldir="/" name="third_party/nanopb/pb.h" role="src" />
<file baseinstalldir="/" name="third_party/nanopb/pb_common.h" role="src" /> <file baseinstalldir="/" name="third_party/nanopb/pb_common.h" role="src" />
<file baseinstalldir="/" name="third_party/nanopb/pb_decode.h" role="src" /> <file baseinstalldir="/" name="third_party/nanopb/pb_decode.h" role="src" />
<file baseinstalldir="/" name="third_party/nanopb/pb_encode.h" role="src" /> <file baseinstalldir="/" name="third_party/nanopb/pb_encode.h" role="src" />
<file baseinstalldir="/" name="src/core/census/grpc_context.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/census/grpc_context.c" role="src" />
<file baseinstalldir="/" name="src/core/census/grpc_filter.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/census/grpc_filter.c" role="src" />
<file baseinstalldir="/" name="src/core/channel/channel_args.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/census/grpc_plugin.c" role="src" />
<file baseinstalldir="/" name="src/core/channel/channel_stack.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/channel/channel_args.c" role="src" />
<file baseinstalldir="/" name="src/core/channel/client_channel.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/channel/channel_stack.c" role="src" />
<file baseinstalldir="/" name="src/core/channel/client_uchannel.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/channel/channel_stack_builder.c" role="src" />
<file baseinstalldir="/" name="src/core/channel/compress_filter.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/channel/client_channel.c" role="src" />
<file baseinstalldir="/" name="src/core/channel/connected_channel.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/channel/compress_filter.c" role="src" />
<file baseinstalldir="/" name="src/core/channel/http_client_filter.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/channel/connected_channel.c" role="src" />
<file baseinstalldir="/" name="src/core/channel/http_server_filter.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/channel/http_client_filter.c" role="src" />
<file baseinstalldir="/" name="src/core/channel/subchannel_call_holder.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/channel/http_server_filter.c" role="src" />
<file baseinstalldir="/" name="src/core/client_config/client_config.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/channel/subchannel_call_holder.c" role="src" />
<file baseinstalldir="/" name="src/core/client_config/connector.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/client_config.c" role="src" />
<file baseinstalldir="/" name="src/core/client_config/default_initial_connect_string.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/connector.c" role="src" />
<file baseinstalldir="/" name="src/core/client_config/initial_connect_string.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/default_initial_connect_string.c" role="src" />
<file baseinstalldir="/" name="src/core/client_config/lb_policies/load_balancer_api.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/initial_connect_string.c" role="src" />
<file baseinstalldir="/" name="src/core/client_config/lb_policies/pick_first.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/lb_policies/load_balancer_api.c" role="src" />
<file baseinstalldir="/" name="src/core/client_config/lb_policies/round_robin.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/lb_policies/pick_first.c" role="src" />
<file baseinstalldir="/" name="src/core/client_config/lb_policy.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/lb_policies/round_robin.c" role="src" />
<file baseinstalldir="/" name="src/core/client_config/lb_policy_factory.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/lb_policy.c" role="src" />
<file baseinstalldir="/" name="src/core/client_config/lb_policy_registry.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/lb_policy_factory.c" role="src" />
<file baseinstalldir="/" name="src/core/client_config/resolver.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/lb_policy_registry.c" role="src" />
<file baseinstalldir="/" name="src/core/client_config/resolver_factory.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/resolver.c" role="src" />
<file baseinstalldir="/" name="src/core/client_config/resolver_registry.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/resolver_factory.c" role="src" />
<file baseinstalldir="/" name="src/core/client_config/resolvers/dns_resolver.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/resolver_registry.c" role="src" />
<file baseinstalldir="/" name="src/core/client_config/resolvers/sockaddr_resolver.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/resolvers/dns_resolver.c" role="src" />
<file baseinstalldir="/" name="src/core/client_config/subchannel.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/resolvers/sockaddr_resolver.c" role="src" />
<file baseinstalldir="/" name="src/core/client_config/subchannel_factory.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/subchannel.c" role="src" />
<file baseinstalldir="/" name="src/core/client_config/subchannel_index.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/subchannel_factory.c" role="src" />
<file baseinstalldir="/" name="src/core/client_config/uri_parser.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/subchannel_index.c" role="src" />
<file baseinstalldir="/" name="src/core/compression/compression_algorithm.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/client_config/uri_parser.c" role="src" />
<file baseinstalldir="/" name="src/core/compression/message_compress.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/compression/compression_algorithm.c" role="src" />
<file baseinstalldir="/" name="src/core/debug/trace.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/compression/message_compress.c" role="src" />
<file baseinstalldir="/" name="src/core/httpcli/format_request.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/debug/trace.c" role="src" />
<file baseinstalldir="/" name="src/core/httpcli/httpcli.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/http/format_request.c" role="src" />
<file baseinstalldir="/" name="src/core/httpcli/parser.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/http/httpcli.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/closure.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/http/parser.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/endpoint.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/closure.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/endpoint_pair_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/endpoint.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/endpoint_pair_windows.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/endpoint_pair_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/exec_ctx.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/endpoint_pair_windows.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/executor.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/exec_ctx.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/fd_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/executor.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/iocp_windows.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/fd_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/iomgr.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/iocp_windows.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/iomgr_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/iomgr.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/iomgr_windows.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/pollset_multipoller_with_epoll.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_windows.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/pollset_multipoller_with_poll_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_multipoller_with_epoll.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/pollset_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_multipoller_with_poll_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/pollset_set_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/pollset_set_windows.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_set_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/pollset_windows.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_set_windows.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/resolve_address_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_windows.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/resolve_address_windows.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/resolve_address_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/sockaddr_utils.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/resolve_address_windows.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/socket_utils_common_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr_utils.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/socket_utils_linux.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/socket_utils_common_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/socket_utils_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/socket_utils_linux.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/socket_windows.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/socket_utils_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/tcp_client_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/socket_windows.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/tcp_client_windows.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_client_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/tcp_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_client_windows.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/tcp_server_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/tcp_server_windows.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/tcp_windows.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_windows.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/time_averaged_stats.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_windows.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/timer.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/time_averaged_stats.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/timer_heap.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/timer.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/udp_server.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/timer_heap.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/wakeup_fd_eventfd.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/udp_server.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/wakeup_fd_nospecial.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/unix_sockets_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/wakeup_fd_pipe.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/unix_sockets_posix_noop.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/wakeup_fd_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/wakeup_fd_eventfd.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/workqueue_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/wakeup_fd_nospecial.c" role="src" />
<file baseinstalldir="/" name="src/core/iomgr/workqueue_windows.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/wakeup_fd_pipe.c" role="src" />
<file baseinstalldir="/" name="src/core/json/json.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/wakeup_fd_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/json/json_reader.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/workqueue_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/json/json_string.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/workqueue_windows.c" role="src" />
<file baseinstalldir="/" name="src/core/json/json_writer.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/json/json.c" role="src" />
<file baseinstalldir="/" name="src/core/proto/grpc/lb/v0/load_balancer.pb.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/json/json_reader.c" role="src" />
<file baseinstalldir="/" name="src/core/surface/alarm.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/json/json_string.c" role="src" />
<file baseinstalldir="/" name="src/core/surface/api_trace.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/json/json_writer.c" role="src" />
<file baseinstalldir="/" name="src/core/surface/byte_buffer.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/proto/grpc/lb/v0/load_balancer.pb.c" role="src" />
<file baseinstalldir="/" name="src/core/surface/byte_buffer_reader.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/alarm.c" role="src" />
<file baseinstalldir="/" name="src/core/surface/call.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/api_trace.c" role="src" />
<file baseinstalldir="/" name="src/core/surface/call_details.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/byte_buffer.c" role="src" />
<file baseinstalldir="/" name="src/core/surface/call_log_batch.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/byte_buffer_reader.c" role="src" />
<file baseinstalldir="/" name="src/core/surface/channel.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/call.c" role="src" />
<file baseinstalldir="/" name="src/core/surface/channel_connectivity.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/call_details.c" role="src" />
<file baseinstalldir="/" name="src/core/surface/channel_create.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/call_log_batch.c" role="src" />
<file baseinstalldir="/" name="src/core/surface/channel_ping.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/channel.c" role="src" />
<file baseinstalldir="/" name="src/core/surface/completion_queue.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/channel_connectivity.c" role="src" />
<file baseinstalldir="/" name="src/core/surface/event_string.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/channel_create.c" role="src" />
<file baseinstalldir="/" name="src/core/surface/init.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/channel_init.c" role="src" />
<file baseinstalldir="/" name="src/core/surface/lame_client.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/channel_ping.c" role="src" />
<file baseinstalldir="/" name="src/core/surface/metadata_array.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/channel_stack_type.c" role="src" />
<file baseinstalldir="/" name="src/core/surface/server.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/completion_queue.c" role="src" />
<file baseinstalldir="/" name="src/core/surface/server_chttp2.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/event_string.c" role="src" />
<file baseinstalldir="/" name="src/core/surface/server_create.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/init.c" role="src" />
<file baseinstalldir="/" name="src/core/surface/validate_metadata.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/lame_client.c" role="src" />
<file baseinstalldir="/" name="src/core/surface/version.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/metadata_array.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/byte_stream.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/server.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/alpn.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/server_chttp2.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/bin_encoder.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/validate_metadata.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/frame_data.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/version.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/frame_goaway.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/byte_stream.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/frame_ping.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/alpn.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/frame_rst_stream.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/bin_encoder.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/frame_settings.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/frame_data.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/frame_window_update.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/frame_goaway.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/hpack_encoder.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/frame_ping.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/hpack_parser.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/frame_rst_stream.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/hpack_table.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/frame_settings.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/huffsyms.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/frame_window_update.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/incoming_metadata.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/hpack_encoder.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/parsing.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/hpack_parser.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/status_conversion.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/hpack_table.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/stream_lists.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/huffsyms.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/stream_map.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/incoming_metadata.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/timeout_encoding.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/parsing.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/varint.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/status_conversion.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2/writing.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/stream_lists.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/chttp2_transport.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/stream_map.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/connectivity_state.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/timeout_encoding.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/metadata.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/varint.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/metadata_batch.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2/writing.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/static_metadata.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/chttp2_transport.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/transport.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/connectivity_state.c" role="src" />
<file baseinstalldir="/" name="src/core/transport/transport_op_string.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/metadata.c" role="src" />
<file baseinstalldir="/" name="src/core/httpcli/httpcli_security_connector.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/metadata_batch.c" role="src" />
<file baseinstalldir="/" name="src/core/security/b64.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/static_metadata.c" role="src" />
<file baseinstalldir="/" name="src/core/security/client_auth_filter.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/transport.c" role="src" />
<file baseinstalldir="/" name="src/core/security/credentials.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/transport/transport_op_string.c" role="src" />
<file baseinstalldir="/" name="src/core/security/credentials_metadata.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/http/httpcli_security_connector.c" role="src" />
<file baseinstalldir="/" name="src/core/security/credentials_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/b64.c" role="src" />
<file baseinstalldir="/" name="src/core/security/credentials_win32.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/client_auth_filter.c" role="src" />
<file baseinstalldir="/" name="src/core/security/google_default_credentials.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/credentials.c" role="src" />
<file baseinstalldir="/" name="src/core/security/handshake.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/credentials_metadata.c" role="src" />
<file baseinstalldir="/" name="src/core/security/json_token.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/credentials_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/security/jwt_verifier.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/credentials_win32.c" role="src" />
<file baseinstalldir="/" name="src/core/security/secure_endpoint.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/google_default_credentials.c" role="src" />
<file baseinstalldir="/" name="src/core/security/security_connector.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/handshake.c" role="src" />
<file baseinstalldir="/" name="src/core/security/security_context.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/json_token.c" role="src" />
<file baseinstalldir="/" name="src/core/security/server_auth_filter.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/jwt_verifier.c" role="src" />
<file baseinstalldir="/" name="src/core/security/server_secure_chttp2.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/secure_endpoint.c" role="src" />
<file baseinstalldir="/" name="src/core/surface/init_secure.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/security_connector.c" role="src" />
<file baseinstalldir="/" name="src/core/surface/secure_channel_create.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/security_context.c" role="src" />
<file baseinstalldir="/" name="src/core/tsi/fake_transport_security.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/server_auth_filter.c" role="src" />
<file baseinstalldir="/" name="src/core/tsi/ssl_transport_security.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/server_secure_chttp2.c" role="src" />
<file baseinstalldir="/" name="src/core/tsi/transport_security.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/init_secure.c" role="src" />
<file baseinstalldir="/" name="src/core/census/context.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/secure_channel_create.c" role="src" />
<file baseinstalldir="/" name="src/core/census/initialize.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/tsi/fake_transport_security.c" role="src" />
<file baseinstalldir="/" name="src/core/census/mlog.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/tsi/ssl_transport_security.c" role="src" />
<file baseinstalldir="/" name="src/core/census/operation.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/tsi/transport_security.c" role="src" />
<file baseinstalldir="/" name="src/core/census/placeholders.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/census/context.c" role="src" />
<file baseinstalldir="/" name="src/core/census/tracing.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/census/initialize.c" role="src" />
<file baseinstalldir="/" name="src/core/lib/census/mlog.c" role="src" />
<file baseinstalldir="/" name="src/core/lib/census/operation.c" role="src" />
<file baseinstalldir="/" name="src/core/lib/census/placeholders.c" role="src" />
<file baseinstalldir="/" name="src/core/lib/census/tracing.c" role="src" />
<file baseinstalldir="/" name="third_party/nanopb/pb_common.c" role="src" /> <file baseinstalldir="/" name="third_party/nanopb/pb_common.c" role="src" />
<file baseinstalldir="/" name="third_party/nanopb/pb_decode.c" role="src" /> <file baseinstalldir="/" name="third_party/nanopb/pb_decode.c" role="src" />
<file baseinstalldir="/" name="third_party/nanopb/pb_encode.c" role="src" /> <file baseinstalldir="/" name="third_party/nanopb/pb_encode.c" role="src" />

@ -42,6 +42,7 @@ from setuptools.command import egg_info
# Redirect the manifest template from MANIFEST.in to PYTHON-MANIFEST.in. # Redirect the manifest template from MANIFEST.in to PYTHON-MANIFEST.in.
egg_info.manifest_maker.template = 'PYTHON-MANIFEST.in' egg_info.manifest_maker.template = 'PYTHON-MANIFEST.in'
PY3 = sys.version_info.major == 3
PYTHON_STEM = './src/python/grpcio' PYTHON_STEM = './src/python/grpcio'
CORE_INCLUDE = ('./include', '.',) CORE_INCLUDE = ('./include', '.',)
BORINGSSL_INCLUDE = ('./third_party/boringssl/include',) BORINGSSL_INCLUDE = ('./third_party/boringssl/include',)
@ -103,10 +104,14 @@ if "linux" in sys.platform:
LDFLAGS += ('-Wl,-wrap,memcpy',) LDFLAGS += ('-Wl,-wrap,memcpy',)
if "linux" in sys.platform or "darwin" in sys.platform: if "linux" in sys.platform or "darwin" in sys.platform:
CFLAGS += ('-fvisibility=hidden',) CFLAGS += ('-fvisibility=hidden',)
DEFINE_MACROS += (('PyMODINIT_FUNC', '__attribute__((visibility ("default"))) void'),)
pymodinit_type = 'PyObject*' if PY3 else 'void'
def cython_extensions(package_names, module_names, extra_sources, include_dirs, pymodinit = '__attribute__((visibility ("default"))) {}'.format(pymodinit_type)
DEFINE_MACROS += (('PyMODINIT_FUNC', pymodinit),)
def cython_extensions(module_names, extra_sources, include_dirs,
libraries, define_macros, build_with_cython=False): libraries, define_macros, build_with_cython=False):
# Set compiler directives linetrace argument only if we care about tracing; # Set compiler directives linetrace argument only if we care about tracing;
# this is due to Cython having different behavior between linetrace being # this is due to Cython having different behavior between linetrace being
@ -139,7 +144,7 @@ def cython_extensions(package_names, module_names, extra_sources, include_dirs,
return extensions return extensions
CYTHON_EXTENSION_MODULES = cython_extensions( CYTHON_EXTENSION_MODULES = cython_extensions(
list(CYTHON_EXTENSION_PACKAGE_NAMES), list(CYTHON_EXTENSION_MODULE_NAMES), list(CYTHON_EXTENSION_MODULE_NAMES),
list(CYTHON_HELPER_C_FILES) + list(CORE_C_FILES), list(CYTHON_HELPER_C_FILES) + list(CORE_C_FILES),
list(EXTENSION_INCLUDE_DIRECTORIES), list(EXTENSION_LIBRARIES), list(EXTENSION_INCLUDE_DIRECTORIES), list(EXTENSION_LIBRARIES),
list(DEFINE_MACROS), bool(BUILD_WITH_CYTHON)) list(DEFINE_MACROS), bool(BUILD_WITH_CYTHON))

@ -83,6 +83,28 @@ grpc::string FilenameIdentifier(const grpc::string &filename) {
} }
} // namespace } // namespace
template<class T, size_t N>
T *array_end(T (&array)[N]) { return array + N; }
void PrintIncludes(grpc::protobuf::io::Printer *printer, const std::vector<grpc::string>& headers, const Parameters &params) {
std::map<grpc::string, grpc::string> vars;
vars["l"] = params.use_system_headers ? '<' : '"';
vars["r"] = params.use_system_headers ? '>' : '"';
if (!params.grpc_search_path.empty()) {
vars["l"] += params.grpc_search_path;
if (params.grpc_search_path.back() != '/') {
vars["l"] += '/';
}
}
for (auto i = headers.begin(); i != headers.end(); i++) {
vars["h"] = *i;
printer->Print(vars, "#include $l$$h$$r$\n");
}
}
grpc::string GetHeaderPrologue(const grpc::protobuf::FileDescriptor *file, grpc::string GetHeaderPrologue(const grpc::protobuf::FileDescriptor *file,
const Parameters &params) { const Parameters &params) {
grpc::string output; grpc::string output;
@ -111,36 +133,46 @@ grpc::string GetHeaderPrologue(const grpc::protobuf::FileDescriptor *file,
grpc::string GetHeaderIncludes(const grpc::protobuf::FileDescriptor *file, grpc::string GetHeaderIncludes(const grpc::protobuf::FileDescriptor *file,
const Parameters &params) { const Parameters &params) {
grpc::string temp = grpc::string output;
"#include <grpc++/impl/codegen/async_stream.h>\n" {
"#include <grpc++/impl/codegen/async_unary_call.h>\n" // Scope the output stream so it closes and finalizes output to the string.
"#include <grpc++/impl/codegen/proto_utils.h>\n" grpc::protobuf::io::StringOutputStream output_stream(&output);
"#include <grpc++/impl/codegen/rpc_method.h>\n" grpc::protobuf::io::Printer printer(&output_stream, '$');
"#include <grpc++/impl/codegen/service_type.h>\n" std::map<grpc::string, grpc::string> vars;
"#include <grpc++/impl/codegen/status.h>\n"
"#include <grpc++/impl/codegen/stub_options.h>\n"
"#include <grpc++/impl/codegen/sync_stream.h>\n"
"\n"
"namespace grpc {\n"
"class CompletionQueue;\n"
"class RpcService;\n"
"class ServerCompletionQueue;\n"
"class ServerContext;\n"
"} // namespace grpc\n\n";
if (!file->package().empty()) { static const char *headers_strs[] = {
std::vector<grpc::string> parts = "grpc++/impl/codegen/async_stream.h",
grpc_generator::tokenize(file->package(), "."); "grpc++/impl/codegen/async_unary_call.h",
"grpc++/impl/codegen/proto_utils.h",
"grpc++/impl/codegen/rpc_method.h",
"grpc++/impl/codegen/service_type.h",
"grpc++/impl/codegen/status.h",
"grpc++/impl/codegen/stub_options.h",
"grpc++/impl/codegen/sync_stream.h"
};
std::vector<grpc::string> headers(headers_strs, array_end(headers_strs));
PrintIncludes(&printer, headers, params);
printer.Print(vars, "\n");
printer.Print(vars, "namespace grpc {\n");
printer.Print(vars, "class CompletionQueue;\n");
printer.Print(vars, "class Channel;\n");
printer.Print(vars, "class RpcService;\n");
printer.Print(vars, "class ServerCompletionQueue;\n");
printer.Print(vars, "class ServerContext;\n");
printer.Print(vars, "} // namespace grpc\n\n");
for (auto part = parts.begin(); part != parts.end(); part++) { if (!file->package().empty()) {
temp.append("namespace "); std::vector<grpc::string> parts =
temp.append(*part); grpc_generator::tokenize(file->package(), ".");
temp.append(" {\n");
for (auto part = parts.begin(); part != parts.end(); part++) {
vars["part"] = *part;
printer.Print(vars, "namespace $part$ {\n");
}
printer.Print(vars, "\n");
} }
temp.append("\n");
} }
return output;
return temp;
} }
void PrintHeaderClientMethodInterfaces( void PrintHeaderClientMethodInterfaces(
@ -852,7 +884,7 @@ grpc::string GetSourcePrologue(const grpc::protobuf::FileDescriptor *file,
} }
grpc::string GetSourceIncludes(const grpc::protobuf::FileDescriptor *file, grpc::string GetSourceIncludes(const grpc::protobuf::FileDescriptor *file,
const Parameters &param) { const Parameters &params) {
grpc::string output; grpc::string output;
{ {
// Scope the output stream so it closes and finalizes output to the string. // Scope the output stream so it closes and finalizes output to the string.
@ -860,16 +892,18 @@ grpc::string GetSourceIncludes(const grpc::protobuf::FileDescriptor *file,
grpc::protobuf::io::Printer printer(&output_stream, '$'); grpc::protobuf::io::Printer printer(&output_stream, '$');
std::map<grpc::string, grpc::string> vars; std::map<grpc::string, grpc::string> vars;
printer.Print(vars, "#include <grpc++/impl/codegen/async_stream.h>\n"); static const char *headers_strs[] = {
printer.Print(vars, "#include <grpc++/impl/codegen/async_unary_call.h>\n"); "grpc++/impl/codegen/async_stream.h",
printer.Print(vars, "#include <grpc++/impl/codegen/channel_interface.h>\n"); "grpc++/impl/codegen/async_unary_call.h",
printer.Print(vars, "#include <grpc++/impl/codegen/client_unary_call.h>\n"); "grpc++/impl/codegen/channel_interface.h",
printer.Print(vars, "grpc++/impl/codegen/client_unary_call.h",
"#include <grpc++/impl/codegen/method_handler_impl.h>\n"); "grpc++/impl/codegen/method_handler_impl.h",
printer.Print(vars, "grpc++/impl/codegen/rpc_service_method.h",
"#include <grpc++/impl/codegen/rpc_service_method.h>\n"); "grpc++/impl/codegen/service_type.h",
printer.Print(vars, "#include <grpc++/impl/codegen/service_type.h>\n"); "grpc++/impl/codegen/sync_stream.h"
printer.Print(vars, "#include <grpc++/impl/codegen/sync_stream.h>\n"); };
std::vector<grpc::string> headers(headers_strs, array_end(headers_strs));
PrintIncludes(&printer, headers, params);
if (!file->package().empty()) { if (!file->package().empty()) {
std::vector<grpc::string> parts = std::vector<grpc::string> parts =

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -42,6 +42,10 @@ namespace grpc_cpp_generator {
struct Parameters { struct Parameters {
// Puts the service into a namespace // Puts the service into a namespace
grpc::string services_namespace; grpc::string services_namespace;
// Use system includes (<>) or local includes ("")
bool use_system_headers;
// Prefix to any grpc include
grpc::string grpc_search_path;
}; };
// Return the prologue of the generated header file. // Return the prologue of the generated header file.

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -59,6 +59,7 @@ class CppGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
} }
grpc_cpp_generator::Parameters generator_parameters; grpc_cpp_generator::Parameters generator_parameters;
generator_parameters.use_system_headers = true;
if (!parameter.empty()) { if (!parameter.empty()) {
std::vector<grpc::string> parameters_list = std::vector<grpc::string> parameters_list =
@ -70,6 +71,17 @@ class CppGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
grpc_generator::tokenize(*parameter_string, "="); grpc_generator::tokenize(*parameter_string, "=");
if (param[0] == "services_namespace") { if (param[0] == "services_namespace") {
generator_parameters.services_namespace = param[1]; generator_parameters.services_namespace = param[1];
} else if (param[0] == "use_system_headers") {
if (param[1] == "true") {
generator_parameters.use_system_headers = true;
} else if (param[1] == "false") {
generator_parameters.use_system_headers = false;
} else {
*error = grpc::string("Invalid parameter: ") + *parameter_string;
return false;
}
} else if (param[0] == "grpc_search_path") {
generator_parameters.grpc_search_path = param[1];
} else { } else {
*error = grpc::string("Unknown parameter: ") + *parameter_string; *error = grpc::string("Unknown parameter: ") + *parameter_string;
return false; return false;

@ -190,11 +190,10 @@ bool PrintBetaServicer(const ServiceDescriptor* service,
"Documentation", doc, "Documentation", doc,
}); });
out->Print("\n"); out->Print("\n");
out->Print(dict, "class Beta$Service$Servicer(object):\n"); out->Print(dict, "class Beta$Service$Servicer(six.with_metaclass(abc.ABCMeta, object)):\n");
{ {
IndentScope raii_class_indent(out); IndentScope raii_class_indent(out);
out->Print(dict, "\"\"\"$Documentation$\"\"\"\n"); out->Print(dict, "\"\"\"$Documentation$\"\"\"\n");
out->Print("__metaclass__ = abc.ABCMeta\n");
for (int i = 0; i < service->method_count(); ++i) { for (int i = 0; i < service->method_count(); ++i) {
auto meth = service->method(i); auto meth = service->method(i);
grpc::string arg_name = meth->client_streaming() ? grpc::string arg_name = meth->client_streaming() ?
@ -219,11 +218,10 @@ bool PrintBetaStub(const ServiceDescriptor* service,
"Documentation", doc, "Documentation", doc,
}); });
out->Print("\n"); out->Print("\n");
out->Print(dict, "class Beta$Service$Stub(object):\n"); out->Print(dict, "class Beta$Service$Stub(six.with_metaclass(abc.ABCMeta, object)):\n");
{ {
IndentScope raii_class_indent(out); IndentScope raii_class_indent(out);
out->Print(dict, "\"\"\"$Documentation$\"\"\"\n"); out->Print(dict, "\"\"\"$Documentation$\"\"\"\n");
out->Print("__metaclass__ = abc.ABCMeta\n");
for (int i = 0; i < service->method_count(); ++i) { for (int i = 0; i < service->method_count(); ++i) {
const MethodDescriptor* meth = service->method(i); const MethodDescriptor* meth = service->method(i);
grpc::string arg_name = meth->client_streaming() ? grpc::string arg_name = meth->client_streaming() ?
@ -449,6 +447,7 @@ bool PrintBetaStubFactory(const grpc::string& package_qualified_service_name,
bool PrintPreamble(const FileDescriptor* file, bool PrintPreamble(const FileDescriptor* file,
const GeneratorConfiguration& config, Printer* out) { const GeneratorConfiguration& config, Printer* out) {
out->Print("import abc\n"); out->Print("import abc\n");
out->Print("import six\n");
out->Print("from $Package$ import implementations as beta_implementations\n", out->Print("from $Package$ import implementations as beta_implementations\n",
"Package", config.beta_package_root); "Package", config.beta_package_root);
out->Print("from grpc.framework.common import cardinality\n"); out->Print("from grpc.framework.common import cardinality\n");

@ -1,244 +0,0 @@
/*
*
* Copyright 2015-2016, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#include "src/core/channel/client_uchannel.h"
#include <string.h>
#include "src/core/census/grpc_filter.h"
#include "src/core/channel/channel_args.h"
#include "src/core/channel/client_channel.h"
#include "src/core/channel/compress_filter.h"
#include "src/core/channel/subchannel_call_holder.h"
#include "src/core/iomgr/iomgr.h"
#include "src/core/support/string.h"
#include "src/core/surface/channel.h"
#include "src/core/transport/connectivity_state.h"
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include <grpc/support/sync.h>
#include <grpc/support/useful.h>
/** Microchannel (uchannel) implementation: a lightweight channel without any
* load-balancing mechanisms meant for communication from within the core. */
typedef struct client_uchannel_channel_data {
/** master channel - the grpc_channel instance that ultimately owns
this channel_data via its channel stack.
We occasionally use this to bump the refcount on the master channel
to keep ourselves alive through an asynchronous operation. */
grpc_channel_stack *owning_stack;
/** connectivity state being tracked */
grpc_connectivity_state_tracker state_tracker;
/** the subchannel wrapped by the microchannel */
grpc_connected_subchannel *connected_subchannel;
/** the callback used to stay subscribed to subchannel connectivity
* notifications */
grpc_closure connectivity_cb;
/** the current connectivity state of the wrapped subchannel */
grpc_connectivity_state subchannel_connectivity;
gpr_mu mu_state;
} channel_data;
typedef grpc_subchannel_call_holder call_data;
static void monitor_subchannel(grpc_exec_ctx *exec_ctx, void *arg,
bool iomgr_success) {
channel_data *chand = arg;
grpc_connectivity_state_set(exec_ctx, &chand->state_tracker,
chand->subchannel_connectivity,
"uchannel_monitor_subchannel");
grpc_connected_subchannel_notify_on_state_change(
exec_ctx, chand->connected_subchannel, NULL,
&chand->subchannel_connectivity, &chand->connectivity_cb);
}
static char *cuc_get_peer(grpc_exec_ctx *exec_ctx, grpc_call_element *elem) {
return grpc_subchannel_call_holder_get_peer(exec_ctx, elem->call_data);
}
static void cuc_start_transport_stream_op(grpc_exec_ctx *exec_ctx,
grpc_call_element *elem,
grpc_transport_stream_op *op) {
GRPC_CALL_LOG_OP(GPR_INFO, elem, op);
grpc_subchannel_call_holder_perform_op(exec_ctx, elem->call_data, op);
}
static void cuc_start_transport_op(grpc_exec_ctx *exec_ctx,
grpc_channel_element *elem,
grpc_transport_op *op) {
channel_data *chand = elem->channel_data;
grpc_exec_ctx_enqueue(exec_ctx, op->on_consumed, true, NULL);
GPR_ASSERT(op->set_accept_stream == false);
GPR_ASSERT(op->bind_pollset == NULL);
if (op->on_connectivity_state_change != NULL) {
grpc_connectivity_state_notify_on_state_change(
exec_ctx, &chand->state_tracker, op->connectivity_state,
op->on_connectivity_state_change);
op->on_connectivity_state_change = NULL;
op->connectivity_state = NULL;
}
if (op->disconnect) {
grpc_connectivity_state_set(exec_ctx, &chand->state_tracker,
GRPC_CHANNEL_FATAL_FAILURE, "disconnect");
}
}
static int cuc_pick_subchannel(grpc_exec_ctx *exec_ctx, void *arg,
grpc_metadata_batch *initial_metadata,
uint32_t initial_metadata_flags,
grpc_connected_subchannel **connected_subchannel,
grpc_closure *on_ready) {
channel_data *chand = arg;
GPR_ASSERT(initial_metadata != NULL);
*connected_subchannel = chand->connected_subchannel;
return 1;
}
/* Constructor for call_data */
static void cuc_init_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
grpc_call_element_args *args) {
grpc_subchannel_call_holder_init(elem->call_data, cuc_pick_subchannel,
elem->channel_data, args->call_stack);
}
/* Destructor for call_data */
static void cuc_destroy_call_elem(grpc_exec_ctx *exec_ctx,
grpc_call_element *elem) {
grpc_subchannel_call_holder_destroy(exec_ctx, elem->call_data);
}
/* Constructor for channel_data */
static void cuc_init_channel_elem(grpc_exec_ctx *exec_ctx,
grpc_channel_element *elem,
grpc_channel_element_args *args) {
channel_data *chand = elem->channel_data;
memset(chand, 0, sizeof(*chand));
grpc_closure_init(&chand->connectivity_cb, monitor_subchannel, chand);
GPR_ASSERT(args->is_last);
GPR_ASSERT(elem->filter == &grpc_client_uchannel_filter);
chand->owning_stack = args->channel_stack;
grpc_connectivity_state_init(&chand->state_tracker, GRPC_CHANNEL_IDLE,
"client_uchannel");
gpr_mu_init(&chand->mu_state);
}
/* Destructor for channel_data */
static void cuc_destroy_channel_elem(grpc_exec_ctx *exec_ctx,
grpc_channel_element *elem) {
channel_data *chand = elem->channel_data;
/* cancel subscription */
grpc_connected_subchannel_notify_on_state_change(
exec_ctx, chand->connected_subchannel, NULL, NULL,
&chand->connectivity_cb);
grpc_connectivity_state_destroy(exec_ctx, &chand->state_tracker);
gpr_mu_destroy(&chand->mu_state);
GRPC_CONNECTED_SUBCHANNEL_UNREF(exec_ctx, chand->connected_subchannel,
"uchannel");
}
static void cuc_set_pollset(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
grpc_pollset *pollset) {
call_data *calld = elem->call_data;
calld->pollset = pollset;
}
const grpc_channel_filter grpc_client_uchannel_filter = {
cuc_start_transport_stream_op, cuc_start_transport_op, sizeof(call_data),
cuc_init_call_elem, cuc_set_pollset, cuc_destroy_call_elem,
sizeof(channel_data), cuc_init_channel_elem, cuc_destroy_channel_elem,
cuc_get_peer, "client-uchannel",
};
grpc_connectivity_state grpc_client_uchannel_check_connectivity_state(
grpc_exec_ctx *exec_ctx, grpc_channel_element *elem, int try_to_connect) {
channel_data *chand = elem->channel_data;
grpc_connectivity_state out;
gpr_mu_lock(&chand->mu_state);
out = grpc_connectivity_state_check(&chand->state_tracker);
gpr_mu_unlock(&chand->mu_state);
return out;
}
void grpc_client_uchannel_watch_connectivity_state(
grpc_exec_ctx *exec_ctx, grpc_channel_element *elem, grpc_pollset *pollset,
grpc_connectivity_state *state, grpc_closure *on_complete) {
channel_data *chand = elem->channel_data;
gpr_mu_lock(&chand->mu_state);
grpc_connectivity_state_notify_on_state_change(
exec_ctx, &chand->state_tracker, state, on_complete);
gpr_mu_unlock(&chand->mu_state);
}
grpc_channel *grpc_client_uchannel_create(grpc_subchannel *subchannel,
grpc_channel_args *args) {
grpc_channel *channel = NULL;
#define MAX_FILTERS 3
const grpc_channel_filter *filters[MAX_FILTERS];
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
size_t n = 0;
if (grpc_channel_args_is_census_enabled(args)) {
filters[n++] = &grpc_client_census_filter;
}
filters[n++] = &grpc_compress_filter;
filters[n++] = &grpc_client_uchannel_filter;
GPR_ASSERT(n <= MAX_FILTERS);
channel =
grpc_channel_create_from_filters(&exec_ctx, NULL, filters, n, args, 1);
return channel;
}
void grpc_client_uchannel_set_connected_subchannel(
grpc_channel *uchannel, grpc_connected_subchannel *connected_subchannel) {
grpc_channel_element *elem =
grpc_channel_stack_last_element(grpc_channel_get_channel_stack(uchannel));
channel_data *chand = elem->channel_data;
GPR_ASSERT(elem->filter == &grpc_client_uchannel_filter);
gpr_mu_lock(&chand->mu_state);
chand->connected_subchannel = connected_subchannel;
GRPC_CONNECTED_SUBCHANNEL_REF(connected_subchannel, "uchannel");
gpr_mu_unlock(&chand->mu_state);
}

@ -1,211 +0,0 @@
/*
*
* Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#include "src/core/httpcli/parser.h"
#include <string.h>
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include <grpc/support/useful.h>
static int handle_response_line(grpc_httpcli_parser *parser) {
uint8_t *beg = parser->cur_line;
uint8_t *cur = beg;
uint8_t *end = beg + parser->cur_line_length;
if (cur == end || *cur++ != 'H') goto error;
if (cur == end || *cur++ != 'T') goto error;
if (cur == end || *cur++ != 'T') goto error;
if (cur == end || *cur++ != 'P') goto error;
if (cur == end || *cur++ != '/') goto error;
if (cur == end || *cur++ != '1') goto error;
if (cur == end || *cur++ != '.') goto error;
if (cur == end || *cur < '0' || *cur++ > '1') goto error;
if (cur == end || *cur++ != ' ') goto error;
if (cur == end || *cur < '1' || *cur++ > '9') goto error;
if (cur == end || *cur < '0' || *cur++ > '9') goto error;
if (cur == end || *cur < '0' || *cur++ > '9') goto error;
parser->r.status =
(cur[-3] - '0') * 100 + (cur[-2] - '0') * 10 + (cur[-1] - '0');
if (cur == end || *cur++ != ' ') goto error;
/* we don't really care about the status code message */
return 1;
error:
gpr_log(GPR_ERROR, "Failed parsing response line");
return 0;
}
static char *buf2str(void *buffer, size_t length) {
char *out = gpr_malloc(length + 1);
memcpy(out, buffer, length);
out[length] = 0;
return out;
}
static int add_header(grpc_httpcli_parser *parser) {
uint8_t *beg = parser->cur_line;
uint8_t *cur = beg;
uint8_t *end = beg + parser->cur_line_length;
grpc_httpcli_header hdr = {NULL, NULL};
GPR_ASSERT(cur != end);
if (*cur == ' ' || *cur == '\t') {
gpr_log(GPR_ERROR, "Continued header lines not supported yet");
goto error;
}
while (cur != end && *cur != ':') {
cur++;
}
if (cur == end) {
gpr_log(GPR_ERROR, "Didn't find ':' in header string");
goto error;
}
GPR_ASSERT(cur >= beg);
hdr.key = buf2str(beg, (size_t)(cur - beg));
cur++; /* skip : */
while (cur != end && (*cur == ' ' || *cur == '\t')) {
cur++;
}
GPR_ASSERT(end - cur >= 2);
hdr.value = buf2str(cur, (size_t)(end - cur) - 2);
if (parser->r.hdr_count == parser->hdr_capacity) {
parser->hdr_capacity =
GPR_MAX(parser->hdr_capacity + 1, parser->hdr_capacity * 3 / 2);
parser->r.hdrs = gpr_realloc(
parser->r.hdrs, parser->hdr_capacity * sizeof(*parser->r.hdrs));
}
parser->r.hdrs[parser->r.hdr_count++] = hdr;
return 1;
error:
gpr_free(hdr.key);
gpr_free(hdr.value);
return 0;
}
static int finish_line(grpc_httpcli_parser *parser) {
switch (parser->state) {
case GRPC_HTTPCLI_INITIAL_RESPONSE:
if (!handle_response_line(parser)) {
return 0;
}
parser->state = GRPC_HTTPCLI_HEADERS;
break;
case GRPC_HTTPCLI_HEADERS:
if (parser->cur_line_length == 2) {
parser->state = GRPC_HTTPCLI_BODY;
break;
}
if (!add_header(parser)) {
return 0;
}
break;
case GRPC_HTTPCLI_BODY:
GPR_UNREACHABLE_CODE(return 0);
}
parser->cur_line_length = 0;
return 1;
}
static int addbyte(grpc_httpcli_parser *parser, uint8_t byte) {
switch (parser->state) {
case GRPC_HTTPCLI_INITIAL_RESPONSE:
case GRPC_HTTPCLI_HEADERS:
if (parser->cur_line_length >= GRPC_HTTPCLI_MAX_HEADER_LENGTH) {
gpr_log(GPR_ERROR, "HTTP client max line length (%d) exceeded",
GRPC_HTTPCLI_MAX_HEADER_LENGTH);
return 0;
}
parser->cur_line[parser->cur_line_length] = byte;
parser->cur_line_length++;
if (parser->cur_line_length >= 2 &&
parser->cur_line[parser->cur_line_length - 2] == '\r' &&
parser->cur_line[parser->cur_line_length - 1] == '\n') {
return finish_line(parser);
} else {
return 1;
}
GPR_UNREACHABLE_CODE(return 0);
case GRPC_HTTPCLI_BODY:
if (parser->r.body_length == parser->body_capacity) {
parser->body_capacity = GPR_MAX(8, parser->body_capacity * 3 / 2);
parser->r.body =
gpr_realloc((void *)parser->r.body, parser->body_capacity);
}
parser->r.body[parser->r.body_length] = (char)byte;
parser->r.body_length++;
return 1;
}
GPR_UNREACHABLE_CODE(return 0);
}
void grpc_httpcli_parser_init(grpc_httpcli_parser *parser) {
memset(parser, 0, sizeof(*parser));
parser->state = GRPC_HTTPCLI_INITIAL_RESPONSE;
parser->r.status = 500;
}
void grpc_httpcli_parser_destroy(grpc_httpcli_parser *parser) {
size_t i;
gpr_free(parser->r.body);
for (i = 0; i < parser->r.hdr_count; i++) {
gpr_free(parser->r.hdrs[i].key);
gpr_free(parser->r.hdrs[i].value);
}
gpr_free(parser->r.hdrs);
}
int grpc_httpcli_parser_parse(grpc_httpcli_parser *parser, gpr_slice slice) {
size_t i;
for (i = 0; i < GPR_SLICE_LENGTH(slice); i++) {
if (!addbyte(parser, GPR_SLICE_START_PTR(slice)[i])) {
return 0;
}
}
return 1;
}
int grpc_httpcli_parser_eof(grpc_httpcli_parser *parser) {
return parser->state == GRPC_HTTPCLI_BODY;
}

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -33,8 +33,8 @@
#include <stddef.h> #include <stddef.h>
#ifndef GRPC_INTERNAL_CORE_CENSUS_AGGREGATION_H #ifndef GRPC_CORE_LIB_CENSUS_AGGREGATION_H
#define GRPC_INTERNAL_CORE_CENSUS_AGGREGATION_H #define GRPC_CORE_LIB_CENSUS_AGGREGATION_H
/** Structure used to describe an aggregation type. */ /** Structure used to describe an aggregation type. */
struct census_aggregation_ops { struct census_aggregation_ops {
@ -63,4 +63,4 @@ struct census_aggregation_ops {
size_t (*print)(const void *aggregation, char *buffer, size_t n); size_t (*print)(const void *aggregation, char *buffer, size_t n);
}; };
#endif /* GRPC_INTERNAL_CORE_CENSUS_AGGREGATION_H */ #endif /* GRPC_CORE_LIB_CENSUS_AGGREGATION_H */

@ -38,7 +38,7 @@
#include <grpc/support/useful.h> #include <grpc/support/useful.h>
#include <stdbool.h> #include <stdbool.h>
#include <string.h> #include <string.h>
#include "src/core/support/string.h" #include "src/core/lib/support/string.h"
// Functions in this file support the public context API, including // Functions in this file support the public context API, including
// encoding/decoding as part of context propagation across RPC's. The overall // encoding/decoding as part of context propagation across RPC's. The overall

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -33,8 +33,8 @@
#include <grpc/census.h> #include <grpc/census.h>
#include <grpc/grpc.h> #include <grpc/grpc.h>
#include "src/core/surface/api_trace.h" #include "src/core/lib/surface/api_trace.h"
#include "src/core/surface/call.h" #include "src/core/lib/surface/call.h"
void grpc_census_call_set_context(grpc_call *call, census_context *context) { void grpc_census_call_set_context(grpc_call *call, census_context *context) {
GRPC_API_TRACE("grpc_census_call_set_context(call=%p, census_context=%p)", 2, GRPC_API_TRACE("grpc_census_call_set_context(call=%p, census_context=%p)", 2,

@ -31,7 +31,7 @@
* *
*/ */
#include "src/core/census/grpc_filter.h" #include "src/core/lib/census/grpc_filter.h"
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@ -42,10 +42,10 @@
#include <grpc/support/slice.h> #include <grpc/support/slice.h>
#include <grpc/support/time.h> #include <grpc/support/time.h>
#include "src/core/channel/channel_stack.h" #include "src/core/lib/channel/channel_stack.h"
#include "src/core/statistics/census_interface.h" #include "src/core/lib/statistics/census_interface.h"
#include "src/core/statistics/census_rpc_stats.h" #include "src/core/lib/statistics/census_rpc_stats.h"
#include "src/core/transport/static_metadata.h" #include "src/core/lib/transport/static_metadata.h"
typedef struct call_data { typedef struct call_data {
census_op_id op_id; census_op_id op_id;
@ -172,13 +172,27 @@ static void destroy_channel_elem(grpc_exec_ctx *exec_ctx,
} }
const grpc_channel_filter grpc_client_census_filter = { const grpc_channel_filter grpc_client_census_filter = {
client_start_transport_op, grpc_channel_next_op, sizeof(call_data), client_start_transport_op,
client_init_call_elem, grpc_call_stack_ignore_set_pollset, grpc_channel_next_op,
client_destroy_call_elem, sizeof(channel_data), init_channel_elem, sizeof(call_data),
destroy_channel_elem, grpc_call_next_get_peer, "census-client"}; client_init_call_elem,
grpc_call_stack_ignore_set_pollset,
client_destroy_call_elem,
sizeof(channel_data),
init_channel_elem,
destroy_channel_elem,
grpc_call_next_get_peer,
"census-client"};
const grpc_channel_filter grpc_server_census_filter = { const grpc_channel_filter grpc_server_census_filter = {
server_start_transport_op, grpc_channel_next_op, sizeof(call_data), server_start_transport_op,
server_init_call_elem, grpc_call_stack_ignore_set_pollset, grpc_channel_next_op,
server_destroy_call_elem, sizeof(channel_data), init_channel_elem, sizeof(call_data),
destroy_channel_elem, grpc_call_next_get_peer, "census-server"}; server_init_call_elem,
grpc_call_stack_ignore_set_pollset,
server_destroy_call_elem,
sizeof(channel_data),
init_channel_elem,
destroy_channel_elem,
grpc_call_next_get_peer,
"census-server"};

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -31,14 +31,14 @@
* *
*/ */
#ifndef GRPC_INTERNAL_CORE_CENSUS_GRPC_FILTER_H #ifndef GRPC_CORE_LIB_CENSUS_GRPC_FILTER_H
#define GRPC_INTERNAL_CORE_CENSUS_GRPC_FILTER_H #define GRPC_CORE_LIB_CENSUS_GRPC_FILTER_H
#include "src/core/channel/channel_stack.h" #include "src/core/lib/channel/channel_stack.h"
/* Census filters: provides tracing and stats collection functionalities. It /* Census filters: provides tracing and stats collection functionalities. It
needs to reside right below the surface filter in the channel stack. */ needs to reside right below the surface filter in the channel stack. */
extern const grpc_channel_filter grpc_client_census_filter; extern const grpc_channel_filter grpc_client_census_filter;
extern const grpc_channel_filter grpc_server_census_filter; extern const grpc_channel_filter grpc_server_census_filter;
#endif /* GRPC_INTERNAL_CORE_CENSUS_GRPC_FILTER_H */ #endif /* GRPC_CORE_LIB_CENSUS_GRPC_FILTER_H */

@ -0,0 +1,70 @@
/*
*
* Copyright 2015-2016, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#include "src/core/lib/census/grpc_plugin.h"
#include <limits.h>
#include <grpc/census.h>
#include "src/core/lib/census/grpc_filter.h"
#include "src/core/lib/channel/channel_stack_builder.h"
#include "src/core/lib/surface/channel_init.h"
static bool maybe_add_census_filter(grpc_channel_stack_builder *builder,
void *arg_must_be_null) {
const grpc_channel_args *args =
grpc_channel_stack_builder_get_channel_arguments(builder);
if (grpc_channel_args_is_census_enabled(args)) {
return grpc_channel_stack_builder_prepend_filter(
builder, &grpc_client_census_filter, NULL, NULL);
}
return true;
}
void census_grpc_plugin_init(void) {
/* Only initialize census if no one else has and some features are
* available. */
if (census_enabled() == CENSUS_FEATURE_NONE &&
census_supported() != CENSUS_FEATURE_NONE) {
if (census_initialize(census_supported())) { /* enable all features. */
gpr_log(GPR_ERROR, "Could not initialize census.");
}
}
grpc_channel_init_register_stage(GRPC_CLIENT_CHANNEL, INT_MAX,
maybe_add_census_filter, NULL);
grpc_channel_init_register_stage(GRPC_SERVER_CHANNEL, INT_MAX,
maybe_add_census_filter, NULL);
}
void census_grpc_plugin_destroy(void) { census_shutdown(); }

@ -31,18 +31,10 @@
* *
*/ */
#include <grpc/grpc.h> #ifndef GRPC_CORE_LIB_CENSUS_GRPC_PLUGIN_H
#include "src/core/census/grpc_filter.h" #define GRPC_CORE_LIB_CENSUS_GRPC_PLUGIN_H
#include "src/core/channel/channel_args.h"
#include "src/core/channel/compress_filter.h"
#include "src/core/surface/api_trace.h"
#include "src/core/surface/completion_queue.h"
#include "src/core/surface/server.h"
grpc_server *grpc_server_create(const grpc_channel_args *args, void *reserved) { void census_grpc_plugin_init(void);
const grpc_channel_filter *filters[3]; void census_grpc_plugin_destroy(void);
size_t num_filters = 0;
filters[num_filters++] = &grpc_compress_filter; #endif /* GRPC_CORE_LIB_CENSUS_GRPC_PLUGIN_H */
GRPC_API_TRACE("grpc_server_create(%p, %p)", 2, (args, reserved));
return grpc_server_create_from_filters(filters, num_filters, args);
}

@ -88,7 +88,7 @@
// include the name of the structure, which will be passed as the first // include the name of the structure, which will be passed as the first
// argument. E.g. cl_block_initialize() will initialize a cl_block. // argument. E.g. cl_block_initialize() will initialize a cl_block.
#include "src/core/census/mlog.h" #include "src/core/lib/census/mlog.h"
#include <grpc/support/alloc.h> #include <grpc/support/alloc.h>
#include <grpc/support/atm.h> #include <grpc/support/atm.h>
#include <grpc/support/cpu.h> #include <grpc/support/cpu.h>

@ -33,8 +33,8 @@
/* A very fast in-memory log, optimized for multiple writers. */ /* A very fast in-memory log, optimized for multiple writers. */
#ifndef GRPC_INTERNAL_CORE_CENSUS_MLOG_H #ifndef GRPC_CORE_LIB_CENSUS_MLOG_H
#define GRPC_INTERNAL_CORE_CENSUS_MLOG_H #define GRPC_CORE_LIB_CENSUS_MLOG_H
#include <grpc/support/port_platform.h> #include <grpc/support/port_platform.h>
#include <stddef.h> #include <stddef.h>
@ -92,4 +92,4 @@ size_t census_log_remaining_space(void);
out-of-space. */ out-of-space. */
int64_t census_log_out_of_space_count(void); int64_t census_log_out_of_space_count(void);
#endif /* GRPC_INTERNAL_CORE_CENSUS_LOG_H */ #endif /* GRPC_CORE_LIB_CENSUS_MLOG_H */

@ -1,5 +1,5 @@
/* /*
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -31,8 +31,8 @@
* *
*/ */
#ifndef CENSUS_RPC_METRIC_ID_H #ifndef GRPC_CORE_LIB_CENSUS_RPC_METRIC_ID_H
#define CENSUS_RPC_METRIC_ID_H #define GRPC_CORE_LIB_CENSUS_RPC_METRIC_ID_H
/* Metric ID's used for RPC measurements. */ /* Metric ID's used for RPC measurements. */
/* Count of client requests sent. */ /* Count of client requests sent. */
@ -48,4 +48,4 @@
/* Server side request latency. */ /* Server side request latency. */
#define CENSUS_METRIC_RPC_SERVER_LATENCY ((uint32_t)5) #define CENSUS_METRIC_RPC_SERVER_LATENCY ((uint32_t)5)
#endif /* CENSUS_RPC_METRIC_ID_H */ #endif /* GRPC_CORE_LIB_CENSUS_RPC_METRIC_ID_H */

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without

@ -31,9 +31,9 @@
* *
*/ */
#include "src/core/lib/channel/channel_args.h"
#include <grpc/grpc.h> #include <grpc/grpc.h>
#include "src/core/channel/channel_args.h" #include "src/core/lib/support/string.h"
#include "src/core/support/string.h"
#include <grpc/census.h> #include <grpc/census.h>
#include <grpc/support/alloc.h> #include <grpc/support/alloc.h>

@ -31,8 +31,8 @@
* *
*/ */
#ifndef GRPC_INTERNAL_CORE_CHANNEL_CHANNEL_ARGS_H #ifndef GRPC_CORE_LIB_CHANNEL_CHANNEL_ARGS_H
#define GRPC_INTERNAL_CORE_CHANNEL_CHANNEL_ARGS_H #define GRPC_CORE_LIB_CHANNEL_CHANNEL_ARGS_H
#include <grpc/compression.h> #include <grpc/compression.h>
#include <grpc/grpc.h> #include <grpc/grpc.h>
@ -91,4 +91,4 @@ int grpc_channel_args_compression_algorithm_get_states(
int grpc_channel_args_compare(const grpc_channel_args *a, int grpc_channel_args_compare(const grpc_channel_args *a,
const grpc_channel_args *b); const grpc_channel_args *b);
#endif /* GRPC_INTERNAL_CORE_CHANNEL_CHANNEL_ARGS_H */ #endif /* GRPC_CORE_LIB_CHANNEL_CHANNEL_ARGS_H */

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -31,7 +31,7 @@
* *
*/ */
#include "src/core/channel/channel_stack.h" #include "src/core/lib/channel/channel_stack.h"
#include <grpc/support/log.h> #include <grpc/support/log.h>
#include <stdlib.h> #include <stdlib.h>

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -31,8 +31,8 @@
* *
*/ */
#ifndef GRPC_INTERNAL_CORE_CHANNEL_CHANNEL_STACK_H #ifndef GRPC_CORE_LIB_CHANNEL_CHANNEL_STACK_H
#define GRPC_INTERNAL_CORE_CHANNEL_CHANNEL_STACK_H #define GRPC_CORE_LIB_CHANNEL_CHANNEL_STACK_H
/* A channel filter defines how operations on a channel are implemented. /* A channel filter defines how operations on a channel are implemented.
Channel filters are chained together to create full channels, and if those Channel filters are chained together to create full channels, and if those
@ -45,8 +45,8 @@
#include <grpc/grpc.h> #include <grpc/grpc.h>
#include <grpc/support/log.h> #include <grpc/support/log.h>
#include "src/core/debug/trace.h" #include "src/core/lib/debug/trace.h"
#include "src/core/transport/transport.h" #include "src/core/lib/transport/transport.h"
typedef struct grpc_channel_element grpc_channel_element; typedef struct grpc_channel_element grpc_channel_element;
typedef struct grpc_call_element grpc_call_element; typedef struct grpc_call_element grpc_call_element;
@ -257,4 +257,4 @@ extern int grpc_trace_channel;
#define GRPC_CALL_LOG_OP(sev, elem, op) \ #define GRPC_CALL_LOG_OP(sev, elem, op) \
if (grpc_trace_channel) grpc_call_log_op(sev, elem, op) if (grpc_trace_channel) grpc_call_log_op(sev, elem, op)
#endif /* GRPC_INTERNAL_CORE_CHANNEL_CHANNEL_STACK_H */ #endif /* GRPC_CORE_LIB_CHANNEL_CHANNEL_STACK_H */

@ -0,0 +1,258 @@
/*
*
* Copyright 2016, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#include "src/core/lib/channel/channel_stack_builder.h"
#include <string.h>
#include <grpc/support/alloc.h>
int grpc_trace_channel_stack_builder = 0;
typedef struct filter_node {
struct filter_node *next;
struct filter_node *prev;
const grpc_channel_filter *filter;
grpc_post_filter_create_init_func init;
void *init_arg;
} filter_node;
struct grpc_channel_stack_builder {
// sentinel nodes for filters that have been added
filter_node begin;
filter_node end;
// various set/get-able parameters
const grpc_channel_args *args;
grpc_transport *transport;
const char *name;
};
struct grpc_channel_stack_builder_iterator {
grpc_channel_stack_builder *builder;
filter_node *node;
};
grpc_channel_stack_builder *grpc_channel_stack_builder_create(void) {
grpc_channel_stack_builder *b = gpr_malloc(sizeof(*b));
memset(b, 0, sizeof(*b));
b->begin.filter = NULL;
b->end.filter = NULL;
b->begin.next = &b->end;
b->begin.prev = &b->end;
b->end.next = &b->begin;
b->end.prev = &b->begin;
return b;
}
static grpc_channel_stack_builder_iterator *create_iterator_at_filter_node(
grpc_channel_stack_builder *builder, filter_node *node) {
grpc_channel_stack_builder_iterator *it = gpr_malloc(sizeof(*it));
it->builder = builder;
it->node = node;
return it;
}
void grpc_channel_stack_builder_iterator_destroy(
grpc_channel_stack_builder_iterator *it) {
gpr_free(it);
}
grpc_channel_stack_builder_iterator *
grpc_channel_stack_builder_create_iterator_at_first(
grpc_channel_stack_builder *builder) {
return create_iterator_at_filter_node(builder, &builder->begin);
}
grpc_channel_stack_builder_iterator *
grpc_channel_stack_builder_create_iterator_at_last(
grpc_channel_stack_builder *builder) {
return create_iterator_at_filter_node(builder, &builder->end);
}
bool grpc_channel_stack_builder_move_next(
grpc_channel_stack_builder_iterator *iterator) {
if (iterator->node == &iterator->builder->end) return false;
iterator->node = iterator->node->next;
return true;
}
bool grpc_channel_stack_builder_move_prev(
grpc_channel_stack_builder_iterator *iterator) {
if (iterator->node == &iterator->builder->begin) return false;
iterator->node = iterator->node->prev;
return true;
}
bool grpc_channel_stack_builder_move_prev(
grpc_channel_stack_builder_iterator *iterator);
void grpc_channel_stack_builder_set_name(grpc_channel_stack_builder *builder,
const char *name) {
GPR_ASSERT(builder->name == NULL);
builder->name = name;
}
void grpc_channel_stack_builder_set_channel_arguments(
grpc_channel_stack_builder *builder, const grpc_channel_args *args) {
GPR_ASSERT(builder->args == NULL);
builder->args = args;
}
void grpc_channel_stack_builder_set_transport(
grpc_channel_stack_builder *builder, grpc_transport *transport) {
GPR_ASSERT(builder->transport == NULL);
builder->transport = transport;
}
grpc_transport *grpc_channel_stack_builder_get_transport(
grpc_channel_stack_builder *builder) {
return builder->transport;
}
const grpc_channel_args *grpc_channel_stack_builder_get_channel_arguments(
grpc_channel_stack_builder *builder) {
return builder->args;
}
bool grpc_channel_stack_builder_append_filter(
grpc_channel_stack_builder *builder, const grpc_channel_filter *filter,
grpc_post_filter_create_init_func post_init_func, void *user_data) {
grpc_channel_stack_builder_iterator *it =
grpc_channel_stack_builder_create_iterator_at_last(builder);
bool ok = grpc_channel_stack_builder_add_filter_before(
it, filter, post_init_func, user_data);
grpc_channel_stack_builder_iterator_destroy(it);
return ok;
}
bool grpc_channel_stack_builder_prepend_filter(
grpc_channel_stack_builder *builder, const grpc_channel_filter *filter,
grpc_post_filter_create_init_func post_init_func, void *user_data) {
grpc_channel_stack_builder_iterator *it =
grpc_channel_stack_builder_create_iterator_at_first(builder);
bool ok = grpc_channel_stack_builder_add_filter_after(
it, filter, post_init_func, user_data);
grpc_channel_stack_builder_iterator_destroy(it);
return ok;
}
static void add_after(filter_node *before, const grpc_channel_filter *filter,
grpc_post_filter_create_init_func post_init_func,
void *user_data) {
filter_node *new = gpr_malloc(sizeof(*new));
new->next = before->next;
new->prev = before;
new->next->prev = new->prev->next = new;
new->filter = filter;
new->init = post_init_func;
new->init_arg = user_data;
}
bool grpc_channel_stack_builder_add_filter_before(
grpc_channel_stack_builder_iterator *iterator,
const grpc_channel_filter *filter,
grpc_post_filter_create_init_func post_init_func, void *user_data) {
if (iterator->node == &iterator->builder->begin) return false;
add_after(iterator->node->prev, filter, post_init_func, user_data);
return true;
}
bool grpc_channel_stack_builder_add_filter_after(
grpc_channel_stack_builder_iterator *iterator,
const grpc_channel_filter *filter,
grpc_post_filter_create_init_func post_init_func, void *user_data) {
if (iterator->node == &iterator->builder->end) return false;
add_after(iterator->node, filter, post_init_func, user_data);
return true;
}
void grpc_channel_stack_builder_destroy(grpc_channel_stack_builder *builder) {
filter_node *p = builder->begin.next;
while (p != &builder->end) {
filter_node *next = p->next;
gpr_free(p);
p = next;
}
gpr_free(builder);
}
void *grpc_channel_stack_builder_finish(grpc_exec_ctx *exec_ctx,
grpc_channel_stack_builder *builder,
size_t prefix_bytes, int initial_refs,
grpc_iomgr_cb_func destroy,
void *destroy_arg) {
// count the number of filters
size_t num_filters = 0;
for (filter_node *p = builder->begin.next; p != &builder->end; p = p->next) {
num_filters++;
}
// create an array of filters
const grpc_channel_filter **filters =
gpr_malloc(sizeof(*filters) * num_filters);
size_t i = 0;
for (filter_node *p = builder->begin.next; p != &builder->end; p = p->next) {
filters[i++] = p->filter;
}
// calculate the size of the channel stack
size_t channel_stack_size = grpc_channel_stack_size(filters, num_filters);
// allocate memory, with prefix_bytes followed by channel_stack_size
char *result = gpr_malloc(prefix_bytes + channel_stack_size);
// fetch a pointer to the channel stack
grpc_channel_stack *channel_stack =
(grpc_channel_stack *)(result + prefix_bytes);
// and initialize it
grpc_channel_stack_init(exec_ctx, initial_refs, destroy,
destroy_arg == NULL ? result : destroy_arg, filters,
num_filters, builder->args, builder->name,
channel_stack);
// run post-initialization functions
i = 0;
for (filter_node *p = builder->begin.next; p != &builder->end; p = p->next) {
if (p->init != NULL) {
p->init(channel_stack, grpc_channel_stack_element(channel_stack, i),
p->init_arg);
}
i++;
}
grpc_channel_stack_builder_destroy(builder);
gpr_free((grpc_channel_filter **)filters);
return result;
}

@ -0,0 +1,155 @@
/*
*
* Copyright 2016, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#ifndef GRPC_CORE_LIB_CHANNEL_CHANNEL_STACK_BUILDER_H
#define GRPC_CORE_LIB_CHANNEL_CHANNEL_STACK_BUILDER_H
#include <stdbool.h>
#include "src/core/lib/channel/channel_args.h"
#include "src/core/lib/channel/channel_stack.h"
/// grpc_channel_stack_builder offers a programmatic interface to selected
/// and order channel filters
typedef struct grpc_channel_stack_builder grpc_channel_stack_builder;
typedef struct grpc_channel_stack_builder_iterator
grpc_channel_stack_builder_iterator;
/// Create a new channel stack builder
grpc_channel_stack_builder *grpc_channel_stack_builder_create(void);
/// Assign a name to the channel stack: \a name must be statically allocated
void grpc_channel_stack_builder_set_name(grpc_channel_stack_builder *builder,
const char *name);
/// Attach \a transport to the builder (does not take ownership)
void grpc_channel_stack_builder_set_transport(
grpc_channel_stack_builder *builder, grpc_transport *transport);
/// Fetch attached transport
grpc_transport *grpc_channel_stack_builder_get_transport(
grpc_channel_stack_builder *builder);
/// Set channel arguments: \a args must continue to exist until after
/// grpc_channel_stack_builder_finish returns
void grpc_channel_stack_builder_set_channel_arguments(
grpc_channel_stack_builder *builder, const grpc_channel_args *args);
/// Return a borrowed pointer to the channel arguments
const grpc_channel_args *grpc_channel_stack_builder_get_channel_arguments(
grpc_channel_stack_builder *builder);
/// Begin iterating over already defined filters in the builder at the beginning
grpc_channel_stack_builder_iterator *
grpc_channel_stack_builder_create_iterator_at_first(
grpc_channel_stack_builder *builder);
/// Begin iterating over already defined filters in the builder at the end
grpc_channel_stack_builder_iterator *
grpc_channel_stack_builder_create_iterator_at_last(
grpc_channel_stack_builder *builder);
/// Is an iterator at the first element?
bool grpc_channel_stack_builder_iterator_is_first(
grpc_channel_stack_builder_iterator *iterator);
/// Is an iterator at the end?
bool grpc_channel_stack_builder_iterator_is_end(
grpc_channel_stack_builder_iterator *iterator);
/// Move an iterator to the next item
bool grpc_channel_stack_builder_move_next(
grpc_channel_stack_builder_iterator *iterator);
/// Move an iterator to the previous item
bool grpc_channel_stack_builder_move_prev(
grpc_channel_stack_builder_iterator *iterator);
typedef void (*grpc_post_filter_create_init_func)(
grpc_channel_stack *channel_stack, grpc_channel_element *elem, void *arg);
/// Add \a filter to the stack, after \a iterator.
/// Call \a post_init_func(..., \a user_data) once the channel stack is
/// created.
bool grpc_channel_stack_builder_add_filter_after(
grpc_channel_stack_builder_iterator *iterator,
const grpc_channel_filter *filter,
grpc_post_filter_create_init_func post_init_func,
void *user_data) GRPC_MUST_USE_RESULT;
/// Add \a filter to the stack, before \a iterator.
/// Call \a post_init_func(..., \a user_data) once the channel stack is
/// created.
bool grpc_channel_stack_builder_add_filter_before(
grpc_channel_stack_builder_iterator *iterator,
const grpc_channel_filter *filter,
grpc_post_filter_create_init_func post_init_func,
void *user_data) GRPC_MUST_USE_RESULT;
/// Add \a filter to the beginning of the filter list.
/// Call \a post_init_func(..., \a user_data) once the channel stack is
/// created.
bool grpc_channel_stack_builder_prepend_filter(
grpc_channel_stack_builder *builder, const grpc_channel_filter *filter,
grpc_post_filter_create_init_func post_init_func,
void *user_data) GRPC_MUST_USE_RESULT;
/// Add \a filter to the end of the filter list.
/// Call \a post_init_func(..., \a user_data) once the channel stack is
/// created.
bool grpc_channel_stack_builder_append_filter(
grpc_channel_stack_builder *builder, const grpc_channel_filter *filter,
grpc_post_filter_create_init_func post_init_func,
void *user_data) GRPC_MUST_USE_RESULT;
/// Terminate iteration and destroy \a iterator
void grpc_channel_stack_builder_iterator_destroy(
grpc_channel_stack_builder_iterator *iterator);
/// Destroy the builder, return the freshly minted channel stack
/// Allocates \a prefix_bytes bytes before the channel stack
/// Returns the base pointer of the allocated block
/// \a initial_refs, \a destroy, \a destroy_arg are as per
/// grpc_channel_stack_init
void *grpc_channel_stack_builder_finish(grpc_exec_ctx *exec_ctx,
grpc_channel_stack_builder *builder,
size_t prefix_bytes, int initial_refs,
grpc_iomgr_cb_func destroy,
void *destroy_arg);
/// Destroy the builder without creating a channel stack
void grpc_channel_stack_builder_destroy(grpc_channel_stack_builder *builder);
extern int grpc_trace_channel_stack_builder;
#endif /* GRPC_CORE_LIB_CHANNEL_CHANNEL_STACK_BUILDER_H */

@ -31,7 +31,7 @@
* *
*/ */
#include "src/core/channel/client_channel.h" #include "src/core/lib/channel/client_channel.h"
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@ -41,14 +41,14 @@
#include <grpc/support/sync.h> #include <grpc/support/sync.h>
#include <grpc/support/useful.h> #include <grpc/support/useful.h>
#include "src/core/channel/channel_args.h" #include "src/core/lib/channel/channel_args.h"
#include "src/core/channel/connected_channel.h" #include "src/core/lib/channel/connected_channel.h"
#include "src/core/channel/subchannel_call_holder.h" #include "src/core/lib/channel/subchannel_call_holder.h"
#include "src/core/iomgr/iomgr.h" #include "src/core/lib/iomgr/iomgr.h"
#include "src/core/profiling/timers.h" #include "src/core/lib/profiling/timers.h"
#include "src/core/support/string.h" #include "src/core/lib/support/string.h"
#include "src/core/surface/channel.h" #include "src/core/lib/surface/channel.h"
#include "src/core/transport/connectivity_state.h" #include "src/core/lib/transport/connectivity_state.h"
/* Client channel implementation */ /* Client channel implementation */
@ -453,9 +453,17 @@ static void cc_set_pollset(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
} }
const grpc_channel_filter grpc_client_channel_filter = { const grpc_channel_filter grpc_client_channel_filter = {
cc_start_transport_stream_op, cc_start_transport_op, sizeof(call_data), cc_start_transport_stream_op,
init_call_elem, cc_set_pollset, destroy_call_elem, sizeof(channel_data), cc_start_transport_op,
init_channel_elem, destroy_channel_elem, cc_get_peer, "client-channel", sizeof(call_data),
init_call_elem,
cc_set_pollset,
destroy_call_elem,
sizeof(channel_data),
init_channel_elem,
destroy_channel_elem,
cc_get_peer,
"client-channel",
}; };
void grpc_client_channel_set_resolver(grpc_exec_ctx *exec_ctx, void grpc_client_channel_set_resolver(grpc_exec_ctx *exec_ctx,

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -31,11 +31,11 @@
* *
*/ */
#ifndef GRPC_INTERNAL_CORE_CHANNEL_CLIENT_CHANNEL_H #ifndef GRPC_CORE_LIB_CHANNEL_CLIENT_CHANNEL_H
#define GRPC_INTERNAL_CORE_CHANNEL_CLIENT_CHANNEL_H #define GRPC_CORE_LIB_CHANNEL_CLIENT_CHANNEL_H
#include "src/core/channel/channel_stack.h" #include "src/core/lib/channel/channel_stack.h"
#include "src/core/client_config/resolver.h" #include "src/core/lib/client_config/resolver.h"
/* A client channel is a channel that begins disconnected, and can connect /* A client channel is a channel that begins disconnected, and can connect
to some endpoint on demand. If that endpoint disconnects, it will be to some endpoint on demand. If that endpoint disconnects, it will be
@ -60,4 +60,4 @@ void grpc_client_channel_watch_connectivity_state(
grpc_exec_ctx *exec_ctx, grpc_channel_element *elem, grpc_pollset *pollset, grpc_exec_ctx *exec_ctx, grpc_channel_element *elem, grpc_pollset *pollset,
grpc_connectivity_state *state, grpc_closure *on_complete); grpc_connectivity_state *state, grpc_closure *on_complete);
#endif /* GRPC_INTERNAL_CORE_CHANNEL_CLIENT_CHANNEL_H */ #endif /* GRPC_CORE_LIB_CHANNEL_CLIENT_CHANNEL_H */

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save