grpc 1.28.0 → 1.30.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (497) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +7694 -11190
  3. data/include/grpc/grpc.h +2 -2
  4. data/include/grpc/grpc_security.h +22 -9
  5. data/include/grpc/grpc_security_constants.h +1 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +19 -21
  7. data/include/grpc/impl/codegen/port_platform.h +6 -2
  8. data/include/grpc/module.modulemap +24 -39
  9. data/src/core/ext/filters/client_channel/backend_metric.cc +7 -4
  10. data/src/core/ext/filters/client_channel/client_channel.cc +203 -236
  11. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
  12. data/src/core/ext/filters/client_channel/health/health_check_client.cc +7 -22
  13. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  14. data/src/core/ext/filters/client_channel/http_proxy.cc +17 -10
  15. data/src/core/ext/filters/client_channel/lb_policy.cc +19 -18
  16. data/src/core/ext/filters/client_channel/lb_policy.h +42 -33
  17. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  18. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  19. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +10 -4
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +240 -301
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +11 -9
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
  26. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +5 -11
  28. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
  29. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +84 -37
  30. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -2
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +834 -0
  34. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +6 -2
  35. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
  36. data/src/core/ext/filters/client_channel/parse_address.cc +22 -21
  37. data/src/core/ext/filters/client_channel/resolver.cc +5 -8
  38. data/src/core/ext/filters/client_channel/resolver.h +12 -14
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +73 -59
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +35 -35
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -7
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +16 -20
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +72 -117
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +184 -133
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -3
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +7 -4
  48. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +40 -43
  49. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +93 -102
  50. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +0 -4
  51. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +2 -2
  52. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +32 -5
  53. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
  54. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -3
  55. data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
  56. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +16 -16
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +19 -16
  58. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +20 -31
  59. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +4 -3
  60. data/src/core/ext/filters/client_channel/server_address.cc +6 -9
  61. data/src/core/ext/filters/client_channel/server_address.h +6 -12
  62. data/src/core/ext/filters/client_channel/service_config.cc +104 -144
  63. data/src/core/ext/filters/client_channel/service_config.h +28 -98
  64. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  65. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  66. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  67. data/src/core/ext/filters/client_channel/subchannel.cc +54 -24
  68. data/src/core/ext/filters/client_channel/subchannel.h +35 -11
  69. data/src/core/ext/filters/client_channel/xds/xds_api.cc +348 -221
  70. data/src/core/ext/filters/client_channel/xds/xds_api.h +37 -37
  71. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +44 -49
  72. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +4 -3
  73. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +4 -2
  74. data/src/core/ext/filters/client_channel/xds/xds_client.cc +532 -339
  75. data/src/core/ext/filters/client_channel/xds/xds_client.h +57 -22
  76. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +11 -12
  77. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +31 -19
  78. data/src/core/ext/filters/http/client/http_client_filter.cc +23 -28
  79. data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
  80. data/src/core/ext/filters/http/http_filters_plugin.cc +27 -12
  81. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
  82. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +358 -0
  83. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +29 -0
  84. data/src/core/ext/filters/message_size/message_size_filter.cc +7 -10
  85. data/src/core/ext/filters/message_size/message_size_filter.h +4 -4
  86. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +4 -4
  87. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +23 -22
  89. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
  90. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  91. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
  92. data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
  93. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
  94. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
  95. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
  96. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +29 -16
  97. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
  98. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
  99. data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
  100. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  101. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  102. data/src/core/ext/transport/chttp2/transport/internal.h +14 -21
  103. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  104. data/src/core/ext/transport/chttp2/transport/writing.cc +15 -8
  105. data/src/core/ext/transport/inproc/inproc_transport.cc +19 -0
  106. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +4 -229
  107. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +5 -875
  108. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
  109. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +418 -0
  110. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
  111. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +197 -0
  112. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
  113. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +378 -0
  114. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +1 -0
  115. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +21 -8
  116. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +43 -7
  117. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +1 -0
  118. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +1 -0
  119. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +1 -0
  120. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +2 -1
  121. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
  122. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +78 -0
  123. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +47 -26
  124. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +115 -65
  125. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +1 -0
  126. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
  127. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +72 -0
  128. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +2 -1
  129. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +24 -20
  130. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +28 -13
  131. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +1 -0
  132. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +38 -18
  133. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +88 -6
  134. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
  135. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +89 -0
  136. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -0
  137. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +1 -0
  138. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -0
  139. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +1 -0
  140. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +9 -6
  141. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +12 -4
  142. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +1 -0
  143. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +1 -0
  144. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +15 -10
  145. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +16 -0
  146. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +1 -0
  147. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +2 -1
  148. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +1 -0
  149. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +1 -0
  150. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +1 -0
  151. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +1 -0
  152. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +63 -41
  153. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +173 -77
  154. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +1 -0
  155. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +1 -0
  156. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -0
  157. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +48 -28
  158. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +90 -30
  159. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +1 -0
  160. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
  161. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
  162. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +1 -0
  163. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +4 -2
  164. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +4 -0
  165. data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
  166. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +16 -0
  167. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +36 -0
  168. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +1 -0
  169. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +1 -0
  170. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
  171. data/src/core/ext/upb-generated/envoy/type/range.upb.c +1 -0
  172. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +1 -0
  173. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +1 -0
  174. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +9 -8
  175. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +30 -24
  176. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  177. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +65 -0
  178. data/src/core/ext/upb-generated/validate/validate.upb.c +21 -20
  179. data/src/core/ext/upb-generated/validate/validate.upb.h +69 -63
  180. data/src/core/lib/channel/channel_args.cc +15 -14
  181. data/src/core/lib/channel/channel_args.h +3 -1
  182. data/src/core/lib/channel/channel_stack.h +20 -13
  183. data/src/core/lib/channel/channelz.cc +5 -6
  184. data/src/core/lib/channel/channelz.h +3 -2
  185. data/src/core/lib/channel/channelz_registry.cc +5 -3
  186. data/src/core/lib/channel/connected_channel.cc +7 -5
  187. data/src/core/lib/channel/context.h +1 -1
  188. data/src/core/lib/channel/handshaker.cc +11 -13
  189. data/src/core/lib/channel/handshaker.h +4 -2
  190. data/src/core/lib/channel/handshaker_registry.cc +5 -17
  191. data/src/core/lib/channel/status_util.cc +2 -3
  192. data/src/core/lib/compression/message_compress.cc +5 -1
  193. data/src/core/lib/debug/stats.cc +21 -27
  194. data/src/core/lib/debug/stats.h +3 -1
  195. data/src/core/lib/gpr/spinlock.h +2 -3
  196. data/src/core/lib/gpr/string.cc +2 -26
  197. data/src/core/lib/gpr/string.h +0 -16
  198. data/src/core/lib/gpr/sync_abseil.cc +2 -0
  199. data/src/core/lib/gpr/time.cc +4 -0
  200. data/src/core/lib/gpr/time_posix.cc +1 -1
  201. data/src/core/lib/gprpp/atomic.h +6 -6
  202. data/src/core/lib/gprpp/fork.cc +1 -1
  203. data/src/core/lib/gprpp/host_port.cc +29 -35
  204. data/src/core/lib/gprpp/host_port.h +14 -17
  205. data/src/core/lib/gprpp/map.h +5 -11
  206. data/src/core/lib/gprpp/ref_counted_ptr.h +5 -0
  207. data/src/core/lib/http/format_request.cc +46 -65
  208. data/src/core/lib/http/httpcli.cc +2 -3
  209. data/src/core/lib/http/httpcli.h +2 -3
  210. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  211. data/src/core/lib/http/parser.h +2 -3
  212. data/src/core/lib/iomgr/buffer_list.h +22 -21
  213. data/src/core/lib/iomgr/call_combiner.h +3 -2
  214. data/src/core/lib/iomgr/cfstream_handle.cc +3 -2
  215. data/src/core/lib/iomgr/closure.h +2 -3
  216. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  217. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -3
  218. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  219. data/src/core/lib/iomgr/error.cc +6 -9
  220. data/src/core/lib/iomgr/error.h +0 -1
  221. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  222. data/src/core/lib/iomgr/ev_apple.h +43 -0
  223. data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -23
  224. data/src/core/lib/iomgr/ev_epollex_linux.cc +2 -3
  225. data/src/core/lib/iomgr/ev_poll_posix.cc +3 -3
  226. data/src/core/lib/iomgr/ev_posix.cc +2 -3
  227. data/src/core/lib/iomgr/exec_ctx.h +14 -2
  228. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
  229. data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
  230. data/src/core/lib/{gprpp/optional.h → iomgr/pollset_uv.h} +11 -12
  231. data/src/core/lib/iomgr/port.h +1 -0
  232. data/src/core/lib/iomgr/python_util.h +46 -0
  233. data/src/core/lib/iomgr/resolve_address.h +4 -6
  234. data/src/core/lib/iomgr/resolve_address_custom.cc +29 -39
  235. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  236. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -11
  237. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -17
  238. data/src/core/lib/iomgr/resource_quota.cc +4 -6
  239. data/src/core/lib/iomgr/sockaddr_utils.cc +23 -29
  240. data/src/core/lib/iomgr/sockaddr_utils.h +9 -14
  241. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  242. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  243. data/src/core/lib/iomgr/socket_utils_common_posix.cc +7 -26
  244. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -7
  246. data/src/core/lib/iomgr/tcp_client_posix.cc +8 -5
  247. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  248. data/src/core/lib/iomgr/tcp_custom.cc +2 -3
  249. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -9
  250. data/src/core/lib/iomgr/tcp_server_posix.cc +5 -4
  251. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -4
  252. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -11
  253. data/src/core/lib/iomgr/tcp_uv.cc +3 -2
  254. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  255. data/src/core/lib/iomgr/timer_generic.cc +2 -3
  256. data/src/core/lib/{gprpp/inlined_vector.h → iomgr/timer_generic.h} +19 -17
  257. data/src/core/lib/iomgr/timer_heap.h +2 -3
  258. data/src/core/lib/iomgr/udp_server.cc +9 -14
  259. data/src/core/lib/json/json.h +3 -2
  260. data/src/core/lib/json/json_reader.cc +5 -5
  261. data/src/core/lib/json/json_writer.cc +13 -12
  262. data/src/core/lib/security/credentials/composite/composite_credentials.cc +12 -0
  263. data/src/core/lib/security/credentials/composite/composite_credentials.h +6 -3
  264. data/src/core/lib/security/credentials/credentials.cc +0 -84
  265. data/src/core/lib/security/credentials/credentials.h +8 -59
  266. data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
  267. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +3 -8
  268. data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
  269. data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
  270. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  271. data/src/core/lib/security/credentials/jwt/json_token.h +2 -5
  272. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
  273. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +8 -15
  274. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -3
  275. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +55 -27
  276. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +9 -3
  277. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +13 -0
  278. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
  279. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +23 -13
  280. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +38 -11
  281. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +21 -6
  282. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +7 -7
  283. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -2
  284. data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
  285. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  286. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +20 -25
  287. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -6
  288. data/src/core/lib/security/security_connector/ssl_utils.cc +59 -12
  289. data/src/core/lib/security/security_connector/ssl_utils.h +12 -10
  290. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +77 -51
  291. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -5
  292. data/src/core/lib/security/transport/client_auth_filter.cc +1 -2
  293. data/src/core/lib/slice/slice_intern.cc +2 -3
  294. data/src/core/lib/slice/slice_internal.h +14 -0
  295. data/src/core/lib/slice/slice_utils.h +9 -0
  296. data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
  297. data/src/core/lib/surface/call.cc +2 -3
  298. data/src/core/lib/surface/call_log_batch.cc +50 -58
  299. data/src/core/lib/surface/channel.cc +53 -31
  300. data/src/core/lib/surface/channel.h +35 -4
  301. data/src/core/lib/surface/channel_ping.cc +2 -3
  302. data/src/core/lib/surface/completion_queue.cc +33 -33
  303. data/src/core/lib/surface/event_string.cc +18 -25
  304. data/src/core/lib/surface/event_string.h +3 -1
  305. data/src/core/lib/surface/init_secure.cc +1 -4
  306. data/src/core/lib/surface/server.cc +570 -369
  307. data/src/core/lib/surface/server.h +32 -0
  308. data/src/core/lib/surface/version.cc +2 -2
  309. data/src/core/lib/transport/byte_stream.h +7 -2
  310. data/src/core/lib/transport/connectivity_state.cc +7 -6
  311. data/src/core/lib/transport/connectivity_state.h +5 -3
  312. data/src/core/lib/transport/metadata.cc +3 -3
  313. data/src/core/lib/transport/metadata_batch.h +2 -3
  314. data/src/core/lib/transport/static_metadata.h +1 -1
  315. data/src/core/lib/transport/status_conversion.cc +6 -14
  316. data/src/core/lib/transport/transport.cc +2 -3
  317. data/src/core/lib/transport/transport.h +3 -2
  318. data/src/core/lib/transport/transport_op_string.cc +61 -102
  319. data/src/core/lib/uri/uri_parser.h +2 -3
  320. data/src/core/plugin_registry/grpc_plugin_registry.cc +20 -4
  321. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  322. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +8 -1
  323. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
  324. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -2
  325. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
  326. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  327. data/src/core/tsi/fake_transport_security.cc +10 -15
  328. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
  329. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
  330. data/src/core/tsi/ssl_transport_security.cc +52 -39
  331. data/src/core/tsi/ssl_transport_security.h +8 -8
  332. data/src/core/tsi/ssl_types.h +0 -2
  333. data/src/core/tsi/transport_security.h +6 -9
  334. data/src/core/tsi/transport_security_grpc.h +2 -3
  335. data/src/core/tsi/transport_security_interface.h +3 -3
  336. data/src/ruby/ext/grpc/rb_call.c +9 -1
  337. data/src/ruby/lib/grpc/errors.rb +103 -42
  338. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  339. data/src/ruby/lib/grpc/generic/interceptors.rb +4 -4
  340. data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
  341. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  342. data/src/ruby/lib/grpc/structs.rb +1 -1
  343. data/src/ruby/lib/grpc/version.rb +1 -1
  344. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  345. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +11 -0
  346. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
  347. data/src/ruby/spec/debug_message_spec.rb +134 -0
  348. data/src/ruby/spec/generic/service_spec.rb +2 -0
  349. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +5 -0
  350. data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -0
  351. data/src/ruby/spec/testdata/ca.pem +18 -13
  352. data/src/ruby/spec/testdata/client.key +26 -14
  353. data/src/ruby/spec/testdata/client.pem +18 -12
  354. data/src/ruby/spec/testdata/server1.key +26 -14
  355. data/src/ruby/spec/testdata/server1.pem +20 -14
  356. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  357. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  358. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  359. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  360. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  361. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  362. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  363. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  364. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  365. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  366. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  367. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  368. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  369. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  370. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  371. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  372. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  373. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  374. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  375. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  376. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  377. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  378. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  379. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  380. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  381. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  382. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  383. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  384. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  385. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  386. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  387. data/third_party/boringssl-with-bazel/err_data.c +329 -297
  388. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
  389. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +7 -5
  390. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
  391. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
  392. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +18 -26
  393. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
  394. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +14 -22
  395. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
  396. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +15 -0
  397. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -0
  398. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +425 -0
  399. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -0
  400. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +2 -2
  401. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +33 -32
  402. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
  403. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +2 -1
  404. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
  405. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +14 -11
  406. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
  407. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
  408. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +16 -0
  409. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +289 -117
  410. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +13 -27
  411. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
  412. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
  413. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +432 -160
  414. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
  415. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +5 -14
  416. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
  417. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +80 -99
  418. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -0
  419. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  420. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +90 -11
  421. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
  422. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
  423. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
  424. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
  425. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
  426. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  427. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  428. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  429. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +41 -5
  430. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +32 -17
  431. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +24 -114
  432. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
  433. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +1 -0
  434. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +51 -38
  435. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +15 -1
  436. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +44 -35
  437. data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -12
  438. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
  439. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -10
  440. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +16 -0
  441. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -0
  442. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -0
  443. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +278 -0
  444. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
  445. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
  446. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +16 -0
  447. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +5 -0
  448. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +4 -3
  449. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
  450. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +9 -4
  451. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +20 -0
  452. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
  453. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
  454. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +6 -0
  455. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -0
  456. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
  457. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -17
  458. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +31 -0
  459. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
  460. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +172 -77
  461. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  462. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +291 -0
  463. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +5 -3
  464. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -0
  465. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +0 -4
  466. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
  467. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
  468. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +146 -57
  469. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +14 -3
  470. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +28 -20
  471. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +12 -4
  472. data/third_party/boringssl-with-bazel/src/ssl/internal.h +64 -47
  473. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +10 -10
  474. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  475. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +21 -21
  476. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +29 -0
  477. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -0
  478. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +6 -1
  479. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +13 -2
  480. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +64 -5
  481. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +6 -0
  482. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +6 -2
  483. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +47 -53
  484. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -1
  485. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -27
  486. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +23 -75
  487. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +50 -20
  488. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +63 -25
  489. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
  490. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
  491. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
  492. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
  493. metadata +111 -37
  494. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1754
  495. data/src/core/lib/gprpp/string_view.h +0 -60
  496. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
  497. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
@@ -21,6 +21,8 @@
21
21
  #include <assert.h>
22
22
  #include <string.h>
23
23
 
24
+ #include "absl/types/optional.h"
25
+
24
26
  #include <grpc/compression.h>
25
27
  #include <grpc/slice_buffer.h>
26
28
  #include <grpc/support/alloc.h>
@@ -40,94 +42,156 @@
40
42
  #include "src/core/lib/surface/call.h"
41
43
  #include "src/core/lib/transport/static_metadata.h"
42
44
 
43
- static void start_send_message_batch(void* arg, grpc_error* unused);
44
- static void send_message_on_complete(void* arg, grpc_error* error);
45
- static void on_send_message_next_done(void* arg, grpc_error* error);
46
-
47
45
  namespace {
48
46
 
49
- struct channel_data {
47
+ class ChannelData {
48
+ public:
49
+ explicit ChannelData(grpc_channel_element_args* args) {
50
+ // Get the enabled and the default algorithms from channel args.
51
+ enabled_compression_algorithms_bitset_ =
52
+ grpc_channel_args_compression_algorithm_get_states(args->channel_args);
53
+ default_compression_algorithm_ =
54
+ grpc_channel_args_get_channel_default_compression_algorithm(
55
+ args->channel_args);
56
+ // Make sure the default is enabled.
57
+ if (!GPR_BITGET(enabled_compression_algorithms_bitset_,
58
+ default_compression_algorithm_)) {
59
+ const char* name;
60
+ GPR_ASSERT(grpc_compression_algorithm_name(default_compression_algorithm_,
61
+ &name) == 1);
62
+ gpr_log(GPR_ERROR,
63
+ "default compression algorithm %s not enabled: switching to none",
64
+ name);
65
+ default_compression_algorithm_ = GRPC_COMPRESS_NONE;
66
+ }
67
+ enabled_message_compression_algorithms_bitset_ =
68
+ grpc_compression_bitset_to_message_bitset(
69
+ enabled_compression_algorithms_bitset_);
70
+ enabled_stream_compression_algorithms_bitset_ =
71
+ grpc_compression_bitset_to_stream_bitset(
72
+ enabled_compression_algorithms_bitset_);
73
+ GPR_ASSERT(!args->is_last);
74
+ }
75
+
76
+ grpc_compression_algorithm default_compression_algorithm() const {
77
+ return default_compression_algorithm_;
78
+ }
79
+
80
+ uint32_t enabled_compression_algorithms_bitset() const {
81
+ return enabled_compression_algorithms_bitset_;
82
+ }
83
+
84
+ uint32_t enabled_message_compression_algorithms_bitset() const {
85
+ return enabled_message_compression_algorithms_bitset_;
86
+ }
87
+
88
+ uint32_t enabled_stream_compression_algorithms_bitset() const {
89
+ return enabled_stream_compression_algorithms_bitset_;
90
+ }
91
+
92
+ private:
50
93
  /** The default, channel-level, compression algorithm */
51
- grpc_compression_algorithm default_compression_algorithm;
94
+ grpc_compression_algorithm default_compression_algorithm_;
52
95
  /** Bitset of enabled compression algorithms */
53
- uint32_t enabled_compression_algorithms_bitset;
96
+ uint32_t enabled_compression_algorithms_bitset_;
54
97
  /** Bitset of enabled message compression algorithms */
55
- uint32_t enabled_message_compression_algorithms_bitset;
98
+ uint32_t enabled_message_compression_algorithms_bitset_;
56
99
  /** Bitset of enabled stream compression algorithms */
57
- uint32_t enabled_stream_compression_algorithms_bitset;
100
+ uint32_t enabled_stream_compression_algorithms_bitset_;
58
101
  };
59
102
 
60
- struct call_data {
61
- call_data(grpc_call_element* elem, const grpc_call_element_args& args)
62
- : call_combiner(args.call_combiner) {
63
- channel_data* channeld = static_cast<channel_data*>(elem->channel_data);
103
+ class CallData {
104
+ public:
105
+ CallData(grpc_call_element* elem, const grpc_call_element_args& args)
106
+ : call_combiner_(args.call_combiner) {
107
+ ChannelData* channeld = static_cast<ChannelData*>(elem->channel_data);
64
108
  // The call's message compression algorithm is set to channel's default
65
109
  // setting. It can be overridden later by initial metadata.
66
- if (GPR_LIKELY(GPR_BITGET(channeld->enabled_compression_algorithms_bitset,
67
- channeld->default_compression_algorithm))) {
68
- message_compression_algorithm =
110
+ if (GPR_LIKELY(GPR_BITGET(channeld->enabled_compression_algorithms_bitset(),
111
+ channeld->default_compression_algorithm()))) {
112
+ message_compression_algorithm_ =
69
113
  grpc_compression_algorithm_to_message_compression_algorithm(
70
- channeld->default_compression_algorithm);
114
+ channeld->default_compression_algorithm());
71
115
  }
72
- GRPC_CLOSURE_INIT(&start_send_message_batch_in_call_combiner,
73
- start_send_message_batch, elem,
74
- grpc_schedule_on_exec_ctx);
116
+ GRPC_CLOSURE_INIT(&start_send_message_batch_in_call_combiner_,
117
+ StartSendMessageBatch, elem, grpc_schedule_on_exec_ctx);
75
118
  }
76
119
 
77
- ~call_data() {
78
- if (state_initialized) {
79
- grpc_slice_buffer_destroy_internal(&slices);
120
+ ~CallData() {
121
+ if (state_initialized_) {
122
+ grpc_slice_buffer_destroy_internal(&slices_);
80
123
  }
81
- GRPC_ERROR_UNREF(cancel_error);
124
+ GRPC_ERROR_UNREF(cancel_error_);
82
125
  }
83
126
 
84
- grpc_core::CallCombiner* call_combiner;
85
- grpc_message_compression_algorithm message_compression_algorithm =
127
+ void CompressStartTransportStreamOpBatch(
128
+ grpc_call_element* elem, grpc_transport_stream_op_batch* batch);
129
+
130
+ private:
131
+ bool SkipMessageCompression();
132
+ void InitializeState(grpc_call_element* elem);
133
+
134
+ grpc_error* ProcessSendInitialMetadata(grpc_call_element* elem,
135
+ grpc_metadata_batch* initial_metadata);
136
+
137
+ // Methods for processing a send_message batch
138
+ static void StartSendMessageBatch(void* elem_arg, grpc_error* unused);
139
+ static void OnSendMessageNextDone(void* elem_arg, grpc_error* error);
140
+ grpc_error* PullSliceFromSendMessage();
141
+ void ContinueReadingSendMessage(grpc_call_element* elem);
142
+ void FinishSendMessage(grpc_call_element* elem);
143
+ void SendMessageBatchContinue(grpc_call_element* elem);
144
+ static void FailSendMessageBatchInCallCombiner(void* calld_arg,
145
+ grpc_error* error);
146
+
147
+ static void SendMessageOnComplete(void* calld_arg, grpc_error* error);
148
+
149
+ grpc_core::CallCombiner* call_combiner_;
150
+ grpc_message_compression_algorithm message_compression_algorithm_ =
86
151
  GRPC_MESSAGE_COMPRESS_NONE;
87
- grpc_error* cancel_error = GRPC_ERROR_NONE;
88
- grpc_transport_stream_op_batch* send_message_batch = nullptr;
89
- bool seen_initial_metadata = false;
152
+ grpc_error* cancel_error_ = GRPC_ERROR_NONE;
153
+ grpc_transport_stream_op_batch* send_message_batch_ = nullptr;
154
+ bool seen_initial_metadata_ = false;
90
155
  /* Set to true, if the fields below are initialized. */
91
- bool state_initialized = false;
92
- grpc_closure start_send_message_batch_in_call_combiner;
156
+ bool state_initialized_ = false;
157
+ grpc_closure start_send_message_batch_in_call_combiner_;
93
158
  /* The fields below are only initialized when we compress the payload.
94
159
  * Keep them at the bottom of the struct, so they don't pollute the
95
160
  * cache-lines. */
96
- grpc_linked_mdelem message_compression_algorithm_storage;
97
- grpc_linked_mdelem stream_compression_algorithm_storage;
98
- grpc_linked_mdelem accept_encoding_storage;
99
- grpc_linked_mdelem accept_stream_encoding_storage;
100
- grpc_slice_buffer slices; /**< Buffers up input slices to be compressed */
101
- grpc_core::ManualConstructor<grpc_core::SliceBufferByteStream>
102
- replacement_stream;
103
- grpc_closure* original_send_message_on_complete;
104
- grpc_closure send_message_on_complete;
105
- grpc_closure on_send_message_next_done;
161
+ grpc_linked_mdelem message_compression_algorithm_storage_;
162
+ grpc_linked_mdelem stream_compression_algorithm_storage_;
163
+ grpc_linked_mdelem accept_encoding_storage_;
164
+ grpc_linked_mdelem accept_stream_encoding_storage_;
165
+ grpc_slice_buffer slices_; /**< Buffers up input slices to be compressed */
166
+ // Allocate space for the replacement stream
167
+ std::aligned_storage<sizeof(grpc_core::SliceBufferByteStream),
168
+ alignof(grpc_core::SliceBufferByteStream)>::type
169
+ replacement_stream_;
170
+ grpc_closure* original_send_message_on_complete_ = nullptr;
171
+ grpc_closure send_message_on_complete_;
172
+ grpc_closure on_send_message_next_done_;
106
173
  };
107
174
 
108
- } // namespace
109
-
110
175
  // Returns true if we should skip message compression for the current message.
111
- static bool skip_message_compression(grpc_call_element* elem) {
112
- call_data* calld = static_cast<call_data*>(elem->call_data);
176
+ bool CallData::SkipMessageCompression() {
113
177
  // If the flags of this message indicate that it shouldn't be compressed, we
114
178
  // skip message compression.
115
179
  uint32_t flags =
116
- calld->send_message_batch->payload->send_message.send_message->flags();
180
+ send_message_batch_->payload->send_message.send_message->flags();
117
181
  if (flags & (GRPC_WRITE_NO_COMPRESS | GRPC_WRITE_INTERNAL_COMPRESS)) {
118
182
  return true;
119
183
  }
120
184
  // If this call doesn't have any message compression algorithm set, skip
121
185
  // message compression.
122
- return calld->message_compression_algorithm == GRPC_MESSAGE_COMPRESS_NONE;
186
+ return message_compression_algorithm_ == GRPC_MESSAGE_COMPRESS_NONE;
123
187
  }
124
188
 
125
189
  // Determines the compression algorithm from the initial metadata and the
126
190
  // channel's default setting.
127
- static grpc_compression_algorithm find_compression_algorithm(
128
- grpc_metadata_batch* initial_metadata, channel_data* channeld) {
191
+ grpc_compression_algorithm FindCompressionAlgorithm(
192
+ grpc_metadata_batch* initial_metadata, ChannelData* channeld) {
129
193
  if (initial_metadata->idx.named.grpc_internal_encoding_request == nullptr) {
130
- return channeld->default_compression_algorithm;
194
+ return channeld->default_compression_algorithm();
131
195
  }
132
196
  grpc_compression_algorithm compression_algorithm;
133
197
  // Parse the compression algorithm from the initial metadata.
@@ -143,7 +207,7 @@ static grpc_compression_algorithm find_compression_algorithm(
143
207
  // enabled.
144
208
  // TODO(juanlishen): Maybe use channel default or abort() if the algorithm
145
209
  // from the initial metadata is disabled.
146
- if (GPR_LIKELY(GPR_BITGET(channeld->enabled_compression_algorithms_bitset,
210
+ if (GPR_LIKELY(GPR_BITGET(channeld->enabled_compression_algorithms_bitset(),
147
211
  compression_algorithm))) {
148
212
  return compression_algorithm;
149
213
  }
@@ -158,30 +222,24 @@ static grpc_compression_algorithm find_compression_algorithm(
158
222
  return GRPC_COMPRESS_NONE;
159
223
  }
160
224
 
161
- static void initialize_state(grpc_call_element* elem, call_data* calld) {
162
- GPR_DEBUG_ASSERT(!calld->state_initialized);
163
- calld->state_initialized = true;
164
- grpc_slice_buffer_init(&calld->slices);
165
- GRPC_CLOSURE_INIT(&calld->send_message_on_complete,
166
- ::send_message_on_complete, elem,
225
+ void CallData::InitializeState(grpc_call_element* elem) {
226
+ GPR_DEBUG_ASSERT(!state_initialized_);
227
+ state_initialized_ = true;
228
+ grpc_slice_buffer_init(&slices_);
229
+ GRPC_CLOSURE_INIT(&send_message_on_complete_, SendMessageOnComplete, this,
167
230
  grpc_schedule_on_exec_ctx);
168
- GRPC_CLOSURE_INIT(&calld->on_send_message_next_done,
169
- ::on_send_message_next_done, elem,
231
+ GRPC_CLOSURE_INIT(&on_send_message_next_done_, OnSendMessageNextDone, elem,
170
232
  grpc_schedule_on_exec_ctx);
171
233
  }
172
234
 
173
- static grpc_error* process_send_initial_metadata(
174
- grpc_call_element* elem,
175
- grpc_metadata_batch* initial_metadata) GRPC_MUST_USE_RESULT;
176
- static grpc_error* process_send_initial_metadata(
235
+ grpc_error* CallData::ProcessSendInitialMetadata(
177
236
  grpc_call_element* elem, grpc_metadata_batch* initial_metadata) {
178
- call_data* calld = static_cast<call_data*>(elem->call_data);
179
- channel_data* channeld = static_cast<channel_data*>(elem->channel_data);
237
+ ChannelData* channeld = static_cast<ChannelData*>(elem->channel_data);
180
238
  // Find the compression algorithm.
181
239
  grpc_compression_algorithm compression_algorithm =
182
- find_compression_algorithm(initial_metadata, channeld);
240
+ FindCompressionAlgorithm(initial_metadata, channeld);
183
241
  // Note that at most one of the following algorithms can be set.
184
- calld->message_compression_algorithm =
242
+ message_compression_algorithm_ =
185
243
  grpc_compression_algorithm_to_message_compression_algorithm(
186
244
  compression_algorithm);
187
245
  grpc_stream_compression_algorithm stream_compression_algorithm =
@@ -189,321 +247,300 @@ static grpc_error* process_send_initial_metadata(
189
247
  compression_algorithm);
190
248
  // Hint compression algorithm.
191
249
  grpc_error* error = GRPC_ERROR_NONE;
192
- if (calld->message_compression_algorithm != GRPC_MESSAGE_COMPRESS_NONE) {
193
- initialize_state(elem, calld);
250
+ if (message_compression_algorithm_ != GRPC_MESSAGE_COMPRESS_NONE) {
251
+ InitializeState(elem);
194
252
  error = grpc_metadata_batch_add_tail(
195
- initial_metadata, &calld->message_compression_algorithm_storage,
253
+ initial_metadata, &message_compression_algorithm_storage_,
196
254
  grpc_message_compression_encoding_mdelem(
197
- calld->message_compression_algorithm),
255
+ message_compression_algorithm_),
198
256
  GRPC_BATCH_GRPC_ENCODING);
199
257
  } else if (stream_compression_algorithm != GRPC_STREAM_COMPRESS_NONE) {
200
- initialize_state(elem, calld);
258
+ InitializeState(elem);
201
259
  error = grpc_metadata_batch_add_tail(
202
- initial_metadata, &calld->stream_compression_algorithm_storage,
260
+ initial_metadata, &stream_compression_algorithm_storage_,
203
261
  grpc_stream_compression_encoding_mdelem(stream_compression_algorithm),
204
262
  GRPC_BATCH_CONTENT_ENCODING);
205
263
  }
206
264
  if (error != GRPC_ERROR_NONE) return error;
207
265
  // Convey supported compression algorithms.
208
266
  error = grpc_metadata_batch_add_tail(
209
- initial_metadata, &calld->accept_encoding_storage,
267
+ initial_metadata, &accept_encoding_storage_,
210
268
  GRPC_MDELEM_ACCEPT_ENCODING_FOR_ALGORITHMS(
211
- channeld->enabled_message_compression_algorithms_bitset),
269
+ channeld->enabled_message_compression_algorithms_bitset()),
212
270
  GRPC_BATCH_GRPC_ACCEPT_ENCODING);
213
271
  if (error != GRPC_ERROR_NONE) return error;
214
272
  // Do not overwrite accept-encoding header if it already presents (e.g., added
215
273
  // by some proxy).
216
274
  if (!initial_metadata->idx.named.accept_encoding) {
217
275
  error = grpc_metadata_batch_add_tail(
218
- initial_metadata, &calld->accept_stream_encoding_storage,
276
+ initial_metadata, &accept_stream_encoding_storage_,
219
277
  GRPC_MDELEM_ACCEPT_STREAM_ENCODING_FOR_ALGORITHMS(
220
- channeld->enabled_stream_compression_algorithms_bitset),
278
+ channeld->enabled_stream_compression_algorithms_bitset()),
221
279
  GRPC_BATCH_ACCEPT_ENCODING);
222
280
  }
223
281
  return error;
224
282
  }
225
283
 
226
- static void send_message_on_complete(void* arg, grpc_error* error) {
227
- grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
228
- call_data* calld = static_cast<call_data*>(elem->call_data);
229
- grpc_slice_buffer_reset_and_unref_internal(&calld->slices);
284
+ void CallData::SendMessageOnComplete(void* calld_arg, grpc_error* error) {
285
+ CallData* calld = static_cast<CallData*>(calld_arg);
286
+ grpc_slice_buffer_reset_and_unref_internal(&calld->slices_);
230
287
  grpc_core::Closure::Run(DEBUG_LOCATION,
231
- calld->original_send_message_on_complete,
288
+ calld->original_send_message_on_complete_,
232
289
  GRPC_ERROR_REF(error));
233
290
  }
234
291
 
235
- static void send_message_batch_continue(grpc_call_element* elem) {
236
- call_data* calld = static_cast<call_data*>(elem->call_data);
292
+ void CallData::SendMessageBatchContinue(grpc_call_element* elem) {
237
293
  // Note: The call to grpc_call_next_op() results in yielding the
238
- // call combiner, so we need to clear calld->send_message_batch
239
- // before we do that.
240
- grpc_transport_stream_op_batch* send_message_batch =
241
- calld->send_message_batch;
242
- calld->send_message_batch = nullptr;
294
+ // call combiner, so we need to clear send_message_batch_ before we do that.
295
+ grpc_transport_stream_op_batch* send_message_batch = send_message_batch_;
296
+ send_message_batch_ = nullptr;
243
297
  grpc_call_next_op(elem, send_message_batch);
244
298
  }
245
299
 
246
- static void finish_send_message(grpc_call_element* elem) {
247
- call_data* calld = static_cast<call_data*>(elem->call_data);
248
- GPR_DEBUG_ASSERT(calld->message_compression_algorithm !=
300
+ void CallData::FinishSendMessage(grpc_call_element* elem) {
301
+ GPR_DEBUG_ASSERT(message_compression_algorithm_ !=
249
302
  GRPC_MESSAGE_COMPRESS_NONE);
250
303
  // Compress the data if appropriate.
251
304
  grpc_slice_buffer tmp;
252
305
  grpc_slice_buffer_init(&tmp);
253
306
  uint32_t send_flags =
254
- calld->send_message_batch->payload->send_message.send_message->flags();
255
- bool did_compress = grpc_msg_compress(calld->message_compression_algorithm,
256
- &calld->slices, &tmp);
307
+ send_message_batch_->payload->send_message.send_message->flags();
308
+ bool did_compress =
309
+ grpc_msg_compress(message_compression_algorithm_, &slices_, &tmp);
257
310
  if (did_compress) {
258
311
  if (GRPC_TRACE_FLAG_ENABLED(grpc_compression_trace)) {
259
312
  const char* algo_name;
260
- const size_t before_size = calld->slices.length;
313
+ const size_t before_size = slices_.length;
261
314
  const size_t after_size = tmp.length;
262
315
  const float savings_ratio = 1.0f - static_cast<float>(after_size) /
263
316
  static_cast<float>(before_size);
264
317
  GPR_ASSERT(grpc_message_compression_algorithm_name(
265
- calld->message_compression_algorithm, &algo_name));
318
+ message_compression_algorithm_, &algo_name));
266
319
  gpr_log(GPR_INFO,
267
320
  "Compressed[%s] %" PRIuPTR " bytes vs. %" PRIuPTR
268
321
  " bytes (%.2f%% savings)",
269
322
  algo_name, before_size, after_size, 100 * savings_ratio);
270
323
  }
271
- grpc_slice_buffer_swap(&calld->slices, &tmp);
324
+ grpc_slice_buffer_swap(&slices_, &tmp);
272
325
  send_flags |= GRPC_WRITE_INTERNAL_COMPRESS;
273
326
  } else {
274
327
  if (GRPC_TRACE_FLAG_ENABLED(grpc_compression_trace)) {
275
328
  const char* algo_name;
276
329
  GPR_ASSERT(grpc_message_compression_algorithm_name(
277
- calld->message_compression_algorithm, &algo_name));
330
+ message_compression_algorithm_, &algo_name));
278
331
  gpr_log(GPR_INFO,
279
332
  "Algorithm '%s' enabled but decided not to compress. Input size: "
280
333
  "%" PRIuPTR,
281
- algo_name, calld->slices.length);
334
+ algo_name, slices_.length);
282
335
  }
283
336
  }
284
337
  grpc_slice_buffer_destroy_internal(&tmp);
285
338
  // Swap out the original byte stream with our new one and send the
286
339
  // batch down.
287
- calld->replacement_stream.Init(&calld->slices, send_flags);
288
- calld->send_message_batch->payload->send_message.send_message.reset(
289
- calld->replacement_stream.get());
290
- calld->original_send_message_on_complete =
291
- calld->send_message_batch->on_complete;
292
- calld->send_message_batch->on_complete = &calld->send_message_on_complete;
293
- send_message_batch_continue(elem);
340
+ new (&replacement_stream_)
341
+ grpc_core::SliceBufferByteStream(&slices_, send_flags);
342
+ send_message_batch_->payload->send_message.send_message.reset(
343
+ reinterpret_cast<grpc_core::SliceBufferByteStream*>(
344
+ &replacement_stream_));
345
+ original_send_message_on_complete_ = send_message_batch_->on_complete;
346
+ send_message_batch_->on_complete = &send_message_on_complete_;
347
+ SendMessageBatchContinue(elem);
294
348
  }
295
349
 
296
- static void fail_send_message_batch_in_call_combiner(void* arg,
297
- grpc_error* error) {
298
- call_data* calld = static_cast<call_data*>(arg);
299
- if (calld->send_message_batch != nullptr) {
350
+ void CallData::FailSendMessageBatchInCallCombiner(void* calld_arg,
351
+ grpc_error* error) {
352
+ CallData* calld = static_cast<CallData*>(calld_arg);
353
+ if (calld->send_message_batch_ != nullptr) {
300
354
  grpc_transport_stream_op_batch_finish_with_failure(
301
- calld->send_message_batch, GRPC_ERROR_REF(error), calld->call_combiner);
302
- calld->send_message_batch = nullptr;
355
+ calld->send_message_batch_, GRPC_ERROR_REF(error),
356
+ calld->call_combiner_);
357
+ calld->send_message_batch_ = nullptr;
303
358
  }
304
359
  }
305
360
 
306
- // Pulls a slice from the send_message byte stream and adds it to calld->slices.
307
- static grpc_error* pull_slice_from_send_message(call_data* calld) {
361
+ // Pulls a slice from the send_message byte stream and adds it to slices_.
362
+ grpc_error* CallData::PullSliceFromSendMessage() {
308
363
  grpc_slice incoming_slice;
309
364
  grpc_error* error =
310
- calld->send_message_batch->payload->send_message.send_message->Pull(
365
+ send_message_batch_->payload->send_message.send_message->Pull(
311
366
  &incoming_slice);
312
367
  if (error == GRPC_ERROR_NONE) {
313
- grpc_slice_buffer_add(&calld->slices, incoming_slice);
368
+ grpc_slice_buffer_add(&slices_, incoming_slice);
314
369
  }
315
370
  return error;
316
371
  }
317
372
 
318
373
  // Reads as many slices as possible from the send_message byte stream.
319
- // If all data has been read, invokes finish_send_message(). Otherwise,
374
+ // If all data has been read, invokes FinishSendMessage(). Otherwise,
320
375
  // an async call to ByteStream::Next() has been started, which will
321
- // eventually result in calling on_send_message_next_done().
322
- static void continue_reading_send_message(grpc_call_element* elem) {
323
- call_data* calld = static_cast<call_data*>(elem->call_data);
324
- if (calld->slices.length ==
325
- calld->send_message_batch->payload->send_message.send_message->length()) {
326
- finish_send_message(elem);
376
+ // eventually result in calling OnSendMessageNextDone().
377
+ void CallData::ContinueReadingSendMessage(grpc_call_element* elem) {
378
+ if (slices_.length ==
379
+ send_message_batch_->payload->send_message.send_message->length()) {
380
+ FinishSendMessage(elem);
327
381
  return;
328
382
  }
329
- while (calld->send_message_batch->payload->send_message.send_message->Next(
330
- ~static_cast<size_t>(0), &calld->on_send_message_next_done)) {
331
- grpc_error* error = pull_slice_from_send_message(calld);
383
+ while (send_message_batch_->payload->send_message.send_message->Next(
384
+ ~static_cast<size_t>(0), &on_send_message_next_done_)) {
385
+ grpc_error* error = PullSliceFromSendMessage();
332
386
  if (error != GRPC_ERROR_NONE) {
333
387
  // Closure callback; does not take ownership of error.
334
- fail_send_message_batch_in_call_combiner(calld, error);
388
+ FailSendMessageBatchInCallCombiner(this, error);
335
389
  GRPC_ERROR_UNREF(error);
336
390
  return;
337
391
  }
338
- if (calld->slices.length == calld->send_message_batch->payload->send_message
339
- .send_message->length()) {
340
- finish_send_message(elem);
392
+ if (slices_.length ==
393
+ send_message_batch_->payload->send_message.send_message->length()) {
394
+ FinishSendMessage(elem);
341
395
  break;
342
396
  }
343
397
  }
344
398
  }
345
399
 
346
400
  // Async callback for ByteStream::Next().
347
- static void on_send_message_next_done(void* arg, grpc_error* error) {
348
- grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
349
- call_data* calld = static_cast<call_data*>(elem->call_data);
401
+ void CallData::OnSendMessageNextDone(void* elem_arg, grpc_error* error) {
402
+ grpc_call_element* elem = static_cast<grpc_call_element*>(elem_arg);
403
+ CallData* calld = static_cast<CallData*>(elem->call_data);
350
404
  if (error != GRPC_ERROR_NONE) {
351
405
  // Closure callback; does not take ownership of error.
352
- fail_send_message_batch_in_call_combiner(calld, error);
406
+ FailSendMessageBatchInCallCombiner(calld, error);
353
407
  return;
354
408
  }
355
- error = pull_slice_from_send_message(calld);
409
+ error = calld->PullSliceFromSendMessage();
356
410
  if (error != GRPC_ERROR_NONE) {
357
411
  // Closure callback; does not take ownership of error.
358
- fail_send_message_batch_in_call_combiner(calld, error);
412
+ FailSendMessageBatchInCallCombiner(calld, error);
359
413
  GRPC_ERROR_UNREF(error);
360
414
  return;
361
415
  }
362
- if (calld->slices.length ==
363
- calld->send_message_batch->payload->send_message.send_message->length()) {
364
- finish_send_message(elem);
416
+ if (calld->slices_.length == calld->send_message_batch_->payload->send_message
417
+ .send_message->length()) {
418
+ calld->FinishSendMessage(elem);
365
419
  } else {
366
- continue_reading_send_message(elem);
420
+ calld->ContinueReadingSendMessage(elem);
367
421
  }
368
422
  }
369
423
 
370
- static void start_send_message_batch(void* arg, grpc_error* /*unused*/) {
371
- grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
372
- if (skip_message_compression(elem)) {
373
- send_message_batch_continue(elem);
424
+ void CallData::StartSendMessageBatch(void* elem_arg, grpc_error* /*unused*/) {
425
+ grpc_call_element* elem = static_cast<grpc_call_element*>(elem_arg);
426
+ CallData* calld = static_cast<CallData*>(elem->call_data);
427
+ if (calld->SkipMessageCompression()) {
428
+ calld->SendMessageBatchContinue(elem);
374
429
  } else {
375
- continue_reading_send_message(elem);
430
+ calld->ContinueReadingSendMessage(elem);
376
431
  }
377
432
  }
378
433
 
379
- static void compress_start_transport_stream_op_batch(
434
+ void CallData::CompressStartTransportStreamOpBatch(
380
435
  grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
381
436
  GPR_TIMER_SCOPE("compress_start_transport_stream_op_batch", 0);
382
- call_data* calld = static_cast<call_data*>(elem->call_data);
383
437
  // Handle cancel_stream.
384
438
  if (batch->cancel_stream) {
385
- GRPC_ERROR_UNREF(calld->cancel_error);
386
- calld->cancel_error =
387
- GRPC_ERROR_REF(batch->payload->cancel_stream.cancel_error);
388
- if (calld->send_message_batch != nullptr) {
389
- if (!calld->seen_initial_metadata) {
439
+ GRPC_ERROR_UNREF(cancel_error_);
440
+ cancel_error_ = GRPC_ERROR_REF(batch->payload->cancel_stream.cancel_error);
441
+ if (send_message_batch_ != nullptr) {
442
+ if (!seen_initial_metadata_) {
390
443
  GRPC_CALL_COMBINER_START(
391
- calld->call_combiner,
392
- GRPC_CLOSURE_CREATE(fail_send_message_batch_in_call_combiner, calld,
444
+ call_combiner_,
445
+ GRPC_CLOSURE_CREATE(FailSendMessageBatchInCallCombiner, this,
393
446
  grpc_schedule_on_exec_ctx),
394
- GRPC_ERROR_REF(calld->cancel_error), "failing send_message op");
447
+ GRPC_ERROR_REF(cancel_error_), "failing send_message op");
395
448
  } else {
396
- calld->send_message_batch->payload->send_message.send_message->Shutdown(
397
- GRPC_ERROR_REF(calld->cancel_error));
449
+ send_message_batch_->payload->send_message.send_message->Shutdown(
450
+ GRPC_ERROR_REF(cancel_error_));
398
451
  }
399
452
  }
400
- } else if (calld->cancel_error != GRPC_ERROR_NONE) {
453
+ } else if (cancel_error_ != GRPC_ERROR_NONE) {
401
454
  grpc_transport_stream_op_batch_finish_with_failure(
402
- batch, GRPC_ERROR_REF(calld->cancel_error), calld->call_combiner);
455
+ batch, GRPC_ERROR_REF(cancel_error_), call_combiner_);
403
456
  return;
404
457
  }
405
458
  // Handle send_initial_metadata.
406
459
  if (batch->send_initial_metadata) {
407
- GPR_ASSERT(!calld->seen_initial_metadata);
408
- grpc_error* error = process_send_initial_metadata(
460
+ GPR_ASSERT(!seen_initial_metadata_);
461
+ grpc_error* error = ProcessSendInitialMetadata(
409
462
  elem, batch->payload->send_initial_metadata.send_initial_metadata);
410
463
  if (error != GRPC_ERROR_NONE) {
411
464
  grpc_transport_stream_op_batch_finish_with_failure(batch, error,
412
- calld->call_combiner);
465
+ call_combiner_);
413
466
  return;
414
467
  }
415
- calld->seen_initial_metadata = true;
468
+ seen_initial_metadata_ = true;
416
469
  // If we had previously received a batch containing a send_message op,
417
470
  // handle it now. Note that we need to re-enter the call combiner
418
471
  // for this, since we can't send two batches down while holding the
419
472
  // call combiner, since the connected_channel filter (at the bottom of
420
473
  // the call stack) will release the call combiner for each batch it sees.
421
- if (calld->send_message_batch != nullptr) {
474
+ if (send_message_batch_ != nullptr) {
422
475
  GRPC_CALL_COMBINER_START(
423
- calld->call_combiner,
424
- &calld->start_send_message_batch_in_call_combiner, GRPC_ERROR_NONE,
425
- "starting send_message after send_initial_metadata");
476
+ call_combiner_, &start_send_message_batch_in_call_combiner_,
477
+ GRPC_ERROR_NONE, "starting send_message after send_initial_metadata");
426
478
  }
427
479
  }
428
480
  // Handle send_message.
429
481
  if (batch->send_message) {
430
- GPR_ASSERT(calld->send_message_batch == nullptr);
431
- calld->send_message_batch = batch;
482
+ GPR_ASSERT(send_message_batch_ == nullptr);
483
+ send_message_batch_ = batch;
432
484
  // If we have not yet seen send_initial_metadata, then we have to
433
- // wait. We save the batch in calld and then drop the call
434
- // combiner, which we'll have to pick up again later when we get
435
- // send_initial_metadata.
436
- if (!calld->seen_initial_metadata) {
485
+ // wait. We save the batch and then drop the call combiner, which we'll
486
+ // have to pick up again later when we get send_initial_metadata.
487
+ if (!seen_initial_metadata_) {
437
488
  GRPC_CALL_COMBINER_STOP(
438
- calld->call_combiner,
439
- "send_message batch pending send_initial_metadata");
489
+ call_combiner_, "send_message batch pending send_initial_metadata");
440
490
  return;
441
491
  }
442
- start_send_message_batch(elem, GRPC_ERROR_NONE);
492
+ StartSendMessageBatch(elem, GRPC_ERROR_NONE);
443
493
  } else {
444
494
  // Pass control down the stack.
445
495
  grpc_call_next_op(elem, batch);
446
496
  }
447
497
  }
448
498
 
499
+ void CompressStartTransportStreamOpBatch(
500
+ grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
501
+ CallData* calld = static_cast<CallData*>(elem->call_data);
502
+ calld->CompressStartTransportStreamOpBatch(elem, batch);
503
+ }
504
+
449
505
  /* Constructor for call_data */
450
- static grpc_error* compress_init_call_elem(grpc_call_element* elem,
451
- const grpc_call_element_args* args) {
452
- new (elem->call_data) call_data(elem, *args);
506
+ grpc_error* CompressInitCallElem(grpc_call_element* elem,
507
+ const grpc_call_element_args* args) {
508
+ new (elem->call_data) CallData(elem, *args);
453
509
  return GRPC_ERROR_NONE;
454
510
  }
455
511
 
456
512
  /* Destructor for call_data */
457
- static void compress_destroy_call_elem(
458
- grpc_call_element* elem, const grpc_call_final_info* /*final_info*/,
459
- grpc_closure* /*ignored*/) {
460
- call_data* calld = static_cast<call_data*>(elem->call_data);
461
- calld->~call_data();
513
+ void CompressDestroyCallElem(grpc_call_element* elem,
514
+ const grpc_call_final_info* /*final_info*/,
515
+ grpc_closure* /*ignored*/) {
516
+ CallData* calld = static_cast<CallData*>(elem->call_data);
517
+ calld->~CallData();
462
518
  }
463
519
 
464
- /* Constructor for channel_data */
465
- static grpc_error* compress_init_channel_elem(grpc_channel_element* elem,
466
- grpc_channel_element_args* args) {
467
- channel_data* channeld = static_cast<channel_data*>(elem->channel_data);
468
- // Get the enabled and the default algorithms from channel args.
469
- channeld->enabled_compression_algorithms_bitset =
470
- grpc_channel_args_compression_algorithm_get_states(args->channel_args);
471
- channeld->default_compression_algorithm =
472
- grpc_channel_args_get_channel_default_compression_algorithm(
473
- args->channel_args);
474
- // Make sure the default is enabled.
475
- if (!GPR_BITGET(channeld->enabled_compression_algorithms_bitset,
476
- channeld->default_compression_algorithm)) {
477
- const char* name;
478
- GPR_ASSERT(grpc_compression_algorithm_name(
479
- channeld->default_compression_algorithm, &name) == 1);
480
- gpr_log(GPR_ERROR,
481
- "default compression algorithm %s not enabled: switching to none",
482
- name);
483
- channeld->default_compression_algorithm = GRPC_COMPRESS_NONE;
484
- }
485
- channeld->enabled_message_compression_algorithms_bitset =
486
- grpc_compression_bitset_to_message_bitset(
487
- channeld->enabled_compression_algorithms_bitset);
488
- channeld->enabled_stream_compression_algorithms_bitset =
489
- grpc_compression_bitset_to_stream_bitset(
490
- channeld->enabled_compression_algorithms_bitset);
491
- GPR_ASSERT(!args->is_last);
520
+ /* Constructor for ChannelData */
521
+ grpc_error* CompressInitChannelElem(grpc_channel_element* elem,
522
+ grpc_channel_element_args* args) {
523
+ new (elem->channel_data) ChannelData(args);
492
524
  return GRPC_ERROR_NONE;
493
525
  }
494
526
 
495
527
  /* Destructor for channel data */
496
- static void compress_destroy_channel_elem(grpc_channel_element* /*elem*/) {}
528
+ void CompressDestroyChannelElem(grpc_channel_element* elem) {
529
+ ChannelData* channeld = static_cast<ChannelData*>(elem->channel_data);
530
+ channeld->~ChannelData();
531
+ }
532
+
533
+ } // namespace
497
534
 
498
535
  const grpc_channel_filter grpc_message_compress_filter = {
499
- compress_start_transport_stream_op_batch,
536
+ CompressStartTransportStreamOpBatch,
500
537
  grpc_channel_next_op,
501
- sizeof(call_data),
502
- compress_init_call_elem,
538
+ sizeof(CallData),
539
+ CompressInitCallElem,
503
540
  grpc_call_stack_ignore_set_pollset_or_pollset_set,
504
- compress_destroy_call_elem,
505
- sizeof(channel_data),
506
- compress_init_channel_elem,
507
- compress_destroy_channel_elem,
541
+ CompressDestroyCallElem,
542
+ sizeof(ChannelData),
543
+ CompressInitChannelElem,
544
+ CompressDestroyChannelElem,
508
545
  grpc_channel_next_get_info,
509
546
  "message_compress"};